바이트마다 응답을 확인하는 것이 I²C 의 특징이다.
8비트 전송 → 9번째 클럭에서 송신자는 선을 놓고, 수신자가 끌어내리면 ACK
놓아 두면 NACK
NACK 이 나오는 경우
그 주소의 장치가 없다 배선·주소 설정을 확인한다
장치가 바쁘다 EEPROM 쓰기 중이 대표적이다
수신자가 더 받기를 거부한다 마스터가 마지막 바이트에 일부러 NACK 을 보낸다
마지막 항목이 중요하다 — 읽기 시퀀스의 마지막 바이트에는 반드시 NACK 을 보내야 슬레이브가 전송을 멈추고 버스를 놓는다. 여기서 ACK 을 보내면 슬레이브가 계속 데이터를 밀어 버스가 잠기는 상황이 된다.
실무 활용
주소를 하나씩 보내며 ACK 이 오는지 확인하면 연결된 장치 목록을 만들 수 있다. i2cdetect 같은 도구가 하는 일이 정확히 이것이고, 통신이 안 될 때 가장 먼저 돌려 볼 것이다.