주요 시리얼 통신 프로토콜 - 3. I2C (Inter-Integrated Circuit) & 프로토콜 비교

2025. 2. 10. 14:22프로그래밍/시스템

3장: I2C (Inter-Integrated Circuit) & 프로토콜 비교

I2C(Inter-Integrated Circuit)는 마이크로컨트롤러(MCU)와 여러 주변 장치를 연결하는 데 널리 사용되는 동기식 시리얼 통신 프로토콜입니다.
SPI와 달리 2개의 데이터 선만 사용하면서도 여러 개의 장치를 연결할 수 있는 특징이 있으며, 멀티 마스터(Multi-Master) 기능을 지원합니다.

이번 장에서는 I2C의 개념과 특징, 데이터 전송 방식, 장점과 단점, 주요 사용 사례, 그리고 SPI 및 UART와의 비교를 자세히 살펴보겠습니다.


1. I2C 개념과 특징

✅ I2C란?

I2C(Inter-Integrated Circuit)는 동기식(Synchronous) 시리얼 통신 방식으로,
단 2개의 데이터 선(SDA, SCL)만으로 여러 개의 장치를 연결할 수 있는 프로토콜입니다.

📌 I2C의 핵심 특징

  • 동기식(Synchronous) 통신 → 클럭 신호(SCL)를 사용하여 데이터 전송
  • 단 2개의 데이터 선(SDA, SCL)으로 다중 장치 연결 가능
  • 주소(Address) 기반 통신 → 각 장치는 고유한 주소를 가짐
  • 멀티 마스터(Multi-Master) 지원 → 여러 개의 마스터가 존재할 수 있음

📌 I2C는 센서, EEPROM, RTC(Real-Time Clock) 등 여러 장치를 동시에 연결해야 할 때 유용합니다.


2. 동기식 통신 방식 (클럭 필요)

I2C는 동기식(Synchronous) 통신 방식으로,
클럭 신호(SCL)를 기반으로 데이터를 주고받기 때문에 마스터와 슬레이브가 정확한 타이밍에 맞춰 동작합니다.

📌 I2C의 기본 원리

  • 마스터(Master) → 클럭(SCL) 신호를 생성하고, 데이터를 전송
  • 슬레이브(Slave) → 마스터의 클럭에 맞춰 데이터를 송수신

📌 I2C는 SPI와 마찬가지로 클럭을 공유하지만, 단 2개의 선만으로 여러 개의 장치를 연결할 수 있다는 점에서 차이가 있음.


3. 단 2개의 선(SDA, SCL)으로 여러 장치 연결 가능 (멀티 마스터 지원)

✅ I2C에서 사용하는 핀

핀 이름 역할
SDA (Serial Data Line) 데이터 송수신 (Master ↔ Slave)
SCL (Serial Clock Line) 클럭 신호 (Master → Slave)

📌 I2C는 SPI보다 적은 핀을 사용하면서도 여러 개의 장치를 연결할 수 있음.
📌 여러 개의 마스터(Multi-Master)도 지원 가능하며, 우선권(Arbitration) 메커니즘을 통해 충돌을 방지함.


4. 주소(Address) 기반 통신

I2C는 각 장치(슬레이브)마다 고유한 주소(7비트 또는 10비트)를 할당하여 통신합니다.

📌 I2C의 데이터 전송 흐름

  1. 마스터가 슬레이브 주소를 전송 → 어떤 장치와 통신할 것인지 지정
  2. 해당 주소를 가진 슬레이브가 응답 → 데이터 송수신 시작
  3. 데이터 전송 후 Stop 신호로 통신 종료

📌 각 장치에는 고유한 주소가 있으며, 같은 SDA/SCL 선을 공유하더라도 주소를 기반으로 개별적으로 통신 가능!


5. I2C의 장점과 단점

