Ch1 Seminar/IP

I2C 통신 overview

베린이 2023. 5. 24. 15:41
반응형

언젠가 세미나를 하는데 수석님이 'RTL 엔지니어의 중요한 덕목 중 하나는 다양한 IP에 대한 지식이 있어야 한다'라고 하신 기억이 있습니다. SOC integration을 하든 자체 ip를 개발하든 결국에 ip에 대해 알아야 일을 시작할 수 있거든요. 그래서 이번에는 I2C에 대해 알아보도록 하겠습니다.

 

I2C(Inter integrated Circuit)는 SPI에 비해 느리고 전력효율이 좋지 않지만 2개의 핀만으로도 통신이 가능하다는 장점을 가지고 있습니다.

 

< 출처 : https://electrosome.com/i2c/ >

위 그림에서 볼 수 있듯이 하나의 Master가 다수의 Slave와 통신이 가능한데 SCL, SDA 두 신호만으로 통신을 할 수 있습니다. SCL은 SPI의 SCLK와 같이 I2C의 clock이고 SDA는 데이터를 주고받는 선입니다. SCL은 Master to Slave unidirectional이고 SDA는 bidirectional이죠. 그럼 I2C 통신 방법에 대해 알아봅시다.

 

- Protocol

I2C 통신은 SCL 신호와 SDA 신호에 의해 진행됩니다. SCL과 SDA는 Active-low여서 통신이 시작되기 전까지는 High 상태를 유지합니다.

 

1. Start / Stop condition

I2C start, stop condition < NXP Semiconductors I2C-bus specification >

 

- Start

I2C 통신의 시작과 끝은 컨트롤러에 의해 제어됩니다. 통신이 시작되면 data 주고받는 signal인 SDA가 먼저 High에서 Low로 변합니다. 그 후에 I2C clock인 SCL도 Low로 변경되고 이러면 Master, Slave 모두 I2C 통신이 시작됐다는 것을 인식하고 버스는 busy 상태로 인식하게 됩니다.

- Stop

통신이 끝나면 SCL signal이 먼저 High 상태로 바뀌고 그 후에 SDA가 High로 바뀝니다. 그러면 I2C 통신이 끝났다는 것을 의미합니다.

 

2. Address format

Document에는 data transfer에 대해 먼저 나오지만, I2C protocol은 address phase가 먼저 나오니까 address format에 대해 먼저 알아보겠습니다. 이전에 소개해드린 SPI는 CS(Chip Select) 또는 SS(Slave Select)라고 하는 signal을 통해 어떤 slave와 통신을 할지 정했습니다. 또한 나중에 소개해드릴 UART 통신은 1:1 통신이기 때문에 slave를 select 하는 방법이 필요하지 않습니다.

 

하지만 I2C 통신은 여러 Slave와 통신이 가능하지만 핀 개수의 한계로 address를 통해 통신할 slave를 정해야 합니다. 7-bit address mode와 10-bit address mode가 있는데 각각 27 = 128개, 210 = 1024개의 slave를 구성할 수 있습니다.

 

위 그림을 보면 아시겠지만 ADDRESS 다음 R/W bit가 나옵니다.

이는 이 통신이 Write transfer인지, Read transfer인지 알려주는 bit입니다. High 상태면 Read, Low 상태면 Write을 의미합니다. 이 다음에 ACK bit도 나오는데 잠시 뒤에 설명드리겠습니다.

 

3. Data transfer format

Slave가 select되고 R/W가 정해지면 데이터 trasnfer를 시작합니다. SDA line의 1-byte는 항상 8-bit인데요, 1 transfer에 전송되는 byte 수는 제한되지 않습니다. Address와 Data tranfer 뒤에는 항상 ACK bit가 따라오는데요

 

- ACK/NACK

ACK(Acknowledge)와 NACK(Not Acknowledge)는 모든 byte에 따라옵니다. ACK는 Slave가 byte를 잘 받았으며, 다음 transfer를 진행해도 된다는 것을 의미하고(Low), NACK는 Slave가 데이터를 잘 받지 못했다는 것을 의미합니다(High). Master는 Slave가 NACK 신호를 보내면 transfer를 중단하기 위해 STOP condition을 보내거나, 새로운 transfer를 시작하기 위해 START condition을 보냅니다.

 

- Transfer mode

I2C 통신은 전송속도에 따라 다음과 같은 transfer mode가 존재합니다.

사용자는 컨트롤러를 잘 설정하여 목적에 맞게 transfer mode를 선택할 수 있습니다.

'Ch1 Seminar > IP' 카테고리의 다른 글

LIN overview (2) Sleep, Wake up  (0) 2023.10.11
LIN overview (1) Protocol  (0) 2023.10.04
UART 통신 overview  (0) 2023.07.26
Decimation filter (데시메이션 필터)  (0) 2023.06.10
SPI 통신 overview  (0) 2023.05.16