2010년 2월 15일 월요일

다양한 serial 통신 이해하기

UART
가장 대중적으로 사용되는 시리얼 통신은 UART device를 사용하는 것으로 보통 RS-232C transceiver와 함께 쓰인다. 하지만 RS-422이나 LIN등 다른 IF도 많이 사용된다. UART는 RX/TX 라인이 별도로 존재하고(full duplex) 별도의 clock라인은 사용하지 않는다. 따라서 양측이 서로 Baud rate를 맞추어야 통신이 가능하다. 즉 Asyn.통신이라는 말씀. 따라서 UART와 함께 사용되는 RS-232C도 동일한 특성을 가진다. 하지만 LIN transceiver를 사용할 경우에는 RX/TX선을 따로 가지는 대신 1개의 선만 사용하므로 full duplex가 아닌 half duplex로 동작하게된다. 또한 RS-232C는 1:1통신용으로만 사용되지만, 다른 IF 사용시 여러 장치간 통신에 사용이 가능하다.

UART에서 transceiver를 별도로 사용하는 이유는 무엇일까? 동일 보드에서 UART를 사용하여 통신할 경우 UART <-->UART 연결을 사용할 수 있지만, 외부 디바이스간의 통신에는 보다 멀리 전송하기 위해서 level shifter등을 사용하여 전압을 승압하는 것이다. 또한 다양한 전송 IF를 사용하여 1:1전송 뿐만 아니라 1:n 전송을 통한 네트워크 구현도 가능하다.

http://blog.naver.com/hjsnyh?Redirect=Log&logNo=80020142147

LIN- Local Interconnect Network
LIN은 자동차 업계에서 많이 사용하는 저속 차량용 네트워크로, UART를 사용한다. LIN transceiver를 통하여 network는 RX/TX구분없이 1 line을 사용하여 통신이 이루어 진다. 즉 RS232C에서는 RX/TX를 별도 라인으로 사용해서 full-duplex로 동작하는데 반하여 LIN 에서는 half-duplex로만 동작하는 Async. 통신방식이며 I2C, USB등과 유사하게 Master 기기가 통신을 시작하는 방식을 사용한다. 보통 20kbps이하의 저속 통신에 사용되며, 최근에는 CAN등에 자리를 내주고 있다. Master라는 것은 seiral통신에서 통신을 시작할 수 있는 권한이 있는 디바이스로, Slave장치는 Master장치가 통신을 요청할 때 까지 어떠한 통신도 시작할 수 없다. 각 serial통신 방법에 따라 Master가 1개만 존재하거나 여러개 존재할 수 있으며, CAN같은 경우 모든 장치가 Master/Slave구별 없이 원하는 시점에 메세지 전송이 가능하다. USB장치의 경우에는 Master/Slave라는 용어 대신 Host/Device라는 용어를 사용한다.

http://blog.naver.com/cybercall?Redirect=Log&logNo=120032068893


SPI - Serial Peripheral Interface Bus
SPI는 또 다른 serial장치로 CS, MISO, MOSI, SCK 4개의 선을 사용한다. RX/TX라인이 별도로 존재하고, CLK이 있으므로 full duplex, Sync.전송 방식이다. SPI는 Master/Slave 장치가 구별되며 Master에서 데이터를 보내는 양 만큼 Slave에서 데이터가 들어오게 된다. 이는 Master/Slave 양쪽에 shift register를 사용하기 때문으로 Master측에서 Tx만 필요한 경우 데이터를 보내는 순간 Slave에서 들어오는 데이터는 무시하면 된다. 반면 슬레이브에서 보내는 데이터를 읽어야 할 경우 Master는 dummy바이트를 보냄으로써 Slave로 부터 데이터를 받을 수 있다.
보통 1:1 통신용으로 많이 사용되지만, 1개의 Master에 여러개의 Slave를 붙일 수도 있다. Master에 CS를 여러개 사용하여 각각을 Slave의 CS로 사용하여 여러개의 Slave를 서로 독립적으로 control하도록 할 수도 있고, Master에 한개의 CS를 모든 Slave에서 공유하면서, 한 Slave의 MISO를 다음 Slave의 MOSI로 연결하여 daisy-chain을 구성하여 여러개의 Slave를 연결하기도 한다.

http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus


I2C- Inter Integrated Circuit
I2C는 2개의 선만을 사용하며 이는 각각 data와 clk에 해당한다. clk이 있으므로 Sync.이며 data를 위한 1라인만 사용하므로 TX/RX를 1선으로 처리해야 하므로 half duplex전송만 가능하다. I2C버스에서는 여러개의 Master와 Slave 장치가 연결될 수 있다. half duplex 특성 상 TX/RX가 동시에 발생할 수 없기 때문에 I2C는 Master가 모든 통신을 시작하며 Slave 장치는 여기에 응답만 가능하다. 이와 같은 통신 특징은 USB에서도 찾을 수 있다. (하지만 USB는 다중 Master를 지원하지 않는데 반하여 I2C는 다중 Master를 지원한다) I2C는 여러개의 Master를 허용하므로 이들이 동시에 메세지를 보내기 시작할 경우 bus는 0을 보낸쪽이 차지하게 되며 1을 보낸 쪽은 전송을 중단한다. 동일한 방법이 CAN bus에서도 사용되나 CAN의 경우 모든 장치가 Master로써 동작한다.(CAN에서는 모든 장치에서 Tx 시작이 가능하므로 Master/Slave를 굳이 구별하지 않는다.) 또한 CAN은 CLK이 없는 Asyc. 통신인 반면 I2C는 CLK을 사용한다. I2C에서는 다중 Master를 지원하지만 일반적으로 1개의 Master를 사용하여 시스템을 구현하는 경우가 많다. I2C는 표준 모드에서 100kbps, 고속 모드에서 400kbps로 동작한다. I2C는 SPI에서와 같은 CS가 존재하지 않으므로 각 장치마다 7bit address를 부여하여 이를 사용하여 target장치를 지정한다.

