본문 바로가기

공부/Functions

I2C 통신

I2C - Inter-Integrated Circuit

동기식 직렬 통신(클럭 라인 사용)

2개의 핀을 사용 :

SDA - Serial DAta, 데이터 직렬 통신에 사용된다.

SCL - Serial CLock, 디바이스 간에 동기화에 사용되는 클럭

SDA와 SCL은 Pull-up 저항으로 인해 항상 high를 유지(Idle상태가 둘 다 High)

그림과 같이 마스터와 슬레이브는 하나의 버스에 연결되어있다

기본적으로 I2C는 7비트의 주소를 가지고 있어서 128개의 주소 중 reserved된 16개를 뺀 112개의 주소를 사용 가능하다. 즉, 112개의 장치들 간에 I2C 통신이 가능하다

Start Condition과 Stop Condition으로 데이터 전송의 시작과 끝을 알린다

Start Condition : SCL이 H인 동안 SDA가 H->L로 변하면 Start Condition을 나타냄

Stop Condition : SCL이 H인 동안 SDA가 L->H로 변하면 Stop Condition을 나타냄

위 그림에서 SCL과 SDA가 HIGH(IDLE상태)에서 SDA가 LOW로 변하고(하강 에지) SCL은 여전히 HIGH이다. 이것은 Start Condition으로 통신의 시작을 알린다. 

Start Condition 이후에 8비트를 전송하는데 이는 slave의 주소(7bit)와 R/W(1bit)

를 결정한다

데이터 전송 시 SCL이 LOW 일때 SDA의 상태가 변화하고 SCL이 HIGH일 때 SDA의 값을 캡처한다

송신 측에서는 데이터를 보낼 때 MSB부터 1bit씩 1Byte 단위로 전송하고 수신 측에서는 1Byte를 받을 때마다 데이터를 잘 받았다는 응답(ACK)을 LOW로 SDA에 표현한다

만약 데이터 전송 후 HIGH상태를 유지하면 NACK로 데이터 전송에 오류가 발생했다는 의미이다

데이터 전송 중에는 SDA가 SCL이 HIGH인 상태에서 변하면 안 된다. SCL이 HIGH일 때 SDA가 HIGH로 변하면(상승 에지) Stop Condition이므로 통신의 끝을 의미한다

 

'공부 > Functions' 카테고리의 다른 글

SPI 통신  (0) 2020.01.08