임베디드

I²C (Inter-Integrated Circuit) 통신의 이해

embeddedworld 2025. 3. 12. 07:23

임베디드 시스템에서 여러 장치가 데이터를 주고받는 방법에는 여러 가지가 있다. 그중에서도 I²C(Inter-Integrated Circuit) 는 적은 핀 수로 다중 장치를 연결할 수 있는 직렬 통신 방식으로, 센서, 메모리, 디스플레이 등 다양한 주변 장치에서 널리 사용된다. 이번 글에서는 I²C의 기본 개념, 동작 방식, 프로토콜 구조, 그리고 활용 사례를 살펴보자.



1. I²C란 무엇인가?


I²C는 **필립스(현 NXP)**가 개발한 동기식 직렬 통신 프로토콜로, 두 개의 신호선만으로 여러 개의 장치를 연결할 수 있는 간단하면서도 강력한 방식이다.

I²C의 특징
• 2개의 신호선(SDA, SCL)만 사용
• 마스터-슬레이브 구조
• 한 개의 버스에 여러 슬레이브 장치 연결 가능
• 클럭 신호(SCL)를 사용한 동기식 통신
• 반이중(Half-Duplex) 방식
• 최대 전송 속도는 일반적으로 400kHz, 일부 고속 모드는 수 MHz까지 지원

I²C는 주변 장치의 개수가 많거나, 마이크로컨트롤러의 GPIO 핀 수가 제한적인 환경에서 특히 유용하다.



2. I²C의 동작 방식


I²C는 마스터-슬레이브(Master-Slave) 구조를 따른다. 즉, 마스터 장치가 통신을 주도하며, 슬레이브 장치는 마스터의 명령을 따라 응답한다.

기본 신호선 (2선)
1. SDA (Serial Data Line)
• 데이터 송수신을 담당하는 양방향(Bidirectional) 라인
• 풀업 저항을 통해 기본적으로 High 상태 유지
2. SCL (Serial Clock Line)
• 마스터가 생성하는 클럭 신호
• 모든 슬레이브는 이 클럭에 맞춰 데이터를 송수신

이 두 개의 신호선은 풀업 저항(Pull-up Resistor) 을 사용하여 High 상태를 유지하며, 오픈 드레인(Open-Drain) 방식으로 동작한다. 즉, 장치는 Low 신호만 적극적으로 출력하고, High는 풀업 저항을 통해 유지된다.



3. I²C 통신 프로토콜 구조


I²C 통신은 다음과 같은 순서로 진행된다.

1) 시작(Start Condition)
• 마스터가 SDA를 Low로 변경한 후 SCL을 Low로 내리기 전까지 유지하면 시작 조건이 발생한다.
• 이 신호를 감지한 모든 슬레이브는 데이터 수신 준비를 한다.

2) 주소 전송(Addressing)
• 마스터는 7비트 또는 10비트 슬레이브 주소를 전송한다.
• 마지막 1비트는 읽기(Read) 또는 쓰기(Write) 여부를 나타낸다.
• 0: 마스터 → 슬레이브 (쓰기)
• 1: 슬레이브 → 마스터 (읽기)

3) 응답(Acknowledgment, ACK/NACK)
• 슬레이브는 자신의 주소가 일치하면 ACK(Acknowledge) 신호를 보낸다.
• 만약 슬레이브가 없거나 응답할 준비가 되지 않았다면 NACK(Not Acknowledge) 신호를 보낸다.

4) 데이터 전송(Data Transfer)
• 8비트(1바이트) 단위로 데이터가 전송된다.
• 데이터 전송이 끝날 때마다 수신자는 ACK/NACK 신호를 응답한다.

5) 종료(Stop Condition)
• 마스터가 SCL을 High로 유지한 상태에서 SDA를 High로 변경하면 종료 조건이 발생한다.
• 모든 슬레이브는 버스를 해제하고, 마스터는 이후 새로운 통신을 시작할 수 있다.

이러한 프로토콜 덕분에 I²C는 안정적인 다중 장치 통신을 가능하게 한다.



4. I²C 주소 체계


I²C에서 슬레이브 장치는 고유한 주소를 가져야 한다. 주소는 보통 7비트 또는 10비트로 표현된다.
• 7비트 주소: 가장 일반적으로 사용됨 (0x08 ~ 0x77)
• 10비트 주소: 보다 많은 장치를 연결할 때 사용됨

일반적으로 하나의 I²C 버스에는 최대 127개의 장치를 연결할 수 있다. 하지만 일부 장치는 하드웨어적으로 주소를 변경할 수 없기 때문에 동일한 주소를 가진 장치가 중복될 가능성이 있다. 이런 경우 **I²C 멀티플렉서(Multiplexer)**를 사용하여 해결할 수 있다.



5. I²C와 다른 직렬 통신 방식 비교


I²C는 하드웨어가 단순하고, 적은 핀 수로 다중 장치를 연결할 수 있는 장점이 있지만, SPI보다 속도가 느리고, 풀 듀플렉스를 지원하지 않는다는 단점이 있다.



6. I²C의 실제 활용 사례


I²C는 다양한 임베디드 시스템과 전자 기기에서 사용된다.

1) 센서 데이터 수집
• 온도, 습도, 가속도계, 자이로스코프, 광 센서 등 다양한 센서와 MCU 간 데이터 교환

2) EEPROM 및 플래시 메모리
• 설정 값을 저장하는 비휘발성 메모리 (예: AT24Cxx 시리즈)

3) 디스플레이 및 입력 장치
• OLED, LCD 컨트롤러, 터치패드 등의 인터페이스

4) RTC (Real-Time Clock) 모듈
• DS3231, PCF8563 같은 실시간 시계 칩과 MCU 간의 통신

5) 배터리 관리 시스템 (BMS)
• 전압 및 전류 모니터링을 위한 스마트 배터리 칩과의 데이터 교환



7. 결론


I²C는 간단한 하드웨어 구조, 적은 핀 수, 다중 슬레이브 지원이라는 장점 덕분에 임베디드 시스템에서 널리 사용되는 직렬 통신 프로토콜이다. 하지만 속도가 상대적으로 느리고, 풀 듀플렉스를 지원하지 않는다는 한계도 존재한다.

이러한 특성을 고려하여, 센서 인터페이스, 메모리 통신, 저속 주변 장치 제어와 같은 분야에서 I²C를 적극적으로 활용할 수 있다. 적절한 통신 방식 선택을 통해 효율적인 시스템을 설계해 보자!