04. I2C 통신이 뭔지 아주 깊게 알아보기

owljun·2025년 7월 26일

I2C

UART 보다 속도는 느리지만 , 1:N 통신을 지원하는 H/W 통신 프로토콜
그렇다면 왜 등장했을까?
UART와 같이 1:1 직렬통신을 하게 되면 기기가 많아질때 배선의 복잡함, 물리적인 한계(포트부족 등)를 극복하기가 힘들어진다.
이를 두개의 선으로 많은 기기간의 통신이 가능하게끔 설계된게 I2C 프로토콜이다.

특징

  • 기본적으로 Master - Slave 구조이다.

  • 양방향 통신이 가능하다.

  • Slave - Slave 간 직접적인 통신은 불가능하다. -> Master를 거쳐야한다.

어떤 방식의 통신을 할까?

모든 송 수신과 클럭신호는 마스터가 결정권을 가지고 있다.

  • 통신의 흐름을 이해하려면 먼저 알아둬야할게 있다.
  1. SDA , SCL 두 라인에 연결된 풀업 저항에의해 Idle(유휴상태) , 즉 아무것도 일어나지 않은 상황에서 SDA , SCL 이 1(HIGH) 상태이라는 것을 염두해두자. 이해가 잘 되지 않는다면 기본값이 둘다 1이라고 생각하자.

  2. 통신방식은 시작신호주소, 그리고 R/W(read/write) 비트 이렇게 합쳐진 9bit가 한 덩어리라고 생각하면 된다.

  3. 기본적으로 같은 선에 물려있기 때문에 위의 데이터 한덩어리는 연결된 모두에게 수신된다, 하지만 본인의 주소가 아닌 기기는 메시지를 무시한다.

  4. 데이터 전송 및 수신이 시작되면 SCK 신호가 심장박동처럼 흐르기 시작한다. (동기화)

시나리오를 통해 알아보자.

  • 마스터 -> 슬레이브 데이터 전송시

    Who1bit7bit1bit
    MasterStartAddressR/W

    ,

    Who1bit
    SlaveACK/NACK

    ,

    Who8bit
    MasterDATA

    .
    .
    .

  • 슬레이브 -> 마스터 데이터 전송시

    Who1bit7bit1bit
    MasterStartAddressR/W

    ,

    Who1bit
    SlaveACK/NACK

    ,
    Master -> 수신모드 전환 (SDA 제어권을 해당 슬레이브에게 넘김)

    Who8bit
    SlaveDATA

    ,

    Who1bit
    MasterACK/NACK

    .
    .
    .

조금 더 깊이 들어가보기

위 시나리오를 보면서 이해가 되지 않아 알쏭달쏭하거나 , 궁금증이 많이 생겼을 것이라 믿는다.

  • 데이터 전송은 SCL이 HIGH 일때 SDA값을 조정하며 일어난다.

  • 각 기능에 대한 설명.

  1. Start
    • Start 신호는 다음과 같이 정의된다.
      • " SCL 가 HIGH 인 상태에서 SDA가 LOW로 변환되는 것"
    • 아까 설명했던 기본값이 HIGH 라는 것을 염두해두면 이해가 된다.
  1. R/W 비트
    • 단순히 R = 1 , W = 0 로 정의할 수 있다.
  1. ACK / NACK

    • 위 시나리오에서 ACK/NACK 신호를 데이터 경계마다 보내주는 것을 볼 수있다.
    • ACK : SDA 를 0으로 내립니다.
    • NACK : SDA 를 1로 유지합니다.

    의미 : ACK -> 다음 데이터 받을 준비 완료 , NACK -> 더 이상 받을게 없어

  2. Stop

    • Stop은 Start의 반대이다.
      • SCL이 HIGH 인 상태에서 SDA가 HIGH 로 올라가는것.
  3. 헷갈리면 안되는 것

    • Stop 과 NACK 는 다르다.
    • 보통 정상적인 흐름에서 NACK -> Stop 이 호출된다.
    • 하지만 NACK 는 단지 수신종료를 알리는 것이고, Stop 신호는 오류 혹은 일이 다 끝나서 유휴(Idle) 상태로 돌아간다는 의미이다.

요약

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 상태가 기준

profile
Embedded S/W Developer :)

0개의 댓글