1. 개요
Inter-Integrated Circuit (I2C)I2C는 1982년 필립스에서 개발한 직렬 통신 프로토콜(통신 규격)이다. 초기 목적은 DAC 같은 칩셋과 제어 칩셋 간에 사운드 데이터를 전송하기 위한 통신 규격으로 설계되었다. 이후 I2C에서 파생된 I2S 통신 규격이 사운드 칩셋용으로 많이 사용되고 있다. 현재는 집적 회로 간 통신으로 많이 사용되며, 여러 장비를 연결할 수 있다는 장점 덕분에 센서 간 통신으로도 많이 사용된다.
2. 장점
- SDA(Serial Data Line)와 SCL(Serial Clock Line) 두 가닥의 선만으로 데이터 송수신이 가능하다.
- 동기식 통신이므로 비동기식 통신인 UART 등에 비해 안정적이다.[1]
- BUS 형태로 하나의 I2C MASTER에 다수의 I2C SLAVE 장치를 연결 가능하다.
- 7비트 주소 체계를 사용하여 최대 112개 노드를 연결할 수 있다. (16개의 예약된 공간을 제외한 최대 값)
- 하지만 실제로 112개를 모두 연결하는 경우는 드물며, 이런 경우에는 TCP/IP가 주로 사용된다.
3. 단점
- 통신 속도가 느리다. (표준 모드 100kbps) UART보단 빠르지만 SPI에 비교하면 느리기 때문에 애매한 경우가 많다.[2]
- 반이중 통신이므로 한쪽에서 데이터를 보내는 중일 때는 반대편에서 데이터 전송이 불가능하다.
- 구조가 복잡햐여 사용이 어렵다. [3]
- 그냥 선만 연결해주면 되는 다른방식에 비해서 전송을 위해서는 별도의 회로를 구성해줄 필요성이 있다.[4]
[1] 다만 UART도 필요하면 동기식으로 쓸수 있다. 복잡해지는 관계로 그렇게 안할뿐.[2] SPI는 클럭속도에 따라서 수십 Mbps 수준의 통신 속도도 쓸수 있다. UART는 이거보단 느리지만 대신에 이쪽은 전이중 통신이 된다는걸 고려해야 된다.[3] UART나 SPI 같은 경우에는 제어 레지스터가 3~4개 정도 뿐이지만 I2C는 제어레지스터가 5개를 넘어가고 주소값에서부터 전송 플래그 상태까지 확인해줘야될 부분이 많다.[4] UART는 접지만 잘 연결 되어있고 2선만 꼽혀있으면 통신이 잘 되지만, I2C는 풀업저항을 사용해줘야된다. 센서모듈은 내부에 풀업저항을 내장하고 있는 경우가 많지만 직접 보드를 설계할 경우 사전에 풀업저항에 대한 고려가 있어야된다.