포럼 회원으로 등록하신분만 다운로드가 가능합니다. 최대 업로드 가능한 용량은 20MB 입니다.
RS232C가 장비간 혹은 시스템간의 통신
프로토콜로 각광받고 있다면 I2C는 보드내의 칩과 칩사이의 통신 프로토콜로 각광받는 2라인 시리얼
통신규격이라고 할 수 있다. I2C통신을 어렵다고 생각하시는 분들이 많은 것 같아서, 여기에서 간략히 I2C통신이란 무엇인가를 짚고 넘어가려고 한다. I2C를 사용하면 아래 그림과 같이 단 두 가닥(SCL과 SDA)의 선으로 부품사이를 데이지 체인 형식으로 연결할 수 있다. < 그림 > I2C디바이스들의 연결 클럭(SCL)을 발생시키는 디바이스를 마스터 모드상태의 디바이스라고 부르고 클럭(SCL)을 받아들이는 디바이스를 슬레이브 모드 상태의 디바이스라고 부른다. 슬레이브 디바이스들은 고유의 어드레스를 가지고 있어서 자신의 어드레스를 선두로 하는 신호블록(한 개의 프레임)에 대해서만 반응을 한다. 슬레이브십의 어드레스는 일반적으로 몇 개의 핀으로 결정한다. < 그림 > 슬레이브칩의 어드레스 결정 SCL과 SDA 라인은 오픈콜렉터로 되어 있으며, 보통 47K정도의 저항으로 풀업되어 있다.마스터 디바이스는 원하는 슬레이브칩에 있는 정보를 가져오가나(READ) 써 넣을 수 있으며(WRITE), 슬레이브칩은 마스터칩의 요구에 응답하도록 되어있다. 가장 흔한 I2C통신의 예는 EEPROM(24계열)에서 찾아 볼 수 있다. < 그림 > 첫번째 바이트 정보 그림에서 알수 있듯이 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 등의 다기능 칩들에서 많이 찾아 볼 수 있다. 이처럼 I2C는 실제의 어플리케이션에서 자주 등장하는 유용한 통신 프로토콜이다. PIC16C7X에서는 안타깝게도 SLAVE보드만 내장되어 있다. MASTER모드는 소프트로 얼마든지 해결할 수 있기 때문에 웨이퍼사이즈를 아끼기 위해서 아마도 MASTER모드를 뺀 것 같다. 하지만 걱정할 것 없다. 이 책에서는 필자가 즐겨 사용하는 I2C마스터모드 서브루틴을 공개하고 있다. 이 루틴을 여러분의 소스에 그대로 삽입하여 쓴다면 아무 문제없이 I2C마스터 모드를 사용할 수 있을것이다. SLAVE모드도 마음만 먹으면 소프트로 구현할 수 있지만, 본래의 I2C규격을 보면 400Khz의 수신도 받아 내도록 되어 있으므로 소프트로 구현하기에는 불가 항력이다.(마스터모드는 느리게 출력해도 되지만 슬레이브모드에서는 상대편에서 빠르게 전송할 경우 못받는 경우가 생기면 안되기 때문이다.)
|
마스터모드의 프로그램 구현은 PIC16C74의 I2C통신 모듈과 아무런
관련이 없다.(다시말해 I2C슬레이브 통신모듈이 없어도 I2C마스터모드 구현에는 아무런 지장이
없다는 얘기이다.실예로 통신모듈이 아무 것도 없는 PIC16C74에서도 I2C마스터 모드를 구현할
수 있다.) PC통신은 생각보다 쉽다. 그건 아주 단순한 곳에 착오가 있기 때문이다. HIGH-LOW의 순서만 정확히 지켜준다면 틀림없이 동작하도록 되어있다. I2C는 상당히 안정적이며, 잘짜여진 프로토콜이므로 안심하고 사용할 수 있다. 상당히 빠른속도(400Kbps)까지 허용하며 단 2개의 라인으로 많은 디바이스들을 연결 할 수도 있다. PC는 보드내 통신이지만
이것을 보드 바깥으로도 응용하려고 했던 규격이 ACCESS bus이다. 이 규격을 PC에서의
키보드, 마우스, 스캐너, 프린터 등을 애플사의 ADB(Apple Desktop Bus)처럼
하나의 선으로 연결하려고 시도했던 규격이었다. |
3-WIRE 시리얼 통신규격으로 주로 I2C등장
이전까지 자주 사용되던 통신 프로토콜이다. I2C와 마찬가지로 보드내에 있는 여러 디바이스간의
데이터 교환을 위해 사용하였다. 요사이는 I2C의 등장으로 SPI의 사용이 다소 줄었지만, 워낙 오랜 역사를 가지고 있는 프로토콜이기 때문에, SPI로 동작되는 디바이스들이 아직도 현존하고 있다.(주로 모토롤라의 디바이스들) SPI는 3가닥으로 통신을 한다. 데이터입력(SDI),데이터출력(SDO), 클럭(SCK)이 있고 SPI의 동작을 허가하는 선택관이 별도로 존재한다.(결과적으로 4가닥이 필요하다는 뜻이다.) PIC16C74는 SPI프로토콜을 FULL지원하고 있다. 마스터모드, 슬레이브 모드를 드라이브 할 수 있고, 마치 SPI디바이스처럼 lSS 입력을 받아서 동작하기도 한다. |
SPI의 모드는 SSPCON 레지스터의 하위
4비트로 결정한다. 마스터모드에서의 구동 클럭은 다음 4가지중 하나로 결성할 수 있다. 슬레이브 모드는 다시 2가지로 나눌 수 있다. |
다른 통신모듈과 마찬가지로 SPI 통신도 2개의
전송버퍼를 가지고 있다. SSPBUF의 상태를 나타내는 BF(Buffer Full)비트가 있다.(SSPSTAT의 0번
비트) 이 비트가 SPI통신에 있어서는 중요한 키역활을 담당하고 있다. 이 두개의 엑세스 포인트만 가지고도 SPI를 훌륭하게 제어할수 있다. |
지금 소개하는 프로그램은 SPI통신을 사용하기
위한 표준 프로그램이라고 할 수 있다. LOOP
물론 이 프로그램을 실행 시키기 전에 사전 준비작업을 해주어야 한다 - SDI포트 (RC4)는 입력으로 만든다. - SPI마스터 모드 데이터 송신 - SPI마스터 모드 데이터 수신 - SPI슬레이브 모드 데이터 송신 - SPI슬레이브 모드 데이터 수신 |