2022. 6. 14. 17:44ㆍARM
[I2C 버스 프로토콜]
마스터와 슬레이브의 역활을 나누어 통신을 한다.
하나의 마스터에 여러 개의 슬레이브가 연결되어있는데 통신은 1대 1로 이루어진다.
마스터는 데이터라인(SDA)과 클락라인(SCL) 2가지를 이용하여 슬레이브와 통신한다.
HIGH신호로 대기중인 두 신호 중 데이터라인을 먼저 LOW로 떨어트린 후 약간의 시간 후에 클락 라인도 LOW신호로 떨어트린다.
위 동작은 연결된 모든 슬레이브로 전송되는데 슬레이브에서는 위의 동작을 통신 시작으로 받아 드린다.
이후 슬레이브는 전송 받은 슬레이브 주소에 따라 각각 통신을 유지 할지 결정한다. 전송 받은 주소 값에 맞는 슬레이브가
1대 1로 계속 통신을 하게 된다.
통신의 종료 신호는 클락라인에서 먼저 하이를 유지한후 일정 시간 후 데이터라인도 하이 신호를 유지한다면
슬레이브는 통신이 종료된 것으로 받아드린다.
데이터 전송 포맷은 주로 byte 단위로 전송하는데 원하는 데이터를 MSB부터 LSB까지 7bit,
8번째 신호는 R/W 신호를 보낸다. 데이터 라인 신호는 클락 라인 신호가 rising edge일때 입력된다.
첫번째 부터 8번째 까지 신호는 마스터가 전송 했다면 마지막 9번째 신호(bit)는 마스터가 신호르 전송하지 않고 슬레이브가 (LOW)신호를 전송하는데 애크(ACK) 신호라고 한다. 이 신호는 슬레이브가 앞의 신호들을 받았다고 마스터에게 알려주는 신호이다.
[시작 신호] -> 슬레이브주소(7비트) -> R/W 신호(1bit) -> ACK 신호(1bit) -> 원하는 데이터(7비트) -> R/W신호(bit) -> ACK신호(1bit) -> 반복 ..... -> [스탑 신호]
'ARM' 카테고리의 다른 글
| [STM32] 가변 저항으로 ADC 값 조절하기 (0) | 2022.07.13 |
|---|---|
| [ARM] I2C를 이용한 LCD 화면 출력하기 (0) | 2022.06.19 |
| [ARM] 난수발생회로 (0) | 2022.06.01 |
| 디지털 금고 (0) | 2022.05.29 |
| 외부 인터럽트(EXTI) (0) | 2022.05.27 |