I2C

김준혁·약 3시간 전

1. I2C 통신의 특징

필립스(NXP)에서 개발한 동기식(Synchronous), 반이중(Half-Duplex) 방식의 직렬 통신입니다.

  • 2개의 라인:
    • SDA (Serial Data): 데이터가 오가는 양방향 라인.
    • SCL (Serial Clock): 통신 타이밍을 맞추는 클럭 라인.
  • 주소 지정 방식: CS(Chip Select) 핀 대신 각 슬레이브의 고유 7비트 주소를 사용하여 통신 대상을 정합니다.
  • 멀티 마스터/멀티 슬레이브: 한 버스에 여러 마스터와 슬레이브가 존재할 수 있습니다.
  • Open-Drain: 두 라인 모두 Pull-Up 저항이 필수적, 장치가 통신하지 않을 때는 High, 통신 시에만 Low로 당김.

2. 하드웨어의 핵심: Open-Drain & Pull-up

I2C를 논할 때 가장 중요한 전기적 특성입니다.

[Image of I2C bus circuit diagram showing open-drain configuration and pull-up resistors]

  • Open-Drain: I2C 핀은 내부적으로 회로를 'Low(0V)'로 만들 순 있지만, 'High'로 밀어 올리지는 못합니다.
  • Pull-up 저항: 라인이 아무 상태도 아닐 때 'High' 상태를 유지하기 위해 외부에 저항(보통 4.7kΩ)을 달아줍니다.
    • Tip: 통신 에러가 잦다면 풀업 저항값이 적절한지 확인해야 합니다.

3. 통신 시퀀스 (Data Protocol)

I2C 통신은 정해진 규칙(프로토콜)에 따라 진행됩니다.

  1. Start Condition: SCL이 High일 때 SDA가 High → Low로 변하며 시작을 알립니다.
  2. Address Frame (7-bit): 통신할 슬레이브 주소를 보냅니다.
  3. Read/Write Bit: 8번째 비트로 읽기(1)인지 쓰기(0)인지 결정합니다.
  4. ACK/NACK: 9번째 클럭에서 수신 측이 SDA를 Low로 내려 '잘 받았다(ACK)'는 신호를 줍니다.
  5. Data Frame: 실제 데이터를 8비트씩 주고받으며, 매 바이트마다 ACK를 확인합니다.
  6. Stop Condition: SCL이 High일 때 SDA가 Low → High로 변하며 종료합니다.

profile
임베디드 개발자

0개의 댓글