Universal

 

UART 시스템은 과거로 거슬러 올라가 1840년대 최초의 전신 시스템에서 부터 시작되었다고 볼 수 있습니다.

Morse 코드 신호는 송신기에서 수신기로 전류를 통해 흘러가지만 보통 시각적으로 보기 좋게 하기 위해 종이에 수신된 메시지를 찍도록 하였습니다.

전류가 흐르면 '점'을 찍도록 하고, 전류가 흐르지 않으면 '공백'으로 처리 되었습니다.

 

 

컴퓨터에서는 전류를 감지하는 방법에서 전압을 측정하는 방식으로 바뀌었습니다. RS-232 표준은 Logic high(negative voltage) 가 '점'으로 표시되는 것이며, Logic Low(positive voltage) 가 공백으로 표시되는 것이라 보면 될 것입니다.

하지만 보통의 CPU는 negative voltage를 사용하기 어렵고 전압 레벨도 다르기 때문에, CPU 자체적인 UART 통신은 TTL(the transistor logic) 신호를 사용합니다. TTL 레벨에서는 3.3V 가 '점'으로 표시되며 0V는 '공백'으로 표시됩니다.

이처럼 트랜지스터의 사용으로 쉽게 만들 수 있는 시스템이라 하여 Universal 이라는 이름이 붙여진 것이라 볼 수 있습니다.

 

 

Asynchronous

 

이제는 비동기(Asynchronous)가 의미하는 바를 살펴 봅시다.

송신자가 메시지를 전송하려고 해도 수신자가 받을 준비가 되어 있지 않다면 아무 소용 없는 일 일 것입니다. 병렬 통신의 경우 한 순간에 하나의 글자가 만들어 질 수 있습니다. 하지만 직렬 통신(Serial Communication)의 경우에는 하나의 글자가 만들어 지는데 시간이 걸립니다. 그렇기 때문에 송신자가 글자를 보내면서 데이터를 보내고 있다는 신호를 지속적으로 주게 됩니다. 이것이 동기 통신(Synchronous Communication)입니다. 하지만 동기 통신은 데이터 라인 말고도 동기를 위한 신호선이 추가로 필요합니다. 신호선 하나 추가하는 것이 의외로 복잡한 일일 수 있습니다.

송신자와 수신자가 동일한 시계를 가지고 있다면 어떨까요?

예를 들어 내가 11시 30분부터 10초 단위로 한글자씩 보낼 것이니 잘 받아라 라는 프로토콜(약속) 을 정해 놓고 10초 단위로 한 글자씩 받으면 신호선을 추가하지 않고도 보낼 수 있지 않을까요?

이것이 바로 비동기 통신(Asynchronous Communication) 입니다. UART 에서는 서로 Baud Rate를 정해 놓고 통신을 하기 때문에 동일한 시계를 사용한다고 볼 수 있겠죠.

Baud Rate에 오차가 있으면 어떻게 될까요?

 

 

위 그림에서 보듯이 시간의 오차가 커질 수록 데이터의 오차 확률도 높아진 다는 것을 알 수 있습니다. 위 그림에서 흰색 점이 통신의 확인 시점이라고 보시면 되는데요 5~6% 오차가 발생하는 시점부터 x 에러가 발생하는 것을 확인할 수 있습니다. Baud Rate라고 하는 시간을 정확하게 맞춰야 하는 이유겠죠

 

 

Receiver-Transmitter

 

UART는 하나의 장치에 송신기와 수신기를 붙여 놓은 것이라 볼 수 있습니다. 예전에 Morse Code를 보내는 장치는 송신기에서 데이터를 보내고 수신기에서는 데이터를 받는 것이었습니다.

이러한 장치는 단방향 통신밖에 할수가 없습니다. 그럼 양방향 통신을 하기 위해서는 어떻게 해야 할까요? 하나의 장치만 추가하면 되겠죠?

그래서 송신기와 수신기를 붙여 놓으면 양방향 통신을 할 수 있는 것입니다.

그렇다면 프로토콜을 한번 볼까요?

 

 

처음 Start bit가 있고 마지막에 Stop bit가 있습니다. High로 유지되다가 데이터가 송수신 시작 되는 시점에 Low(Start bit) 가 되고 8비트 데이터를 보낸 후에 Parity 비트를 옵션으로 넣을 수 있습니다.

마지막에는 High(Stop bit) 가 됩니다. 여기에서 Stop bit는 그 다음 데이터와의 시간 간격을 위해서 1~2bit로 설정할 수 있습니다.

그래서 8비트 데이터를 보낸다고 했을 때 최소 10bit 에서 12bit까지 시간을 소모할 수 있습니다. 여기에서 시간이라 표시한 의미는 알겠죠? Baud Rate 에 따라서 위의 그림에서 하나의 칸의 시간을 결정할 수 있는 것입니다. 즉 9600bps 라고 하는 것은 1초에 9600칸 또는 bit를 보낼 수 있다는 것을 의미합니다.

 

출처 : http://www.mcublog.co.kr/1841


'Hardware' 카테고리의 다른 글

SPI(Serial Peripheral Interface Bus)  (0) 2015.08.04
I2C(Inter Integrated Circuit)  (0) 2015.08.04
How to Build an 8-Bit Computer by spel3o  (0) 2015.03.14
led는 안다리가 짧은게 vcc  (0) 2015.01.03
간단한 레귤레이터 만들기 11V->5V  (0) 2014.12.30

+ Recent posts