USB
USB장치도 I2C와 같이 Master(USB에서는 Host라는 용어를 사용)만이 트랜잭션을 시작할 수 있으며 Slave(USB에서는 device라는 용어를 사용)는 여기에 응답만 가능하다. 하지만 USB는 clk을 위한 선이 별도로 없다는 점에서 I2C와 다르게 Asyn. 통신이며 다중 Master(Host)도 허용되지 않는다. USB는 Frame이란 개념을 도입하여 한 Frame안에 여러 슬레이브 장치와 Master간의 통신이 포함될 수 있다. 하지만, Slave간의 통신은 불가능하며 Frame이 주기적으로 보내지지만 CLK이 따로 존재하지는 않기 때문에 Sync.통신은 아니다. 따라서 USB전송모드중 한가지인 isochronous를 사용하여 audio데이터를 전송할 경우, buffer가 충분히 크지 않다면 clock drift등으로 인한 buffer overrun이나 underrun이 발생 할 수 있다.

UART가 외부 전송을 위해 RS-232C나 LIN등을 사용하듯이 USB는 처음부터 외부 전송을 목적으로 만들어졌다. 하지만 최근에는 내부 데이터 버스로도 사용되고 있으며 , 이를 위해서 HSIC라는 I/F가 정의되었다.  HSIC는 USB의 sub spec.으로 high speed 전송만 지원하고 전송 거리가 10cm등으로 제약되어 있다.

I2S
I2S는 오디오 신호 전송용 serial통신으로 TX, RX, CLK, Frame Sync. 4개의 선으로 이루어져 있다. I2S를 통해서 다양한 형식의 PCM 오디오 데이터가 전송될 수 있다. 시스템에서 오디오는 보통 한방향으로만 전송되는 경우가 많으므로 TX/RX 중 하나만 사용하여 3개의 선만 사용하는 경우가 많다.

CAN
CAN은 SWCAN과 DWCAN이 존재한다. SWCAN의 경우 low speed(33.3KBit/s ~ ) 전송용으로 사용되며 1 wire통신이다. DWCAN의 경우에는 고속 전송용으로(~1MBit/s) 사용되며 이를 위해 2 -wire를 사용하며, 두 선은 각각 +- 만 변경된 동일한 신호를 가진다. CAN bus에는 여러개의 모듈이 연결되고 Master/Slave 개념 없이 서로 동등하게 통신이 이루어진다. 이를 위해서 I2C에서 사용한 것과 같은 arbitration란 개념이 필요하다. 즉 두 개 이상의 모듈이 동시에 메세지를 보내기 시작할 경우 메세지 ID가 작은 값을 가진 메세지가 bus를 차지하게 된다. 즉 0과 1이 동시에 bus에 실리면 bus에는 0이 실리게 되고 1을 전송하는 모듈은 전송을 중단하여야 한다. 하지만 I2C와 다르게 모든 장치가 메세지를 보낼 수 있으며 별도의 CLK라이을 사용하지 않는 ASync. 통신이다.

MOST50
차량용 멀티미디어 데이터 전송용 버스로 MOST25/150에서는 광통신을 사용하지만 MOST50에서는 wire를 사용한다. MOST50의 경우 48kHz마다 1 frame - 128 byte데이터가 MOST ring을 통해 전송된다. 이와 같은 frame은 Timing Master기능이 있는 특정 모듈이 만들어 보내며, 차례로 MOST ring에 포함된 모든 장치를 지나가게 된다. 각 장치는 해당 frame의 빈곳에 자신의 데이터를 넣어서 다음 장치로 재전송하게 된다. MOST ring에는 Timing Master이외에 Network Master, Connection Master, Power Master등 다른 Master기능을 가진 장치가 존재한다. 하지만 USB나 I2C와 다르게 Master가능을 가지지 않는 장치들 사이에도 서로 통신이 가능하며 Master의 도움없이 메세지 전송을 시작할 수 있다. 128byte의 MOST frame은 크게 세 부분으로 나뉘는데 각각 control data, Stream data, Packet data 영역이 된다. Control data영역으로 일반적인 용도의 commend나 메세지를 정의해 서로 주고 받을 수 있으며, Packet data영역은 주로 대용량 데이터 전송에 사용된다. 이 영역을 통하여 TCP/IP 데이터등을 전송할 수도 있다. Stream data영역은 DVD나 CD데이터와 같이 Sync.데이터 전송을 위해 사용하며, 사용 전 Connection Master를 통해 Stream data 영역안의 특정 위치를 해당 용도로 미리 할당받도록 되어 있다. 따라서 이후 아무리 다른 영역의 bandwith가 부족해 져도, 미리 할당받은 영역을 통해서 Sync.한 데이터 전송이 가능하다. 하지만, 이 영역은 특성상 에러가 발생하여도 재전송을 할 수는 없다. 기본적으로 MOST ring은 Timing Master가 만들어내는 clk을 모든 장치가 공유하여 사용하므로 Sync.전송이 가능하며 이로 인하여 audio/video등 multi-media데이터 전송시 clock drift문제등을 걱정할 필요가 없다.