본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

I2C(Inter-Integrated Circuit, I²C, IIC)는 데이터선(SDA)과 클록선(SCL) 두 가닥으로 한 버스에 여러 칩을 연결해, 주소로 상대를 골라 반이중으로 주고받는 동기식 직렬 통신 버스이다.

I2C 는 1982년 필립스(현 NXP 반도체)가 TV 같은 기기 안에서 마이크로컨트롤러와 주변 칩을 적은 배선으로 연결하려고 만들었다. 같은 회로 기판 위의 짧은 거리에서 센서, EEPROM, 실시간 시계(RTC), 오디오 코덱, 디스플레이 컨트롤러, 전원 관리 칩 등을 연결하는 데 널리 쓰인다. 배선이 두 가닥뿐이고 장치를 추가해도 선이 늘지 않는 것이 가장 큰 장점이다. PC 의 SMBus, 모니터 정보를 읽는 DDC 도 I2C 를 바탕으로 한다.

  • 2선식: SDA(Serial Data)와 SCL(Serial Clock) 두 신호선과 공통 접지만 쓴다
  • 동기식: 마스터가 SCL 로 클록을 공급하므로 송수신 측이 통신 속도(보율)를 미리 맞출 필요가 없다
  • 반이중: 한 SDA 선으로 송신과 수신을 번갈아 한다
  • 주소 지정: 칩 선택(CS) 신호선 없이 패킷 안의 주소로 통신 상대를 고른다
  • 멀티 마스터·멀티 슬레이브: 한 버스에 마스터가 여럿 있을 수 있고, 충돌은 중재(arbitration)로 해결한다
  • 오픈 드레인·풀업: 각 장치는 선을 0(Low)으로 끌어내리기만 하고, 1(High)은 풀업 저항이 만든다. 그래서 여러 장치가 동시에 구동해도 단락이 생기지 않고 와이어드 AND 동작을 한다
  • 확인 응답: 바이트마다 수신 측이 ACK/NACK 을 돌려준다
  • 클록 스트레칭: 처리가 늦은 슬레이브가 SCL 을 Low 로 붙잡아 마스터를 기다리게 할 수 있다
모드 최대 속도
표준 모드(Standard-mode) 100 kbit/s
고속 모드(Fast-mode) 400 kbit/s
고속 모드 플러스(Fast-mode Plus) 1 Mbit/s
초고속 모드(High-speed mode) 3.4 Mbit/s
울트라 고속 모드(Ultra Fast-mode) 5 Mbit/s (단방향 쓰기 전용, ACK 없음)

버스 전체 정전용량이 최대 400 pF 로 제한되므로 연결 거리와 장치 수에 한계가 있다.

| S | 주소(7비트) | R/W | ACK | 데이터(8비트) | ACK | 데이터(8비트) | ACK/NACK | P |
요소 내용
시작 조건(S, START) SCL 이 High 인 동안 SDA 가 High→Low 로 떨어진다. 버스 점유 시작
주소 슬레이브 주소 7비트(또는 10비트). 최상위 비트(MSB)부터 보낸다
R/W 비트 0 이면 쓰기(마스터→슬레이브), 1 이면 읽기(슬레이브→마스터)
ACK/NACK 9번째 클록에서 수신 측이 SDA 를 Low 로 끌면 ACK, High 로 두면 NACK
데이터 8비트 단위, MSB 먼저. 바이트마다 ACK 가 따라온다
반복 시작(Sr) STOP 없이 START 를 다시 보내 버스를 놓지 않고 방향·상대를 바꾼다
정지 조건(P, STOP) SCL 이 High 인 동안 SDA 가 Low→High 로 오른다. 버스 해제

데이터 비트는 SCL 이 Low 일 때만 바뀌고 High 일 때는 안정해야 한다. SCL 이 High 인 동안 SDA 가 바뀌는 것은 START·STOP 뿐이어서 둘을 데이터와 구별할 수 있다.

주소 지정 방식

편집 원본 편집
  • 7비트 주소: 128개 중 예약 주소(일반 호출 0000000, 10비트 주소 접두 11110xx 등)를 빼고 약 112개 장치를 지정할 수 있다. 주소 바이트는 7비트 주소 + R/W 1비트로 구성된다
  • 10비트 주소: 첫 바이트를 11110 + 상위 2비트 + R/W 로, 둘째 바이트를 하위 8비트로 보내 1024개 주소를 쓴다
  • 일반 호출(General Call, 주소 0): 버스의 모든 장치에 한꺼번에 명령을 보낸다
  • 칩 제조사가 주소 상위 비트를 고정하고, 하위 몇 비트는 칩의 주소 핀(A0~A2)으로 정하게 해 같은 칩을 여러 개 달 수 있게 하는 경우가 많다
  1. 마스터가 START 를 보낸다
  2. 슬레이브 주소 + W(0)를 보낸다. 해당 슬레이브가 ACK
  3. 레지스터 주소 등 데이터 바이트를 보내고 바이트마다 슬레이브가 ACK
  4. 마스터가 STOP 을 보내 끝낸다
  1. 마스터가 START, 슬레이브 주소 + W 를 보내고 읽을 레지스터 주소를 쓴다
  2. STOP 없이 반복 시작(Sr)을 보낸 뒤 슬레이브 주소 + R(1)을 보낸다
  3. 슬레이브가 데이터를 보내고, 마스터는 더 받을 때 ACK, 마지막 바이트에는 NACK 을 보낸다
  4. 마스터가 STOP 을 보낸다

두 마스터가 동시에 START 를 내면, 각자 SDA 에 내보낸 값과 실제 버스 값을 비교한다. 1(High)을 보냈는데 버스가 0(Low)이면 다른 마스터가 0 을 보낸 것이므로 진 쪽이 물러난다. 오픈 드레인 구조 덕분에 이긴 쪽의 데이터는 깨지지 않는다(비파괴 중재). SCL 도 와이어드 AND 로 동기화된다.

다른 직렬 방식과 비교

편집 원본 편집
구분 I2C SPI UART
신호선 SDA, SCL (2선) SCLK, MOSI, MISO, 장치별 SS(4선 이상) TX, RX (2선)
동기 방식 동기(클록 공유) 동기 비동기(보율 사전 약속, 시작·정지 비트)
통신 방향 반이중 전이중 전이중
장치 선택 주소(패킷 안) 칩 선택(SS) 신호선 1:1 연결
마스터 멀티 마스터 가능 단일 마스터 구분 없음
확인 응답 바이트마다 ACK 없음 없음(패리티 선택)
속도 수백 kbit/s~수 Mbit/s 수십 Mbit/s 이상 수백 kbit/s 수준
장점 배선 최소, 장치 추가 쉬움 빠르고 단순 장거리(RS-232/485와 결합)·범용