블로그 포스팅

I2C란 무엇인가? 인터넷이 말해주지 않는 것

요즘은 궁금한 점을 빠르게 해결하기 위해 가장 먼저 하는 일은 인터넷 검색일 것이다. 처음 I2C 프로토콜이라는 용어를 접했을 때 인터넷 검색 결과는 다음과 같았다.

“Inter-Integrated Circuit(I2C) 프로토콜은 IC 사이에 통신 링크를 제공하는 양방향 2 와이어 직렬 버스다.”

이것만으로도 무슨 뜻인지는 알 수는 있으나, 여전히 많은 궁금증들이 남아 있었다. I2C란 정말로 무엇을 말하는가? 어떤 디바이스들이 I2C를 사용하는가? I2C를 사용하면 시스템 내의 어떤 문제들을 실제적으로 해결할 수 있는가?

I2C는 동일한 2와이어 버스로 프로세서, 마이크로컨트롤러(MCU), ASIC 같은 마스터 디바이스가 여타 주변장치와 통신할 수 있도록 하기 위해 널리 사용되고 있는 통신 프로토콜이다. 2와이어 중 하나의 라인은 데이터 전송에 사용되고, 나머지 라인은 클록 신호에 사용된다. 마치 2차선 고속도로 같은 것이라고 이해할 수 있다. 각각의 차선으로 차들이 한 쪽 끝에서 다른 쪽 끝으로 주행하듯이, 데이터 패킷이 마스터(프로세서, MCU, ASIC)에서 주변장치(온도 센서, 습도 센서 등)로 전송된다.

이러한 것이 I2C라면, 왜 I2C를 사용하는가? I2C를 사용하면 다중의 주변장치를 동일 버스 상으로 손쉽게 구현할 수 있기 때문이다. 예를 들어서 다수의 센서를 사용해 서버의 온도를 모니터링할 수 있다. I2C 프로토콜은 단일 버스로 여러 디바이스를 지원할 수 있도록 설계되었다. 이와 달리 SPI(serial peripheral interface) 같은 여타 프로토콜은 두 지점간의 단일 디바이스를 지원하도록 설계되었다. 또한 2와이어 I2C 인터페이스는 4와이어 SPI 인터페이스에 비해서 배선을 간소화할 수 있으며 범용 입/출력(GPIO)을 줄일 수 있다.

TI의 포트폴리오는 I2C 트리를 구축하기 위한 용도로 그림 1에서 보는 것과 같이 3가지 기능으로 구분할 수 있다. 버퍼드 변환기, I/O 확장기, I2C 스위치가 그것이다.

Description:
그림 1: 각기 다양한 I2C 기능적 디바이스로 이루어진 전자 시스템

I2C 버퍼드(버퍼 기능이 있는) 변환기는 긴 거리의 배선에 걸쳐서 신호가 저하되거나 IC들 사이에 전압이 불일치한 경우에 사용하기에 적합하다. 예를 들어 3.3V MCU I2C I/O와 5V 온도 센서 사이에 전압이 불일치 한다면 PCA9306 같은 I2C 전압 변환기를 사용할 수 있다. 또한 똑같이 긴 배선 거리일 때 전압이 불일치하면 TCA9617B 같은 버퍼드 변환기 제품을 사용하여 전압 차이를 극복하고 리프레시된 신호를 출력할 수 있다.

I2C I/O 확장기는 이름 그대로를 뜻한다. IO 확장기를 사용하면 선택된 프로세서에서 가능한 포트 수가 부족할 때 그림 2에서와 같이 I/O 수를 확장할 수 있다. 이들 디바이스는 I2C 버스 상의 디바이스와 직접적으로 통신할 수 있다는 점에서 표준적 GPIO 확장기와 다르다. TI의 확장기 제품들은 채널 수, 리셋 핀, 레벨 시프팅을 비롯해 특정한 시스템 요구를 충족하도록 다양한 기능들을 제공한다.

Description:
그림 2: 마이크로컨트롤러나 프로세서에 I/O 확장기를 사용해 다수의 주변장치 제어

I2C 스위치는 두 가지 문제를 해결할 수 있다. 첫 번째 문제는 동일 버스 상의 두 디바이스가 동일한 어드레스일 때 흔히 발생되는 어드레스 충돌에 관련된 것이다. 예를 들어서 어떤 시스템이 동일 I2C 버스 상으로 2개의 온도 센서와 2개의 습도 센서를 사용하고 이들 모든 센서가 어드레스가 0xFF라고 했을 때, 그림 3에서 같이 I2C 스위치를 사용함으로써 한 번에 한 센서로 전환할 수 있다. 두 번째 문제는 전력 소모에 관한 것이다. I2C 스위치는 한 번에 I2C 버스의 한 부분만 구동할 수 있으므로 버스의 사용되지 않는 부분은 전력이 낮아진다.

Description:
그림 3: 8개 채널을 제공하는 I2C 스위치 예

인터넷에서는, I2C를 사용하면 시스템 설계자가 견고한 시스템 제어를 손쉽게 구현할 수 있으며 I2C는 유용한 프로토콜일 뿐만 아니라, 시스템 차원에서 이로운 다양한 기능들을 가진 디바이스라고 말한다. 버퍼드 리피터, I/O 확장기, I2C 스위치를 사용함으로써 I2C 버스 구현을 특정한 설계 목표에 맞게 향상시키고, 확장하고, 수정할 수 있다. 애플리케이션 노트 “I2C 버스 알아보기”에서는 I2C 설계에 관해서 자세히 설명하고 있다.

추가 정보