TWI(Two-Wire Serial Interface) 직렬통신 포트는 필립스에서 제안한 IC 소자들을 연결하기 위한 단거리용 2선식 직렬통신 버스로서, 마이크로 콘트롤러에 여러 가지의 메모리 또는 I/O 소자들을 인터페이스하기 위하여 고안된 표준 직렬통신 방식인 I2C(IIC-Inter Integrated Circuit) 버스로 통신하는 방식인데, 무슨 이유에서인지 이를 I2C 라고 하지 않고 TWI 라고 부르고 있지만 이것들은 서로 같은것이다.
이것은 2선식 직렬통신 방식으로 항상 마스터(master)와 슬레이브(slave) 사이에서 직렬로 데이터를 송수신할 수 있다.
TWI 직렬통신 포트는 여러 가지의 제어 레지스터를 통하여 유연하고 강력한 I2C 통신을 수행할 수 있으며, 마스터와 슬레이브로 임의 사용될 수 있다.
7비트 어드레스 지정과 100kHz, 400kHz 의 통신속도를 지원하며, 멀티 마스터 조정 기능을 가지고 있다. 또한 MCU가 슬립 모드에 있을때 슬레이브로서 어드레스 지정이 되면 슬립 모드에서 벗어나는 wake-up 기능을 가지고 있다.
마이크로 콘트롤러에 메모리나 I/O 소자를 인터페이스하는 것은 물론 어드레스 버스와 데이터 버스를 사용하는 병렬 방식이 기본이지만, TV 나 VCR 과 같은 가전제품에서는 이렇게 할 경우 많은 버스선이나 인터페이스 소자들 때문에 PCB 의 면적을 많이 차지하게 되고 이는 제품의 가격이나 소형화에 매우 불리하게 된다.
이 때문에 필립스에서는 2선식의 간편한 양방향 직렬통신용 버스를 제안하게 되었는데 이것이 바로 I2C 이다.
I2C 버스를 사용하는 직렬통신 방식의 특징
- SDA(Serial Data), SCL(Serial Clock) 2개의 선으로 양방향 직렬통신을 수행(2.3V ~ 5.5V 전원을 사용)
- 반드시 마스터와 슬레이브 사이에 직렬 동기식 양방향 데이터 통신을 수행
- 마스터가 데이터를 송신 또는 수신을 하기 위하여 데이터 SDA 는 양방향 신호
- 마스터가 데이터를 송신 또는 수신하더라도 클럭신호 SCL은 항상 마스터가 발생
- 표준모드(100kbps), 고속모드(400kbps), 초고속모드(3.4Mbps)의 3가지 전송속도를 지원
- 마스터가 슬레이브에게 7비트 또는 10비트 어드레스로 지정 가능
- 마스터가 전체호출 기능으로 전체 슬레이브를 동시에 지정 및 송신하는 것이 가능
- 멀티마스터 조정 기능 지원
하나의 시스템에 여러개의 디바이스를 접속하기 위하여 SDA, SCL 신호의 출력단은 오픈 콜렉터(open collector), 오픈 드레인(open drain) 방식으로 되어 있어서 이 버스에는 반드시 외부에 풀업 저항(pullup resister)을 접속해야 한다. 풀업 저항의 크기는 사용하는 소자의 출력단 트랜지스터의 용량에 따라 달라지지만 대체로 수kΩ 정도면 된다.
기본 전송 방식
데이터 전송하는 형식은 SDA 안정되어 있는 상태에서 SCL 상승에지 에서 하강에지 까지 1개의 펄스를 발생, 데이터 변경하는 것은 클럭이 L 상태를 유지하고 있는 동안에만 가능
데이터 전송 시작 start 조건은 SCL 신호가 H 를 유지하는 상태에서 SDA 데이터 신호가 하강 에지로 변화해야 하고 전송 종료 stop 조건은 SCL 신호가 H 를 유지하는 상태에서 SDA 데이터 신호가 상승 에지로 변화해야 한다. start 조건과 stop 조건의 사이에는 항상 버스가 비지(busy) 상태인 것으로 간주되며, 따라서 이 기간동안에는 어느 다른 마스터도 버스 제어권을 가지려고 시도하지 말아야 한다.
SDA |
|||||
START | DATA | Change DATA | Repeated START | STOP |
start 이후에 stop 조건이 발생되지 않고 다시 start 조건이 출력되는 것이 가능한데 이를 repeated start 라고 한다. repeated start 는 버스 제어권을 포기하지 않고 새로운 전송을 시작하는 것뿐이며 모든 사항이 start 와 동일하다.
송신, 수신 방식
마스터가 슬레이브에게 데이터 송신할 때는 7비트의 슬레이브 어드레스를 보내고 송신(write)을 의미하는 L 상태의 1비트를 보내면 지정된 어드레스를 가지고 있는 슬레이브는 L 상태의 1비트 확인신호(acknowledge)로 응답하면 마스터는 n 바이트의 데이터를 송신한다.
각 바이트를 수신할 때마다 해당 슬레이브에게 확인 비트로 받는다.
마스터가 슬레이브에게 데이터 수신할 때는 7비트의 슬레이브 어드레스를 보내고 수신(read)을 의미하는 H 상태의 1비트를 보내며 지정된 어드레스를 가지고 있는 슬레이브는 L 상태의 1비트 확인신호(acknowledge)로 응답하면 마스터는 n 바이트의 데이터를 수신한다.
각 바이트를 수신할 때마다 해당 슬레이브에게 확인 비트로 받는다.
이처럼 I2C 직렬통신 형식은 어드레스 패킷(address packet)과 데이터 패킷(data packet)으로 나누어진다.
어드레스 패킷의 형식은 9비트로 구성된다.
마스터가 슬레이브에게 데이터를 송신하는 경우에는 슬레이브 어드레스, 라이트 신호, 확인 신호(SLA+W)로 이루어지고,
미스터가 슬레이브에게 데이터를 수신하는 경우에는 슬레이브 어드레서, 리드 신호, 확인 신호(SLA+R)로 이루어진다.
7비트의 어드레스를 전송할 때는 반드시 MSB부터 전송해야 한다.
데이터 패킷의 형식은 8비트의 데이터와 1비트의 확인 신호를 합하여 9비트로 구성되는데, 8비트의 데이터를 전송할 때도 반드시 MSB부터 전송해야 한다. 어드레스 패킷이나 데이터 패킷을 전송할 때 슬레이브가 비지(busy) 상태에 있거나 기타의 이유로 L 상태의 확인 신호를 응답하지 않으면 마스터는 stop 조건을 발생하거나 또는 repeated start 를 방생할 수 있다.
참고
어드레스 패킷에서 어드레스값을 0000000으로 전송하면 모든 슬레이브가 동시에 지정되는데 이를 전체호출(general call)이라고 한다. 또한, 7비트 어드레스 형식에서 1111XXX 의 어드레스는 향후의 기능 확장을 위하여 예약된 어드레스로서 사용하지 말아야 한다. 이중에서 11110XX 는 I2C v1.0 이후부터 10비트 어드레스 형식을 지정하는데 사용되었다. 10비트 어드레스 형식을 사용하는 경우에는 어드레스 패킷이 2차례 전송되는데, 첫번째 어드레스 패킷에서는 11110XX 가 전송되고 두번째는 YYYYYYYY가 전송되어 이를 합한 XXYYYYYYYY 가 10비트의 슬레이브 어드레스로 사용된다.
멀티마스터의 동기 및 조정
◆TWI 직렬통신 인터럽트 벡터
Vector NO. | Program Address | Source | Interrupt Definition |
34 | 0x0042 | #pragma vector = TWI_vect | Two-wire Serial Interface |
◆TWI 직렬통신 레지스터
'소프트웨어 > AVR' 카테고리의 다른 글
SPI 직렬통신 (0) | 2011.12.19 |
---|---|
A/D 컨버터[Converter] (0) | 2011.10.05 |
아날로그 비교기 (0) | 2011.09.29 |
내부 EEPROM 읽기/쓰기 (0) | 2011.09.28 |
직렬통신[USART] (0) | 2011.09.27 |