한번에 한 바이트 또는 그 이상의 데이터를 한꺼번에 주고 받는 병렬 통신과 달리 직렬 통신은 데이터를 한 비트씩 순차적으로 주고 받는 통신 방법이다. 병렬 통신과 비교할 때 직렬 통신은 상대적으로 속도는 느리지만 통신에 필요한 선의 수가 적어서 구조가 단순하다는 장점을 가지고 있다. 두세 가닥의 선만으로 양방향 통신이 가능하므로 직렬 통신을 사용하는 IC는 병렬 통신을 사용하는 IC에 비해 핀의 수가 적다. 이런 이유로 DAC, ADC, EEPROM 등의 매우 다양한 종류의 장치들이 직렬 통신을 사용하여 마이크로프로세서와 데이터를 주고 받는다. 또한 대부분의 마이크로컨트롤러는 두 가지 이상의 직렬 통신 인터페이스를 가지고 있다.

 직렬 통신은 데이터를 한 비트씩 순차적으로 보내기 때문에 어느 시점부터 어느 시점까지가 한 비트인지 수신자가 정확하게 알아낼 방법이 필요하다. 아래 그림을 보자.


 
 신호의 상태를 어떤 시점에서 검사하느냐에 따라 동일한 신호가 여러 다른 값으로 해석될 수 있다. 송신측에서 보낸 데이터를 수신한 쪽에서도 같은 값으로 인식하려면 송신자가 데이터를 보낼 때 사용한 시간 정보를 수신자도 알아야 한다. , 송신자와 수신자는 서로 동기를 맞추어야 한다. 수신자가 송신자와 상호 동기를 맞추기 위한 한가지 방법은 동기를 위한 클럭 신호를 추가로 사용하는 것이다. 이런 용도의 클럭 신호 사용 여부에 따라서 직렬 통신을 크게 동기 (synchronous) 통신과 비동기 (asynchronous) 통신으로 구분할 수 있다.



