DIY를 위한 AI

2022년 9월 15일 목요일

I2C 통신(I2C Communication)

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를 검토하도록 한다.

 

댓글 없음:

댓글 쓰기