[아두이노] I²C는 어떻게 데이터와 ACK를 구분할까? (클럭 기반 상태 머신의 이해)
I²C를 공부하다 보면 많은 사람들이 한 번쯤 이런 의문을 가집니다. "ACK도 그냥 1비트인데, 데이터 비트와 어떻게 구분하지?" 예를 들어 I²C는: 8비트 데이터 + ACK/NACK 1비트 구조로 동작합니다. 그런데 버스에는 결국: SDA(Data) SCL(Clock) 두 선밖에 없습니다. 즉 전압만 보면: 0인지 1인지 밖에 안 보입니다. 그렇다면 MCU는 어떻게: 데이터 ACK START STOP 을 구분하는 걸까요? 오늘은 I²C 프로토콜의 핵심인: 클럭 기반 상태 머신(State Machine) 관점으로 정리해보겠습니다. 1. I²C는 "값"보다 "타이밍"이 중요하다 초보자는 흔히 이렇게 생각합니다. "ACK는 특별한 전압값인가?" 하지만 아닙니다. ACK도 단순한 1비트입니다. 핵심은: 언제 나타났는가 입니다. 즉 I²C는: 비트 값 자체보다 클럭 타이밍이 더 중요 합니다. 2. I²C는 동기식 통신이다 I²C에는 두 선이 있습니다. 선 역할 SDA 데이터 SCL 클럭 그리고 모든 장치는: SCL을 기준으로 동작 합니다. 즉: 몇 번째 클럭인가? 를 계속 추적합니다. 3. ACK는 항상 9번째 클럭 I²C 규칙은 매우 엄격합니다. 클럭 번호 의미 1~8 데이터 9 ACK/NACK 즉: 1~8번째 클럭: 데이터 비트 9번째 클럭: 응답 비트 입니다. 그래서 MCU는: "지금 9번째 클럭이네? 그럼 ACK 슬롯이구나" 라고 판단합니다. 즉: 값이 아니라 위치로 구분 합니다. 4. 실제 흐름 예시 예를 들어: 10110010 를 전송한다고 해봅시다. 그러면 실제 버스 흐름은: 클럭 1 → 1 클럭 2 → 0 클럭 3 → 1 클럭 4 → 1 클럭 5 → 0 클럭 6 → 0 클럭 7 → 1 클럭 8 → 0 클럭 9 → ACK/NACK 입니다. 즉 마지막 9번째 클럭은: 무조건 ACK 전용 슬롯 입니다. 5. ACK는 누가 만드는가? 여기서 중요한 점이 있습니다. I...