동기 (Synchronous) 통신과 비동기 (Asynchronous) 통신


 동기 통신은 데이터 전송을 위한 선 외에 송신자와 수신자의 동기를 위한 별도의 클럭 신호를 사용하는 통신 방법이다. 동기 통신에서 송신자와 수신자는 서로 공유하는 클럭 신호에 맞추어 데이터를 주고 받는다. 만일 송신자가 클럭 신호의 하강 에지 (falling edge)마다 한 비트씩의 데이터를 내보낸다면, 하강 에지에서 다음 하강 에지까지가 한 비트에 해당하므로 수신자는 데이터가 변하지 않고 안정된 값을 유지하는 구간, 예를 들어 상승 에지에서 값을 읽어가면 된다.

 
 동기를 위한 클럭 신호에 맞추어 서로 데이터를 교환하기 때문에 통신에 참여하고 있는 양측은 정확한 통신 속도에 대해 미리 약속할 필요가 없다. 클럭 신호가 데이터 전송 시점을 알려주기 때문이다. 하지만 클럭 신호의 어떤 시점을 기준으로 송신자가 데이터를 보내는지, 즉 수신자는 클럭 신호의 어떤 에지에서 데이터를 읽어야 하는지에 대해서는 상호간의 약속이 필요하다. 또한 정확한 통신 속도에 대해서는 미리 약속할 필요 없지만 최고 속도에 대한 제한은 있다. 너무 빠른 속도로 데이터를 보내면 수신자가 이를 제대로 수신할 수 없기 때문이다. 나중에 설명할 SPI I2C 프로토콜은 임베디드 시스템에서 가장 많이 사용되고 있는 동기 통신 규격이다.


 반면에 비동기 통신은 동기를 맞추기 위한 별도의 클럭 신호 없이 데이터를 주고 받는 방법이다. 클럭 신호가 없기 때문에 송신자는 한 바이트의 데이터를 전송하기 직전에 통신의 시작을 알리는 시작 비트 (start bit)를 먼저 보내 데이터의 전송이 시작된다는 것을 수신자에게 알린다. 시작 비트를 보낸 다음부터 데이터를 한 비트씩 보내고 마지막에는 통신의 끝을 알리는 정지 비트 (stop bit)를 보내 통신이 끝났음을 알린다. 시작 비트는 논리 ‘0’이며 정지 비트는 논리 ‘1’이다.


 정지 비트가 논리 ‘1’이므로 데이터 전송이 없는 상태에서 통신 선로는 논리 ‘1’을 유지하고 있다. 그러므로 통신 선로의 상태가 논리 ‘1’을 유지하고 있다가 논리 ‘0’으로 바뀌면 수신자는 이것으로부터 새로운 데이터의 전송이 시작됨을 인식한다.


 이와 같이 데이터를 전송할 때마다 시작과 끝을 알리는 시작 비트와 정지 비트를 추가로 보내기 때문에 동기용 클럭 없이도 데이터의 송수신이 가능하다. 하지만 이 경우에는 서로 정확한 통신 속도를 약속하고 있어야 한다. 통신의 시작을 뜻하는 시작 비트를 받으면 수신자는 이 때부터 미리 약속한 통신 속도에 맞추어 데이터를 한 비트씩 읽어 들이기 때문이다. 직렬 통신에서의 통신 속도는 보통 bps (bits per second)라는 단위로 표현하는데 이 단위는 초당 전송되는 비트 수를 나타낸다. bps의 속도로 통신할 것인가가 정해지면 한 비트의 시간 폭이 결정된다. 통신 속도를 알고 있어야만 시작 비트를 받은 수신자가 그 이후 데이터를 한 비트씩 읽어 들이는 속도를 결정할 수 있다. PC의 직렬 포트에 사용되는 RS-232 표준은 비동기 통신 프로토콜의 대표적인 예다.


 동기 통신과 비동기 통신은 각각 장단점을 가지고 있다. 동기 통신과 달리 비동기 통신은 클럭 신호를 사용하지 않기 때문에 통신에 필요한 선의 수가 더 적다. 송신용 선과 수신용 선 두 가닥이 있으면 두 주체가 동시에 데이터를 주고 받는 양방향 통신, 즉 전이중 (full duplex) 통신이 가능하다. 반면에 통신 속도 측면에서는 동기 통신이 더 유리하다. 동기 통신에서는 동기를 위한 별도의 클럭 신호가 있으므로 데이터 길이의 제한 없이 한 바이트 이상의 데이터를 끊김 없이 연속해서 보낼 수 있다. 하지만 비동기 통신에서는 시작 비트와 정지 비트가 추가로 필요하므로 데이터만 연속해서 보낼 수 없다. 한 바이트의 데이터를 전송하기 위해서는 시작 비트와 정지 비트를 포함해서 적어도 10 비트를 전송해야 하므로 상대적으로 효율이 떨어진다.


 이런 점 이외에도 동기 통신과 비동기 통신에는 또 다른 큰 차이가 있다. 비동기 통신을 사용할 때에는 통신에 참여하는 두 주체가 서로 대등한 관계에서 일대일 통신을 한다. 이런 구조에서는 양쪽 모두 원하는 때에 언제든지 데이터를 보낼 수 있다. 반면에 동기 통신에서는 두 주체 사이에 주종 관계가 있어 한쪽이 통신의 주도권을 가지는 매스터 (master), 다른 쪽은 슬레이브 (slave)로 동작한다. 매스터가 통신에 필요한 클럭을 출력하며 슬레이브는 매스터가 출력하는 클럭 신호에만 반응할 수 있다. 따라서 데이터의 전송 방향에 상관없이 항상 매스터가 통신을 주도한다. 마이크로프로세서와 여러 주변 장치 (peripheral) 사이의 통신에는 이러한 매스터-슬레이브 기반의 동기 통신이 많이 사용되는데 이 때 당연히 프로세서는 매스터로, 주변 장치는 슬레이브로 동작하게 된다


 직렬 통신은 프로토콜이 다양하기 때문에 대부분의 마이크로컨트롤러는 두 가지 이상의 직렬 통신 인터페이스를 지원한다. 그 중에서도 UART, I2C, SPI는 가장 자주 사용되는 대표적인 예라고 할 수 있다.

'OpenSTUDY > AVR' 카테고리의 다른 글

I2C  (0) 2011.10.15
UART  (0) 2011.10.15
USART - 아스키 & 헥사  (0) 2011.10.09
간단 USART0 사용 (not interrupt)  (0) 2011.10.07
USART  (0) 2011.10.07

+ Recent posts