그라운드 임베디드 EN 유튜브 구독

실험실

I2C 버스 시뮬레이션

선 두 가닥에 센서 두 개를 달고 주소를 불러 봅니다. 시작 조건, 주소 7비트, ACK와 NACK, 풀업 저항이 없을 때 벌어지는 일까지 한 단계씩 보여 줍니다.

보내기

버스 파형 위 SCL · 아래 SDA

노란 띠가 지금 순간입니다. SDA 색이 초록이면 센서가, 노랑이면 마스터가 구동하는 구간입니다.

계산 결과

선에 실린 주소 바이트
응답
1비트 시간
이 통신 전체

이렇게 해 보세요

  1. 주소를 0x68로 두고 보내기를 누릅니다. SCL이 HIGH인 동안 SDA가 먼저 떨어지는 순간이 시작 조건입니다.
  2. 주소 7비트와 읽기/쓰기 1비트가 나간 뒤, 아홉 번째 클럭에서 센서 A가 SDA를 LOW로 당깁니다. 이것이 ACK입니다. 센서 A의 초록 LED가 켜집니다.
  3. 주소를 0x76으로 바꾸면 이번에는 센서 B만 응답합니다. 같은 선을 쓰지만 자기 주소가 아닌 칩은 가만히 있습니다.
  4. 0x50(없는 주소)을 고르면 아무도 SDA를 당기지 않아 HIGH로 남습니다. 마스터는 이를 NACK으로 읽고 바로 정지 조건을 냅니다.
  5. 방향을 읽기로 바꾸면 주소 다음 8비트는 센서가 SDA를 구동합니다. 마지막에 마스터가 NACK을 보내 "그만 보내라"고 알립니다.
  6. 풀업 저항을 끄고 보내 보세요. 두 선이 HIGH로 올라가지 못해 통신이 아예 시작되지 않습니다.

읽는 법

I2C의 두 선은 아무도 당기지 않으면 풀업 저항 때문에 HIGH입니다. 마스터든 슬레이브든 LOW로 당기는 것만 할 수 있습니다. 그래서 여러 칩이 한 선을 함께 써도 서로 부딪히지 않고, ACK처럼 받는 쪽이 같은 선에 응답을 실을 수 있습니다.

데이터는 SCL이 LOW일 때만 바뀌고, SCL이 HIGH일 때 읽습니다. SCL이 HIGH인 동안 SDA가 바뀌는 경우는 시작 조건과 정지 조건 둘뿐입니다.

화면 아래 "선에 실린 주소 바이트"는 7비트 주소를 한 칸 밀고 읽기/쓰기 비트를 붙인 값입니다. 0x68에 쓰면 0xD0, 읽으면 0xD1이 나갑니다. 데이터시트마다 주소 표기가 다른 이유가 여기에 있습니다.

자세한 설명은 I2C 노트에 있습니다.

PROJECT COURSEI2C로 실제 센서(MPU6050)를 읽어 보고 싶다면밸런싱 로봇 하나를 요구사항, 회로와 PCB, 펌웨어, 앱까지 실무 순서대로 만드는 강의입니다. 10파트 165강.강의 살펴보기 →FREE PDF무료 전자책 3권 받기돌려 본 원리를 글로 정리해 두고 싶다면. BLDC 모터 제어, 직렬통신, 센서를 책 분량으로 묶었습니다. 이메일만 남기면 바로 받습니다.무료로 받기 →