1. I2C 통신에 대해

기본적으로 쓰이던 직렬 통신 USART11로만 쓰인다. 그러므로 여러 장치와 연결하려면 그에 대응하는 여러 개의 송수신기가 필요하므로 하드웨어에서 제약이 있다. 이를 개선하도록 송신과 수신을 묶고 이것과 클럭 두 회선에서 분기하여 또 다른 장치를 연결하는 통신이 1980년대에 필립스(Philips)사에 의해 개발되었는데 이를 I2C([아이-스퀘어-] 또는 IIC, Inter-Integrated Circuit : 상호 통합형 회로)라고 부른다. I2C 통신에 대해 알아본다.

 

2. I2C 통신 결선도

 

그림과 같이 I2C의 결선도는 SCL(Serial Clock)끼리, SDA(Serial Data)끼리 연결하고 두 회선에 풀업 저항기를 추가한다. 그리고 클럭을 한 장치가 관리하고 이것을 클럭과 함께 송신하는 장치가 제어장치(Controller), 클럭을 받아 데이터를 응답하는 장치가 대상장치(Target)가 된다. 더불어 한 회선에서 송신과 수신을 하는 동기식 반이중 통신이다.
  SCL
SDA 모두 출력이 오픈 콜렉터(Open Collector) 또는 오픈 드레인(Open Drain)방식이기에 외부에 풀업 저항기가 반드시 필요하다. 그렇지만 이 저항치의 계산을 하기보다 일반적인 2.2 kΩ, 3.3 kΩ, 4.7 kΩ 등의 값을 적당히 결정한다. 속도는 몇 가지로 구분된 모드가 있으므로 대상장치가 지원하는 모드에 맞추어 사용한다.

 

 

그림과 같이 통신을 11에서 1N으로 변경되도록 대상장치를 추가한다. 대상장치가 2대로 될 때도 두 회선을 동일하게 분기해 연결하되 저항은 별도의 추가가 없다. 대상장치의 개수를 3대 이상으로 증가시켜 최대 127(7-bit 주소 방식) 또는 1023(10-bit 주소 방식)까지 가능하다. , 분기된 회선이 많아지면 회선상의 커패시턴스 문제로 저항기의 값을 조정해야 할 수도 있다.
 
참고로 I2C 통신은 NN 방식으로 제어장치가 2대 이상인 경우도 존재하는데 클럭과 데이터의 상태를 판단하여 제어의 우선권을 가져가서 제어하는 방식이다. 제어장치1과 제어장치2로 구분한다 할 때, 제어장치1이 데이터를 전송하는 중에 제어장치2는 대기하고 있다가 데이터의 전송의 종료가 확인되면 제어권을 가져가는 것이다.

 

3. I2C 통신의 동작 모드

지원하는 속도에 따라 5 가지의 이름으로 구분하여 사용한다. 대상장치가 어떤 모드를 지원한다면 그 이하의 속도로 동작한다는 의미이지만 I2C 통신의 데이터 프레임이 상당히 길기 때문에 가능한 최대속도를 쓰는 것이 대부분이다.

 

동작 모드

최대속도

최대커패시턴스

최대상승/하강시간

저속모드(Ls)

10 kbps

-

-

표준모드(Sm)

100 kbps

400 pF

1000 ns / 300 ns

쾌속모드(Fm)

400 kbps

400 pF

300 ns / 300 ns

쾌속모드+(Fm+)

1 Mbps

550 pF

120 ns / 120 ns

고속모드(Hs)

1.7 Mbps

400 pF

80 ns / 80 ns

고속모드(Hs)

3.4 Mbps

100 pF

40 ns / 40 ns

 

우선 저속모드는 다른 통신과 호환되는 기준으로 알려진 것일 뿐 I2C 통신에서 정식으로 쓰이는 동작 모드가 아니다. 그리고 고속모드가 두 가지로 구분되는 것은 회선상의 커패시턴스에 의한 것으로 최대 400 pF일 때 1.7 Mbps, 최대 100 pF일 때 3.4 Mbps까지 동작한다고 생각하면 된다. 이것들 외에도 5 Mbps인 초고속 모드(Ultra-fast mode)라는 통신이 있으나 푸시 풀(Push-pull)방식의 단방향 통신(쓰기 전용)이므로 여기서는 별개로 취급한다.

 

4. I2C 통신 데이터 프레임

 

그림과 같이 데이터 프레임 프레임 이전인 비활성(Inactive)상태일 때는 풀업 저항기에 따라 두 회선 모두 고 레벨을 유지한다. 그러다가 시작부분에서 제어장치가 SDA회선을 저 레벨로 변화시켜 대상장치에게 프레임의 시작을 알린다. 이것을 시작조건(Start Condition)이라고 한다. 반대로 끝 부분에서 SCL이 고 레벨일 때 SDA가 고 레벨로 바뀌는 것을 정지조건(Stop Condition)이라고 한다. 이 시작조건과 정지조건으로 데이터 프레임의 시작과 끝을 알리며, 다중 제어장치의 경우 제어할 권한을 주고받는 기준이 된다.

다음으로 구조를 볼 때 시작조건이후 제어장치가 대상장치의 주소 7-bit와 함께 읽기(‘1’) 또는 쓰기(‘0’)를 합해 8-bit를 송신한다. 직후 주소에 해당하는 대상장치가 제어장치에게 준비가 되었음을 저 레벨로 변화시켜 알리는데 승인(ACK, Acknowledgement : 애크)이라고 한다. 만약 대상장치가 응답할 수 없다면 풀업에 의해 고 레벨로 유지되는데 미승인(NACK, Not-acknowledgement : 내크)이라고 한다. 제어장치는 승인이 확인되면 뒤를 이어서 데이터를 송신하고 미승인이 확인되면 응답할 대상장치가 없다는 것으로 판단하여 통신을 끝낸다.
  
