[STM32] I2C

myblack·2024년 8월 20일
0

STM32

목록 보기
7/8

I2C

I2C (Inter-Intergrated Circuit)

  • 프로토콜은 여러 "주변" 디지털 집적 회로("칩")가 하나 이상의 "컨트롤러" 칩과 통신할 수 있도록 하는 프로토콜.
  • 서로 다른 IC 간에 데이터를 주고받기 위한 통신 중 하나. 기본적으로 두 개의 라인이 사용된다.
  • I2C 통신을 위한 장치는 마스터(Master)와 슬레이브(Slave)로나뉨
  • 하나의 마스터에 다수의 슬레이브가 연결될 수 있음
  • 구별을 위해 각 슬레이브 마다 고유한 주소값을 갖도록 해야 함
  • 슬레이브의 주소값을 이용해 마스터는 한번에 하나의 슬레이브와 통신을 수행한다

통신방식
SCL(Serial Clock) : 통신의 동기를 맞추기 위한 클럭 신호를 마스터에서 슬레이브로 전송함
SDA(Serial Data) : SCL의 클럭 신호에 맞추어 마스터와 슬레이브간에 데이터를 송수신함

1) 마스터는 SCL과 SDA 핀이 모두 High 상태일 때, SDA를 Low로 바꾸어 슬레이브에게 통신 시작을 알림.
2) 마스터는 통신하고자 하는 슬레이브의 주소를 SDA를 통해 송신함
3) 마스터는 해당주소의 슬레이브와 통신을 수행함
4) 마스터는 SCL이 High이고 SDA가 Low인 상태에서, SDA를 High로 바꾸어 슬레이브에게 통신 종료를 알림

  • Start 조건 : 마스터가 SDA를 LOW로 하고 약간의 시간차를 두고 SCL을 LOW로 한다.

  • Stop 조건 : SCL라인을 먼저 HIGH로 올리고 SDA라인 마저 풀어서 HIGH가 유지된다.

데이터 전송 포맷

마스터가 슬레이브에게 주로 8비트 단위로 데이터를 전송하게 되는데 처음엔 Slave Address를 뜻하는 7bit를 보내고 8번째 bit는 R/W 신호가 된다.

8bit의 데이터를 전송할 땐 MSB부터 LSB 까지 순차적으로 보낸다.

R/W bit가 0이면 마스터가 Write 하겠다는 신호이고 1이면 Read 하겠다는 뜻이다.

클락라인인 SCL이 라이징 엣지일 때 SDA 신호를 가져가게 된다.

마지막 9번째 bit는 해당 주소의 슬레이브가 마스터에게 값을 잘 받았는지 알리는 Ack/Nack 신호로 0이면 Ack, 1이면 Nack를 뜻한다. 8bit 단위로 데이터 전송할 때마다 계속 Ack/Nack신호가 뒤따라서 수신성공여부를 알리고 마지막 Stop Condition으로 통신이 끝나게 된다.

I2C Slave Address
마스터가 7bit의 주소값과 함께 R/W신호를 보내고 그 주소값을 가진 슬레이브가 같은 버스에 물려있다면 9번째 bit를 LOW로 떨어뜨려 Ack 신호를 보내고 그때부터 stop condition이 나오기 전까지 계속 통신이 진행되게 된다.

Ref
https://www.youtube.com/watch?v=gnthBIGKWxo&list=PLUaCOzp6U-RqMo-QEJQOkVOl1Us8BNgXk&index=15
https://wikidocs.net/160156
https://velog.io/@pikamon/STM32-7
https://eteo.tistory.com/86

profile
기록과 분석, 이해

0개의 댓글