✅ I2C의 장점

  1. 배선이 단순 → SPI보다 적은 핀 사용 (SDA, SCL 2개만 필요)
  2. 여러 개의 장치를 동시에 연결 가능 → 하나의 버스에 여러 개의 슬레이브 장치 연결 가능
  3. 멀티 마스터 지원 가능 → 여러 마스터가 같은 버스에서 통신할 수 있음

❌ I2C의 단점

  1. SPI보다 속도가 느림 → 보통 수백 Kbps ~ 몇 Mbps 수준
  2. 풀 이중(Full-Duplex) 통신 불가능 → Half-Duplex 방식 (데이터 송수신이 번갈아 이루어짐)
  3. 신호 충돌(Arbitration) 문제 발생 가능 → 여러 마스터가 동시에 송신할 경우 충돌 가능

📌 I2C는 확장성이 뛰어나지만, SPI보다 속도가 느리고 신호 충돌(Arbitration) 문제가 발생할 수 있음.


6. I2C의 사용 사례

🔹 온도 센서, 가속도 센서, EEPROM 메모리

  • DHT11, BMP280, MPU6050 등의 센서는 I2C를 통해 데이터를 전송
  • EEPROM(비휘발성 메모리) 저장 장치도 I2C 인터페이스로 마이크로컨트롤러와 연결

📌 센서와 메모리 장치는 비교적 저속 데이터 전송이므로 I2C를 많이 사용함.


🔹 마이크로컨트롤러와 센서 간 통신

  • 아두이노(Arduino), 라즈베리파이(Raspberry Pi) 등의 마이크로컨트롤러는 I2C를 통해 여러 개의 센서를 동시에 제어 가능
  • I2C를 지원하는 LCD 디스플레이, 터치패드, 조이스틱 등의 입력 장치와도 쉽게 연결 가능

📌 I2C는 센서와 마이크로컨트롤러 간 다중 연결이 필요한 경우 적합!


7. UART, SPI, I2C 비교

특징  UART  SPI  I2C
통신 방식 비동기식 동기식 동기식
클럭 필요 여부 ❌ (없음) ✅ (필요) ✅ (필요)
배선 수 2개 (TX, RX) 4개 이상 (MOSI, MISO, SCLK, SS) 2개 (SDA, SCL)
속도 보통 (수백 Kbps ~ 수 Mbps) 매우 빠름 (수십 ~ 수백 MHz) 느림 (수백 Kbps ~ 수 Mbps)
멀티마스터 지원 ❌ (불가능) ❌ (거의 없음) ✅ (가능)
장치 연결 수 1:1 1:다수 (SS 개수만큼) 1:다수 (주소 기반)
사용 사례 PC-마이크로컨트롤러, 블루투스 모듈 LCD, SD 카드, 플래시 메모리 센서, EEPROM, RTC

📌 속도가 빠른 경우 → SPI 사용
📌 하드웨어가 단순하고 장치가 여러 개 필요할 경우 → I2C 사용
📌 단순한 1:1 통신 → UART 사용


8. 언제 어떤 프로토콜을 사용해야 하는가?

사용 사례 UART  SPI  I2C
고속 데이터 전송
센서 데이터 전송
마이크로컨트롤러 간 통신
저장 장치 연결 (SD 카드, EEPROM)
여러 개의 장치 연결

📌 속도가 중요하면 SPI, 여러 개의 장치를 연결하려면 I2C, 간단한 1:1 통신이면 UART를 사용!


📌 요약

I2C는 동기식 시리얼 통신 방식으로, 클럭 신호를 사용하여 데이터를 송수신
SDA, SCL 두 개의 핀만으로 여러 개의 장치를 연결할 수 있음
주소 기반 통신을 지원하며, 멀티 마스터(Multi-Master) 기능도 가능
센서, EEPROM, RTC 등의 장치를 연결할 때 많이 사용됨
속도는 SPI보다 느리지만, 여러 장치를 연결하는 경우 적합