주소만을 보면 상위 4자리(A6~A3)와 하위 3자리(A2~A0)R/W’로 구분된다. 이중 상위 4자리의 00001111일 때의 특별한 명령을 제외한 대부분은 제조사에서 지정하게 되어 있다. 그리고 하위 3자리는 하드웨어 설계상으로 약간씩 변경할 수 있도록 제공된다. 이에 따라 동일한 회선내에 같은 종류의 대상장치가 복수로 연결될 수 있다. R/W’ 비트는 이후 명령이 제어장치가 수신(읽기)을 하려는 경우에 R/W’1, 송신(쓰기)을 하려는 경우에 R/W’0이 된다.

 

 

 

그림은 R/W’1이 되어 쓰기를 시행하는 데이터 프레임이다. 대상장치 주소를 보내서 응답이 승인(ACK)일 때, 제어장치가 쓰기를 시행할 내부 주소를 다시 전송한다. 이 때, 8-bit 전송때마다 승인을 받아야 하고 이후 쓰려고 하는 데이터를 보낸다. 마지막 데이터까지 승인을 확인하고 제어장치의 판단으로 프레임을 종료한다. 이러한 순서를 그림으로 나타내면 아래와 같다.

 

 

읽기의 경우 R/W’1을 전송하면 승인을 확인 후 데이터를 바로 수신하게 되므로 읽으려는 내부 주소를 판단할 수 없다. 따라서 사전에 R/W’0으로 쓰기 상태가 되어 내부 주소를 지정하되 데이터를 전송하지 않는 과정을 거친다. 이후 R/W’1을 전송하고 대상장치의 데이터를 읽어 들이고 역시 8-bit마다 제어장치가 승인으로 답한다. 제어장치가 마지막까지 읽은 후의 응답을 미승인(NACK)으로 하여 데이터 프레임이 종료된다.

이러한 과정들은 각 대상장치마다 다르니 확인하여 맞추어 변경하도록 한다.

 

 

10-bit형 주소의 사용법은 그림과 같이 두 바이트에 나누어 제어장치에서 전송하게 된다. 처음의 A14~A10에 대해 ‘11110’으로 10-bit형 주소방식이라는 것을 회선상의 장치에게 알리고 남은 주소 A9~A8R/W’를 전송하여 해당되는 대상장치의 응답을 받는다. 이어 A7~A0까지 전송하여 대상장치를 특정한다. 그 이후 대상장치의 내부 주소를 지정하는 부분부터 동일하다.

 

5. SMBus 통신, PMBus 통신

1990년대에 노트북 내 마더보드의 충전식 배터리 시스템과 같은 전력 관련 소자와의 통신을 위해 인텔(Intel)사와 듀라셀(Duracell)사에 의해 정의된 I2C의 파생형을 SMBus(System Management Bus : 시스템 관리 버스)라고 부른다. SMBus는 스마트 배터리 시스템(SBS)의 제어용 통신으로 계속 쓰였으며 2000년대에 전력용 시스템 관리를 위해 여러 회사에 의해 다시 SMBus기반으로 개량하는데 이를 PMBus(Power Management Bus : 전원 관리 버스)라고 부른다.

 

 

I2C

SMBus

PMBus

속도 범위

0 ~ 3.4 Mbps(양방향)

10 ~ 100 kbps(v2.0)

10 ~ 400 kbps

0 ~ 5 Mbps(단방향)

10 ~ 1 Mbps(v3.0)

클럭 시간제한

없음

있음

있음

주소 길이

7 bit(127)/10 bit(1023)

7 bit(128)

7 bit(128)

프레임 용량제한

없음

32 Byte

255 Byte

싱크 전류

3 mA Max.

350 uA Max.(v1.1)

350 uA Max.(v1.0)

4 mA Max.(v2.0)

저 레벨 기준전압

0.3×VDD V

0.8 V

0.8 V

고 레벨 기준전압

0.7×VDD V

2.1 V

2.1 V

에러 체크

없음

PEC(v1.1, CRC-8)

PEC(v1.0, CRC-8)

 

SMBus PMBus 모두 I2C의 변형으로 결선방식은 클럭과 데이터라는 두 회선을 갖는 반이중 통신인 점은 같지만 세부적으로 몇 가지가 달라 결선 환경에 따라 호환이 안 될 수도 있다. 제한 시간 때문에 최저 동작속도가 정해져 있고, 구동 전류의 범위가 다르므로 풀 업 저항기의 수정이 필요할 수 있다. 그 외에도 통신 프레임 자체에 PEC(Packet Error Checking : 패킷 오류 검사)가 포함되어 있어 있으니 참고한다.

 

6. 결론

PROM계열의 메모리나 입출력 확장기, /습도계와 같이 느리지만 여러 개를 다중 접속하는 직렬통신이 필요할 때 I2C를 검토하도록 한다.

 

'정보-통신-연산 > 기초1.단위통신' 카테고리의 다른 글

MII(통신)  (0) 2022.09.24
SPI 통신(SPI Communication)  (0) 2022.09.10
UART 통신(UART Communication)  (0) 2022.09.10
통신 (Communication)  (0) 2022.09.10

+ Recent posts