1 분 소요

개념정리


I2C 통신

주로 연산 능력이 없는 대상이랑 통신할떄 사용되는 방식

선 두가닥 여러개의 장치와 통신이 가능하다

i2C이 이외에도 CAN통신, 485 통신등이 버스를 공유해서 사용하는 방식

이런 통신 방식은 통신 대상을 어떻게 선택할지 그리고 데이터랑 클럽박스를 누가 정리해서 사용할지 등의 규악이 복잡한 편이다


I2C는 데이터 버스랑 클럽박스 두개의 선을 사용한다

통신을 관장하는 장치가 마스터 마스터 장치만 클럭을 발생할수 있다 즉 마스터만이 통신을 발생한다

마스터는 통신할 슬레이브 장치 선택할수 있어야한다

슬레이브는 7개의 주소를 선택할 수 있어야한다.

슬레이브가 같은 주소를 가지고 있으면 충돌이나서 통신이 실패된다.

슬레이브 장치 내부에는 데이터를 저장하는 내부 저장공간이 있다.

마스터는 원하는 슬레이브 장치에 내부 저장 영역에 몇번지 데이터에 접근을 하겠다. 그런 내부 저장 영역에 대한 주소개념이 나온다.

두가지 주소

  1. 장치의 주소
  2. 장치 내부의 저장공간의 주소
슬레이브마다 다르므로 장치 데이터 시트참고

I2C 1대1 통신 시 선연결

두가닥의 선을 연결해줘야한다

  1. SDA (Serial Data) - 데이터 라인
  2. SCL (Serial Clock) - 클럭 라인

각각 풀업 저항을 달아야하는데 통신 속도랑 연결이 되어 있어서 통신 속도를 높이기 위해서는 저항을 낮춰서 달아 주기도 한다.

슬레이브 장치는 7비트 이루어진 주소를 가지고 있다.

I2C 1대다 통신 시 선연결

1대1과 다른것이 없다.

참고 풀업 저항이 달려있지 않으면 통신 자채가 안 될 수도 있다


오픈 드레인 방식으로 핀들이 사용되기 떄문

  • 오픈 드레인 핀들이 논리적으로 하이 상태를 출력할 수 있는 방식이 없습니다. 그렇기 때문에 이렇게 풀업 저항이 반드시 있어야지 논리적으로 출력을 할 수 있다.

통신 예시

0xA0 장치 내부의 0x10 저장영역에 0x55 라는 데이터 쓰기

  1. 통신 시작전 버스 상태를 확인
  2. startbit 보낸 후 통신 시작
  3. 슬레이브 장치 주소 + W인 0xA0을 모든슬레이브 장치에게 송신
    • 슬레이브
  4. 자기가 맞으면 1bit 응답(ACK)을 보냄
    • 마스터
  5. 응답을 받으면 슬레이브 장치 내부의 저장영역 주소 0x10을 보냄
    • 슬레이브
  6. ok의 의미릐 1bit 응답을 보냄
    • 마스터
  7. 쓸 데이터인 0x55을 보냄
    • 슬레이브
  8. OK의 의미의 1bit의 응답(ACK)을 보냄
    • 마스터
  9. Stop bit을 보낸 후 통신 종료

참고 EEPROM 설명

EEPROM

  1. WP :핀의 쓰기를 금지 여부 선택 -그라운드 연결시 쓰기 허용
  2. A2,A1,A0 : 장치 주소를 선택할수 있게 나와있는 선

개발 환경 세팅

I2C 설정

설정이 있는데 Slave 설정은 STM32가 슬레이브 모드일때만 유효

세부설정

DMA 설정

소스코드

  HAL_I2C_Mem_Write(&hI2C1,0xA0,0x00,I2C_MEMADD_SIZE_8BIT,&eepRom[0],10,10);

인자 설명

  1. hi2c 의 포인터 주소
  2. 슬레이브 장치 주소
  3. 슬레이브 저장 위치주소
  4. 슬레이브 주소 메모리 사이즈 I2C_MEMADD_SIZE_8BIT
  5. 데이터 포인터
  6. 데이터 포인트 사이즈
  7. 타임아웃 시간
  HAL_I2C_Mem_Write(&hI2C1,0xA0,0x00,I2C_MEMADD_SIZE_8BIT,&eepRom[0],10,10);

인자 설명

  1. hi2c 의 포인터 주소
  2. 슬레이브 장치 주소
  3. 슬레이브 저장 위치주소
  4. 슬레이브 주소 메모리 사이즈 I2C_MEMADD_SIZE_8BIT
  5. 데이터 포인터
  6. 데이터 포인트 사이즈
  7. 타임아웃 시간

출처

  1. 참고 영상강의 자료 https://www.youtube.com/watch?v=_7Ll95FITn4&list=PLUaCOzp6U-RqMo-QEJQOkVOl1Us8BNgXk&index=4&ab_channel=ChrisWonyeobPark

태그:

카테고리:

업데이트:

댓글남기기