
UART 보다 속도는 느리지만 , 1:N 통신을 지원하는 H/W 통신 프로토콜
그렇다면 왜 등장했을까?
UART와 같이 1:1 직렬통신을 하게 되면 기기가 많아질때 배선의 복잡함, 물리적인 한계(포트부족 등)를 극복하기가 힘들어진다.
이를 두개의 선으로 많은 기기간의 통신이 가능하게끔 설계된게 I2C 프로토콜이다.
기본적으로 Master - Slave 구조이다.
양방향 통신이 가능하다.
Slave - Slave 간 직접적인 통신은 불가능하다. -> Master를 거쳐야한다.
모든 송 수신과 클럭신호는 마스터가 결정권을 가지고 있다.
SDA , SCL 두 라인에 연결된 풀업 저항에의해 Idle(유휴상태) , 즉 아무것도 일어나지 않은 상황에서 SDA , SCL 이 1(HIGH) 상태이라는 것을 염두해두자. 이해가 잘 되지 않는다면 기본값이 둘다 1이라고 생각하자.
통신방식은 시작신호 와 주소, 그리고 R/W(read/write) 비트 이렇게 합쳐진 9bit가 한 덩어리라고 생각하면 된다.
기본적으로 같은 선에 물려있기 때문에 위의 데이터 한덩어리는 연결된 모두에게 수신된다, 하지만 본인의 주소가 아닌 기기는 메시지를 무시한다.
데이터 전송 및 수신이 시작되면 SCK 신호가 심장박동처럼 흐르기 시작한다. (동기화)
마스터 -> 슬레이브 데이터 전송시
| Who | 1bit | 7bit | 1bit |
|---|---|---|---|
| Master | Start | Address | R/W |
,
| Who | 1bit |
|---|---|
| Slave | ACK/NACK |
,
| Who | 8bit |
|---|---|
| Master | DATA |
.
.
.
슬레이브 -> 마스터 데이터 전송시
| Who | 1bit | 7bit | 1bit |
|---|---|---|---|
| Master | Start | Address | R/W |
,
| Who | 1bit |
|---|---|
| Slave | ACK/NACK |
,
Master -> 수신모드 전환 (SDA 제어권을 해당 슬레이브에게 넘김)
| Who | 8bit |
|---|---|
| Slave | DATA |
,
| Who | 1bit |
|---|---|
| Master | ACK/NACK |
.
.
.
위 시나리오를 보면서 이해가 되지 않아 알쏭달쏭하거나 , 궁금증이 많이 생겼을 것이라 믿는다.
데이터 전송은 SCL이 HIGH 일때 SDA값을 조정하며 일어난다.

각 기능에 대한 설명.
ACK / NACK
의미 : ACK -> 다음 데이터 받을 준비 완료 , NACK -> 더 이상 받을게 없어
Stop
헷갈리면 안되는 것
I2C는 2선식(Master-Slave) 동기식 직렬 통신 프로토콜
SDA (데이터), SCL (클럭) 선 두 개만 사용
오픈드레인 방식 → 외부 풀업 저항 필수
기본 흐름
Idle 상태: SDA, SCL 모두 HIGH
Start: SCL이 HIGH일 때 SDA가 LOW로 떨어짐
주소 + R/W 전송: 7bit 주소 + 1bit (R=1, W=0)
ACK/NACK: 슬레이브가 수신 확인 응답
데이터 8bit씩 전송 → 매 바이트마다 ACK
Stop: SCL이 HIGH일 때 SDA가 HIGH로 상승
특징
1:N 통신 가능 (하나의 Master, 여러 Slave)
슬레이브 간 직접 통신은 불가능 (Master 통해야)
동기식이라 클럭을 마스터가 제어함
R/W 타이밍은 SCL이 HIGH일 때 SDA를 기준으로 샘플링
기술적 요점
마스터가 SDA 제어권을 High-Z로 넘기면 슬레이브가 데이터 보냄
풀업저항은 전기적 기본값 유지와 라인 충돌 방지를 위해 필수
Start/Stop 조건은 SDA 전이 시점과 SCL 상태가 기준