I2C
I2C란?
I2C (Inter-Integrated Circuit)는 필립스 (현 NXP)에서 개발한 통신 인터페이스로, 클록에 동기시켜 데이터의 통신을 실행하는 동기식 시리얼 통신 방식입니다.
I2C는 SPI와 함께 EEPROM이나 센서와의 데이터 통신에 자주 사용되고 있습니다.
I2C는 클록 (SCL), 데이터 입출력 (SDA)의 신호선 2개를 사용하여 통신합니다. 각각의 신호선은 오픈 드레인 통신이므로 풀업 저항을 접속합니다.
그리고 통신하는 경우에는 마스터 / 슬레이브와 같이 역할을 나누어 마스터 측에서 슬레이브 측으로 송신 및 수신을 지시합니다. 또한, 클록은 반드시 마스터에서 출력되고, 입력과 출력은 클록에 동기되어 실행됩니다.
마스터 1개에 대해 슬레이브는 여러 개를 접속할 수 있습니다.
마스터와 슬레이브는 아래와 같은 이미지로 접속됩니다.
통신 순서
I2C의 경우, 아래와 같은 순서로 통신을 실행합니다.
①마스터에서 통신 시작 신호 (START Condition) 출력
②마스터에서 슬레이브 어드레스 송신
③슬레이브에서 마스터로 스탠바이 OK 신호 (Acknowledge) 피드백
④데이터 통신 실행 (필요에 따라 반복)
⑤마스터에서 통신 종료 신호 (STOP Condition) 출력
이러한 순서는 아래 그림과 같이 나타낼 수 있습니다.
예를 들어, 슬레이브 어드레스 0xA0, 마스터에서 슬레이브로 1byte의 데이터 (0x5A)를 송신하는 경우에 대해 설명하겠습니다.
슬레이브 어드레스나 데이터는 MSB First (최상위 bit에서 하위 bit 방향)로 SCL (클록)에 동기되어 전송되는 것을 확인할 수 있습니다. 또한, 슬레이브 어드레스 전송 후 및 8bit 데이터 전송마다 Acknowledge (=0)이 수신측에서 출력됩니다.
그리고, SCL에 H 레벨일 때 SDA의 하강엣지로 스타트 컨디션이 되고, SCL이 H 레벨일 때 SDA의 상승엣지로 스톱 컨디션이 됩니다. 이 신호에 따라 통신의 개시와 종료를 슬레이브 측에 통지합니다.
마스터에서 슬레이브로 데이터를 송신하는 경우
마스터 1개에 대해 슬레이브는 여러 개를 접속할 수 있기 때문에, 마스터는 어떤 슬레이브와 통신할 것인지를 슬레이브 측의 디바이스에 통지해야 합니다. 슬레이브 어드레스는 이러한 역할을 담당하며, 슬레이브 측의 디바이스는 각각 고유의 값을 지니고 있습니다.
통신 개시의 신호 (스타트 컨디션)를 출력한 후, 마스터는 통신하고자 하는 슬레이브 측 디바이스의 슬레이브 어드레스를 송신하고, 슬레이브 (복수)에서 수신합니다. 그 중, 어드레스가 일치한 슬레이브가 스탠바이 상태로 전환되어 마스터와 송수신이 가능해집니다. 그리고, 슬레이브 어드레스가 일치하지 않은 슬레이브 측의 디바이스는 대기 상태로 이행합니다.
아래 그림은 마스터에서 슬레이브로 1byte의 데이터를 송신하는 경우, 통신을 그림으로 나타낸 것입니다.
슬레이브 어드레스 통신 시 최하위 bit에 W (=0)을 지정하면, 마스터는 슬레이브로 데이터를 송신합니다.
슬레이브에서 출력된 데이터를 마스터가 수신하는 경우
아래 그림은 슬레이브에서 출력된 1byte의 데이터를 마스터가 수신하는 경우, 통신을 그림으로 나타낸 것입니다.
슬레이브 어드레스 통신 시 최하위 bit에 R (=1)을 지정하면, 마스터는 슬레이브로부터 데이터를 수신합니다.
I2C에 대한 자세한 사항은 NXP의 홈페이지에 게재된 『I2C BUS 사양 및 유저 매뉴얼』을 참조하여 주십시오.