포스트

I2C (Inter-Intergrated Circuit)

임베디드 시스템 엔지니어링 로드맵

인터페이스 & 프로토콜 파트 중 BASIC

1. I2C (Inter-Integrated Circuit)


  • 1982년 필립스 반도체에서 발명
  • 동기식 , 직렬 통신 방법
  • 짧은 거리의 보드 내 통신으로,
    프로세서 및 마이크로 컨트롤러에 저속 주변 장치 집적 회로를 연결하는데 사용함
  • 두개의 선 (SDA, SCL)을 이용하여 다중 마스터와 다중 슬레이브 장치 간의 통신을 지원
  • SPI와 UART통신의 장점을 가지고 있음
  • 속도보다 단순성과 낮은 제조 비용이 중요한 분야에 사용

    장점

  • 두 개의 선만을 사용하여 하드웨어 구현이 간단함
  • 하나의 I2C 버스에 여러 장치를 연결할 수 있어 하드웨어 비용이 절감됨
  • ACK/NACK 비트를 통해 데이터 전송의 성공 여부 확인 가능
  • 하드웨어 인터페이스가 UART 보다 덜 복잡함

    단점

  • 데이터 전송 속도가 상대적으로 느림(HS Mode Plus 기준 3.4Mbps. 표준 모드 100kbps)
  • 근거리 통신을 목적으로 설계되어, 전송거리가 멀어지면 신호 품질이 저하될 수 있음
  • 모든 장치가 I2C 프로토콜을 지원해야하므로, 장치 선택에 제한이 있을 수 있음
  • 데이터 프레임의 크기가 8비트로 제한됨
  • SPI 보다는 하드웨어 구현이 더 복잡함

    2. I2C 통신 원리


    하드웨어 구조

    i2c

  • 장치간의 데이터 통신을 위해서는 두개의 와이어를 필요로함
    • SDA(Serial Data) : 마스터와 슬레이브가 서로 주고 받는 데이터 스트림
    • SDL(Serial Clock) : 클럭 신호
  • 직렬 통신 프로토콜이므로, SDA를 따라 일련의 비트 단위, 메세지 형태로 전송함
  • SPI 통신과 마찬가지로 동기식 통신이기 때문에, 마스터 비트의 출력은 마스터와 슬레이브간에 공유되는 클럭 신호에 의해 비트 샘플링이 동기화 됨

20210411_164551

  • 시작 조건 (Start condition) : SDA가 High -> Low로 변경되면 시작
  • 중지 조건 (Stop condition) : SCL 와이어를 Low -> High로 전환 후, SDA 와이어도 Low-> High 로 전환 시, 종료

    데이터 프레임 구조

I2C-frame

  1. 주소 프레임(Address Frame)
    • 마스터가 특정 슬레이브와 통신하기 위한 슬레이브 고유의 7~10 비트 크기의 데이터 프레임
      • 7bit라면 128개, 10비트라면 1024개 까지 지정가능
    • Slave Select, Chip Select와 같은 와이어가 없으므로, 주소 지정(addressing)을 통해 이 작업을 수행함
    • 마스터는 연결된 모든 슬레이브에게 통신하려는 슬레이브의 주소를 전송함
    • 각 슬레이브는 이를 자신의 주소와 비교
      • 일치하면 SDA의 ACK 비트를 Low로 변경하여 마스터로 다시 전송
      • 주소가 일치하지 않으면 아무 작업도 하지 않고, SDA는 High로 유지
  2. 읽기/쓰기 비트(Read/Write Bit)
    • 마스터가 슬레이브에 데이터를 송신(Low)하는지 수신(High)하는지 지정
  3. ACK/NACK 비트
    • 데이터가 성공적으로 수신되면 ACK 비트가 Low로 변경하여 송신 장치에게 리턴함
  4. 데이터 프레임 (Data Frame)
    • 마스터가 슬레이브가 전송한 ACK 비트를 감지하면, 주소 지정이 성공적으로 완료된 것으로 간주함
    • 데이터 프레임은 항상 8비트이며, 최상위 비트(MSB)부터 전송함
    • 각 데이터 뒤에는 ACK/NACK 비트가 위치하여, 데이터가 제대로 수신되었는지를 바로 확인 가능
    • 두번째 데이터 프레임을 보내기 위해선, 이전 데이터의 ACK 비트가 확인되어야함

401012-body-1553702835-1

3. I2C 데이터 전송 과정


  1. 마스터는 SDA 와이어를 High에서 Low로 전환함.
    이 상태에서 SCL 와이어도 High 에서 Low로 전환하여 시작 조건을 모든 슬레이브에게 전송함 Introduction-to-I2C-Data-Transmission-Diagram-START-CONDITION-3-768x695
  2. 마스터는 각 슬레이브에게 통신하려는 슬레이브의 고유 주소를 읽기/쓰기 비트와 함께 전송함 Introduction-to-I2C-Data-Transmission-Diagram-ADDRESS-FRAME-2-768x558
  3. 각 슬레이브는 받은 주소를 자신의 주소와 비교 후, 일치하면 SDA 와이어를 통해 ACK Low를 리턴함 Introduction-to-I2C-Data-Transmission-Diagram-ACK-Bit-Slave-to-Master-2-768x
  4. 마스터는 클럭에 따라 데이터 프레임을 전송하거나 수신함 Introduction-to-I2C-Data-Transmission-Diagram-Data-Frame-768x704
  5. 데이터 프레임이 전송될 때마다 수신 장치는 다른 ACK 비트를 송신자에게 리턴함.
    이를 통해 송신 장치는 프레임의 성공적인 수신을 확인함 Introduction-to-I2C-Data-Transmission-Diagram-ACK-bit-slave-to-master-2A-768
  6. 데이터 전송을 중지하기 위해 마스터는 SCL 와이어를 Low->High로 변환하여,
    슬레이브에게 정지 조건을 전송. 이후 SDA 와이어를 Low->High로 변환 Introduction-to-I2C-Data-Transmission-Diagram-Data-Frame-768x704

4. I2C 통신 구조의 예


  • 센서 인터페이스
  • 메모리 장치
  • 디스플레이
  • RTC(Real-Time Clock)
  • ADC/DAC

참조


I2C(Inter-Integrated Circuit) 버스란? 통신 인터페이스와 장단점(SDA, SCL)

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.