안녕하세요 이번 글에서는 I2C에 대해서 아주 쉽게 알아보겠습니다.
현재 이 부분의 칩설계를 담당하고 있는데 인터넷 검색해 보니 버스, 프로세서, 프로토콜 등등 단어로 쉽게 와닿지 않았습니다. 처음 I2C를 보시는 분들이 쉽게 이해할 수 있도록 용어를 쉽게 풀어서 쓰겠습니다.
I2C는 Inter-Integrated Circuit입니다. 부르다 보니 줄여서 I2C라고 불립니다.
원래의 Inter-Intergated에서 유추할 수 있듯 integrated Circuit(이하 IC) 사이의 통신 프로토콜입니다.
여기서 통신 프로토콜이란 약속이란 뜻입니다. 즉, 통신하기 위해서는 IC 사이에 데이터를 주고받는데 이 데이터를 읽고 쓰기 위해서 정한 약속입니다.
실제 I2C가 데이터를 주고받을 때는 (standard mode 기준) 8bit 단위입니다. 여기서 앞의 7bit는 주소의 정보이며 마지막 bit는 읽기/쓰기를 결정합니다. 이 약속을 통해서 IC 사이에서 데이터를 읽고 쓰며 통신할 수 있습니다.
I2C는 양방향 2 와이어 직렬 버스라고 합니다. 무슨 말인지 하나씩 해석해 보겠습니다.
일단 2 와이어라는 것은 데이터(Data)를 보내는 1가닥, Clock을 보내는 1가닥 총 2가닥이라는 뜻입니다.
아래 그림과 같이 IC 2개가 Data를 뜻하는 SDA, Clock을 뜻하는 SCL으로 이어져 있습니다.
버스는 쉽게 데이터의 모임입니다. 위에서 실제로 I2C가 데이터를 주고받을 때는 8bit가 사용된다고 했습니다. 8개 중 1개라도 빠지거나 추가되면 버스의 크기가 달라져 서로 올바른 정보를 전달할 수 없게 됩니다.
그리고 직렬 버스를 바로 보는 것보다 병렬 버스를 먼저 보겠습니다. 병렬 버스는 동시에 8bit가 송수신되어야 Data line이 8개가 되어야 합니다. 하지만 SDA 1개가 있습니다. 즉, SDA 1개의 선에 "차례로" Data를 보내므로 직렬 버스입니다.
아래 그림과 같이 IC들을 간략하게 나타낼 수 있습니다. I2C는 Master(Host라고도 합니다)와 Slave(Agent라고도 합니다.)끼리 통신(데이터를 송수신)하는 프로토콜(약속)입니다.
참고로 Slave 개수는 127개까지 된다고 알려져 있는데 그 이유는 다음과 같습니다.
I2C가 데이터를 주고받을 때는 (standard mode 기준) 8bit 단위(입니다. 여기서 앞의 7bit는 의 주소의 정보라고 위에서 언급했습니다. 2^7 = 128이며 Master가 1개를 쓰므로 나머지 127개까지 Slave 주소가 할당될 수 있습니다. 이 약속을 통해서 IC 사이에서 데이터를 읽고 쓰며 통신할 수 있습니다.
간단하게 읽기(read)와 쓰기(write)에 대해 알아보겠습니다.
1. 쓰기(write)입니다.
통신이기에 Master와 Slave는 서로 Data를 받을 수 있는 환경인지, Data를 잘 받았는지에 대해 확인할 필요가 있습니다.
그것을 위 그림에서 ACK(acknowledge)인 A, NACK(not acknowledge)인 A bar를 사용합니다.
그래서 최종적으로 아래와 같이 통신합니다. Figure.1에서 DATA가 2개 있는데 앞의 DATA는 일반적으로 Register의 Address이며 뒤의 DATA는 실제 정보입니다. Target Address와 Register Address가 각각 있다는 것을 유의하세요.
Master | S(start) | Target Address | W(write) | Register Address | Data | P(stop) | |||
Slave | ACK | ACK | ACK |
Master가 시작 신호인 Start를 보내고, Target Address에 Write 하겠다는 신호를 보내면 Slave에서는 ACK라는 알겠다는 신호를 보냅니다. 그럼 Master가 Register Address 주소를 요청하면 다시 Slave는 ACK 신호를 보냅니다. Master가 Data를 wirte 하면 Slave는 써졌다는 ACK를 보냅니다. 이후 Master는 Stop 신호를 보냅니다.
2. 읽기(read)입니다.
Master | S(start) | Target Address | R(read) | ACK | NACK | P(stop) | |||
Slave | ACK | Register Address | Data |
Master가 시작 신호인 Start를 보내고, Target Address에 Read 하겠다는 신호를 보내면 Slave에서는 ACK라는 알겠다는 신호와 Register Address 주소를 보냅니다. 그럼 Master는 Register Address를 잘 받았다는 ACK 신호를 보냅니다. Slave가 Data를 보내면 Master는 잘 받았다는 NACK를 보내고, Stop 신호를 보냅니다.
여기까지 I2C에 대해 쉽게 풀어봤습니다. 위에 standard mode라고 언급을 했는데 다른 mode도 존재한다는 것을 유추할 수 있습니다. 또한, read 부분은 일반적으로 다른 방식의 프로토콜이 쓰이는데 이 부분은 다음 포스팅에서 다루겠습니다.
읽어주셔서 감사합니다.
위 글은 https://www.nxp.com/docs/en/user-guide/UM10204.pdf 자료를 바탕으로 쓰였습니다.
틀린 부분이 있다면 피드백 반영하여 수정하겠습니다.
'Electrical Knowledge' 카테고리의 다른 글
RS Latch과 Level Trigger(레벨 트리거)를 포함해 한 번에 제대로 설명한 Edge Trigger(에지 트리거)의 동작 원리 (2) | 2023.12.29 |
---|---|
수동 소자 R, L, C에서 C와 L의 전압, 전류 특성 알아보기 (0) | 2023.10.03 |
EMI/EMS/EMC에 대한 뜻과, EMI 발생 원인 (0) | 2023.09.28 |