
SDA 데이터 송수신 하나
SCL 클럭 제공 하나
따라서 데이터 선이 반이중 통신 half duplex
Open Collector ? I2C 통신 원리

여러개의 장치 병렬 연결 가능
Vcc 의 R1 R2 : 풀업 저항 : open collector 방식에 활용됨
복습 : 풀업 저항(Pull-up)과 풀다운 저항(Pull-down)은 입력 핀의 ‘기본 전압 상태’를 안정시키기 위한 저항
FET 스위치 : 일단 스위치다 라고 이해
FET ON을 하면 V버스 가 LOW 신호로 보내짐
FET OFF 하면 V버스 HIGH 신호 보내짐
결론 : HIGH 신호는 R1R2 풀업 저항으로 생성되고 LOW는 각 Device 들이 FET를 통해 LOW 신호를 보냄
여러 장치가 SDA 라인을 동시에 연결해도 “누가 LOW를 당기면 전체 라인이 LOW”가 됩니다.
동작 구조

Step 1 :
SCL이 HIGH 상태일 때 SDA가 HIGH → LOW로 변할 때 발생합니다.
즉, SCL(클럭)이 먼저 안정적으로 HIGH 상태에 있어야 하고, 그 다음 SDA가 내려가는 게 시작 신호예요.
슬레이브 주소를 일단 먼저 보낸다 SDA에 R/W 가 0이면 슬레이브에 데이터에 쓰겠다 1이면 마스터가 슬레이브로 부터 읽어오겠다
- I²C는 “SCL이 HIGH일 때 SDA가 바뀌면, 특별한 이벤트로 간주”하도록 규칙이 정해져 있어요.
- 그 이벤트가 바로:
- SDA가 HIGH → LOW일 때 → Start 조건
- SDA가 LOW → HIGH일 때 → Stop 조건
- 반대로, SCL이 LOW일 때 SDA가 바뀌는 건 그냥 데이터 전송 중입니다.
Step 2 : ACK , NACK 를 슬레이브한테 받고 Data 를 보내거나 받는다 Data에서도 ACK 수신 필수
※유효 데이터 조건 : SCL이 HIGH 일때의 데이터만 유효하다

데이터는 SCL이 0일 때 변경되는게 안정적 이를 지키지 않으면 Stop 나 Start 로 인식할 수도 있음
실습

PC4 , PC5
레지스터 설정


TWBR : 통신 속도 레지스터
TWCR : 동작, 정지
TWSR : 현재 통신 상태 레지스터
TWDR : 데이터를 쓰거나 읽는 창고
TWAR : 슬레이브 일 경우 자신의 주소를 저장
TWI (I2C) 전송 방식
SW <-> HW 의 전송 방식에 대해서 이해


TWSR 레지스터 Status (상태)


데이터 시트에 나와있는 샘플 C 코드 이 패턴이 반복


'Atmega328p' 카테고리의 다른 글
| {Atmega328p}-EEPROM (0) | 2025.11.01 |
|---|---|
| {Atmega328p}-SPI (1) | 2025.10.31 |
| {atmega328p}-Phase Correct PWM Mode (0) | 2025.10.29 |
| {Atmega328p}-Fast PWM Mode (0) | 2025.10.29 |
| {Atmega328p}-Timer , Counter (0) | 2025.10.29 |