RS232C가 장비간 혹은 시스템간의 통신 프로토콜로 각광받고 있다면 I2C는 보드내의 칩과 칩사이의 통신 프로토콜로 각광받는 2라인 시리얼 통신규격이라고 할 수 있다. PCB내의 각종 칩들을 단 2가닥의 선만을 사용해서 시리얼로 데이터를 주고 받는 일종의 약정인 I2C는 필립스사에서 제안한 규격으로 현재는 많은 회사들이 지원하고 있는 프로토콜이다.
I2C통신을 어렵다고 생각하시는 분들이 많은 것 같아서, 여기에서 간략히 I2C통신이란 무엇인가를 짚고 넘어가려고 한다. I2C를 사용하면 아래 그림과 같이 단 두 가닥(SCL과 SDA)의 선으로 부품사이를 데이지 체인 형식으로 연결할 수 있다.
 < 그림 > I2C디바이스들의 연결 클럭(SCL)을 발생시키는 디바이스를 마스터 모드상태의 디바이스라고 부르고 클럭(SCL)을 받아들이는 디바이스를 슬레이브 모드 상태의 디바이스라고 부른다. 슬레이브 디바이스들은 고유의 어드레스를 가지고 있어서 자신의 어드레스를 선두로 하는 신호블록(한 개의 프레임)에 대해서만 반응을 한다.
슬레이브십의 어드레스는 일반적으로 몇 개의 핀으로 결정한다.
 < 그림 > 슬레이브칩의 어드레스 결정
SCL과 SDA 라인은 오픈콜렉터로 되어 있으며, 보통 47K정도의 저항으로 풀업되어 있다.마스터 디바이스는 원하는 슬레이브칩에 있는 정보를 가져오가나(READ) 써 넣을 수 있으며(WRITE), 슬레이브칩은 마스터칩의 요구에 응답하도록 되어있다.
가장 흔한 I2C통신의 예는 EEPROM(24계열)에서 찾아 볼 수 있다. 24LC04와 같은 I2C통신 프로토콜을 가진 EEPROM은 마이컴등과 2가닥의 신호선으로 연결된다. 마이컴에서는 EEPROM에 담긴 정보를 읽어오기 위해서 EEPROM의 어드레스를 보내고, 읽을 것인지 쓸 것인지의 정보도 함께 보낸다. 보통은 처음 보내는 8비트의 정보에 이러한 내용들이 모두 실리게 된다.
 < 그림 > 첫번째 바이트 정보
그림에서 알수 있듯이 I2C는 MSB가 먼저 출력된다.(MSB FIRST라고 부른다. 이와는 반대로 RS232는 LSB FIRST이다.)제일 마지막 비트가 LOW이면 WRITE코멘트가 되고 HIGH이면 READ 코멘트가 된다. ACK는 ACKNOLOGY의 약자로 한 바이트의 전송이 제대로 끝났는지를 확인하는 일종의 확인절차라고 할 수 있다. (ACK에 해당하는 클럭에서는 SLAVE 의 SDA핀이 반드시 LOW상태로 있어야 정상적으로 받았다는 뜻이 된다.)
I2C에서의 첫번째 바이트는 이러한 명령의 성격을 가지고 있다. 그 다음으로 따라오는 내용은 슬레이브의 어드레스가 된다 EEPROM의 경우 데이트를 저장하거나 읽어올 번지를 두번째로 출력하는 것이다. 어드레스까지 전송이 끝나면 그 다음에는 앞의 코멘드 내용에 따라서 슬레이브의 반응이 틀려진다. 만약 READ코멘드였다면 해당 어드레스의 내용을 SCL의 클록에 맞추어 SDA(데이터핀)로 출력할 것이고 WRITE코멘드였담녀 마스터로부터 오는 데이터를 해당 어드레스에 WRITE 할 것이다.
이처럼 I2C통신은 3가지 성격의 데이터가 순서대로 송수신되는 시리얼 통신규격이라고 정리할 수 있다.
 < 그림 > 3가지 성격의데이터
I2C로 엑세스 가능한 디바이스들은 EEPROM 이외에도 ADC,DAC를 비롯해 AUDIO,VIDEO,SVR 등의 다기능 칩들에서 많이 찾아 볼 수 있다. 예를들어 TV나 모니터에 간단한 글자를 표시해주는 OSC(On Screen Display)칩도 I2C프로토콜을 사용해서 간단한 정보만을 주고 받는 것이다.(X,Y 축, 표시할 캐릭터 등등)
이처럼 I2C는 실제의 어플리케이션에서 자주 등장하는 유용한 통신 프로토콜이다. PIC16C7X에서는 안타깝게도 SLAVE보드만 내장되어 있다. MASTER모드는 소프트로 얼마든지 해결할 수 있기 때문에 웨이퍼사이즈를 아끼기 위해서 아마도 MASTER모드를 뺀 것 같다. 하지만 걱정할 것 없다. 이 책에서는 필자가 즐겨 사용하는 I2C마스터모드 서브루틴을 공개하고 있다. 이 루틴을 여러분의 소스에 그대로 삽입하여 쓴다면 아무 문제없이 I2C마스터 모드를 사용할 수 있을것이다.
SLAVE모드도 마음만 먹으면 소프트로 구현할 수 있지만, 본래의 I2C규격을 보면 400Khz의 수신도 받아 내도록 되어 있으므로 소프트로 구현하기에는 불가 항력이다.(마스터모드는 느리게 출력해도 되지만 슬레이브모드에서는 상대편에서 빠르게 전송할 경우 못받는 경우가 생기면 안되기 때문이다.)
|