I2C(Inter-Intergrated Circuit)란? IIC, I2C Protocol, I2C 통신, I2C 통신 이론

728x90
반응형

1. I2C?

I2C는 현재의 Philips Semiconductor(현재는 NXP)에서 만든 동기식, 멀티 컨트롤러/멀티 타깃 통신이다. 1982년에 만들어졌고, 짧은 거리의 통신(주로 IC 간의 통신)에서 사용한다. 현재 정식 명칭은 I2C고, I2S와는 다른 것이다. 또한 특정 제조사에서는 I2C대신 TWI(Two Wire Interface)라고 하는데 이 또한 I2C를 뜻하는 말이다. 

 

I2C는 2가닥의 라인에 MCU와 다수의 센서가 연결된다. (아래 그림 출처는 NXP의 I2C 데이터 시트)

SDA는 데이터 라인이고, SCL은 Clock 라인이다. 위와 같이 연결된 IC들은 각각 고유의 ID를 갖는다. 

 

2. I2C Protocol

I2C 데이터 프로토콜은 아래 그림과 같다. 

 

2.1 I2C Start, Stop Condition

SDA, SCL 라인은 통신을 하지 않는 상태에서는 모두 High를 유지하고 있는다. 통신이 시작되면(START condition) SDA먼저 High에서 Low로(Falling edge) 상태가 변경되고, SDA가 Low가 된 다음 SCL도 High에서 Low(Falling edge)로 상태가 변경된다. 

통신이 종료될 때(STOP condition)는 START Condition과 반대로 SCL이 먼저 Low에서 High(Risign edge)로 변경된 다음 SDA가 Low에서 High(Rising edge)로 변경된다.

START Condition이후 STOP condition 전까지 Master만이 I2C라인을 사용할 수 있다. 

2.2 I2C Address

I2C는 가장 많이 사용되는 7bit address와 10bit address 가 있다. 10bit address는 여태 본 적이 없다. 잘 사용하지 않는다는 뜻이고, 제조사에서도 10bit address를 적용하지 않는다. 이유를 생각해보면(이건 내 개인적인 의견), 7bit address를 사용하면 총 128개의 IC를 하나의 I2C라인에 연결해 사용할 수 있다. 근데.. 과연... 센서를 128개나 연결할 이유가 있을까? EEPROM을 연결한다 해도 하나의 MCU에 128개를 동시에 연결할 일이 있을까? 글쎄. 아무튼 알아보자.

7bit address는 LSB를 제외한 상위 7bit를 사용한다. 마지막 LSB는 Slave에 보내는 명령이 Write 명령인지 Read 명령인지 알려주는 bit다. LSB가 1이면 Read, 0이면 Write다.

10bit address는 총 2byte로 구성된다. 상위 1Byte를 7bit address와 같은 방식으로 구성되고 하위 1byte는 모두 주소 값으로 구성된다.

상위 1Byte의 구성은 7bit address 구성과 동일하다. LSB가 Read/Write bit고, 나머지 bit가 주소값을 나타내는데, 11110은 고정값이다.

I2C는 16개의 예약된 주소가 있다. 7bit address를 사용할 경우 예약된 16개의 address를 제외하고 총 112개의 address를 사용할 수 있다.

 

 

2.3 I2C ACK, NACK

I2C에서 데이터 전송은 패킷 형태로 전송된다. 1패킷은 9개의 bit로 구성되고, 이중 8bit는 데이터고 마지막 9번째 bit는 ACK, NACK로 사용된다. ACKACKnowledged의 약자로 master에서 보낸 데이터를 slave에서 정상적으로 수신한 경우 slave에서 SDA를 low 상태로 만든다. NACKNot ACKnowledged의 약자로 ACK와 반대로 master에서 보낸 데이터를 slave에서 정상적으로 수신하지 못한 경우 SDA핀을 High로 만든다.

 

3. I2C Read / Write

I2C에서 Slave는 Master의 명령으로 Write동작과 Read동작을 수행한다. 

3.1 Write

위 그림은 Write Protocol이다. Slave(Target)에 데이터를 쓰는 동작(저장하는)이다. Master(Controller)에서는 START Condition이후에 1Byte의 Address를 전송하는데, 이때 LSB는 '0'(Low)으로 한다. Master에서 보낸 주소를 갖는 Slave가 있는 경우 Slave에서는 ACK신호를 전송한다. 이후부터 STOP condition까지 Master에서는 1byte 데이터를 전송하고, Slave에서는 1Byte에 대한 수신 상태인 ACK/NACK신호를 전송한다.

보통 Address 다음 첫번째 패킷은 IC의 Register address로 구성된다.

3.2 Read

위 그림은 Slave에서 데이터를 읽어오는(Master 기준) Read Protocol이다. START Condition부터 Sr 이전까지는 Write Protocol과 동일하다. Read 동작을 하기 전, Slave에서 어떤 Register의 값을 읽어올지 미리 알려줘야 하기 때문에 Write 명령을 먼저 보내줘야 한다. DATA에는 Register address를 넣어준다. Slave에서 ACK/NACK를 전송한 다음 STOP conditiond 아닌 "repeated START condition"이라는 게 보인다. 통신을 종료하지 않고, 다시 시작하겠다는 의미다.

 

Sr 이후에 다시 Slave address를 전송해야하는데 이때는 R/W bit를 '1'(High)로 전송해야 한다. Slave에서는 Sr이전에 수신한 Register address를 1byte씩 보내고, Master에서는 ACK/NACK를 전송한다. Slave는 NACK가 오기 전까지 계속해서 데이터를 전송하고, NACK를 수신하면 데이터 통신을 종료한다. 

 

3.3 10 bit address 데이터 전송 

10bit address 에서 Write 동작은 아래 그림과 같다.

START condition이후에 2byte의 주소를 전송하고 Slave에 데이터를 써주면 된다. 

 

10bit address에서 Read 동작은 아래그림과 같다.

START Condition 부터 Sr까지 10bit address Write동작과 동일하게 데이터를 전송하고, Sr이후에 상위 1Byte address를 한 번 더 전송하면 Slave에서 데이터 전송을 시작한다. 

 

 - 끝 -

728x90
반응형