I2C 버스 시뮬레이션
선 두 가닥에 센서 두 개를 달고 주소를 불러 봅니다. 시작 조건, 주소 7비트, ACK와 NACK, 풀업 저항이 없을 때 벌어지는 일까지 한 단계씩 보여 줍니다.
I2CIDLE버스 대기
HIGH (놓아둠)LOW (당김)실제로는 수십 µs 안에 끝나는 일을 느리게 보여 줍니다
3D 장면을 불러오는 중입니다
보내기
0~9, A~F로 두 자리를 입력해 주세요.
버스 파형 위 SCL · 아래 SDA
노란 띠가 지금 순간입니다. SDA 색이 초록이면 센서가, 노랑이면 마스터가 구동하는 구간입니다.
계산 결과
- 선에 실린 주소 바이트
- 응답
- 1비트 시간
- 이 통신 전체
이렇게 해 보세요
- 주소를 0x68로 두고 보내기를 누릅니다. SCL이 HIGH인 동안 SDA가 먼저 떨어지는 순간이 시작 조건입니다.
- 주소 7비트와 읽기/쓰기 1비트가 나간 뒤, 아홉 번째 클럭에서 센서 A가 SDA를 LOW로 당깁니다. 이것이 ACK입니다. 센서 A의 초록 LED가 켜집니다.
- 주소를 0x76으로 바꾸면 이번에는 센서 B만 응답합니다. 같은 선을 쓰지만 자기 주소가 아닌 칩은 가만히 있습니다.
- 0x50(없는 주소)을 고르면 아무도 SDA를 당기지 않아 HIGH로 남습니다. 마스터는 이를 NACK으로 읽고 바로 정지 조건을 냅니다.
- 방향을 읽기로 바꾸면 주소 다음 8비트는 센서가 SDA를 구동합니다. 마지막에 마스터가 NACK을 보내 "그만 보내라"고 알립니다.
- 풀업 저항을 끄고 보내 보세요. 두 선이 HIGH로 올라가지 못해 통신이 아예 시작되지 않습니다.
읽는 법
I2C의 두 선은 아무도 당기지 않으면 풀업 저항 때문에 HIGH입니다. 마스터든 슬레이브든 LOW로 당기는 것만 할 수 있습니다. 그래서 여러 칩이 한 선을 함께 써도 서로 부딪히지 않고, ACK처럼 받는 쪽이 같은 선에 응답을 실을 수 있습니다.
데이터는 SCL이 LOW일 때만 바뀌고, SCL이 HIGH일 때 읽습니다. SCL이 HIGH인 동안 SDA가 바뀌는 경우는 시작 조건과 정지 조건 둘뿐입니다.
화면 아래 "선에 실린 주소 바이트"는 7비트 주소를 한 칸 밀고 읽기/쓰기 비트를 붙인 값입니다. 0x68에 쓰면 0xD0, 읽으면 0xD1이 나갑니다. 데이터시트마다 주소 표기가 다른 이유가 여기에 있습니다.
자세한 설명은 I2C 노트에 있습니다.