UART (Universal Asynchronous Receiver/Transmitter)

/ UART  |   RS232  |   RS485  |   I2C  |   SPI  |   1 Wire  |   Parallel

Main Picture ref) https://de.wikipedia.org/wiki/Universal_Asynchronous_Receiver_Transmitter

UART

     UART(Universal asynchronous receiver/transmitter)는 앞 페이지에서 이야기 한 것과 같이 범용 비동기 수신기/송신기로 Microcontroller에서 통신방법으로 널리 사용하는 중요한 기능 중의 하나이다. UART는 통신하고자하는 데이타를 직렬 형식으로 전환하여 상대방(수신측)에 보내고, 상대방으로부터 데이타를 받을 수 있도록 꾸며진 Microcontroller내에 설치된 하드웨어이다. UART 통신방법은 MCU(Microcontroller)-MCU, MCU-Device 사이에서 널리 사용하며, 신호를 보내기 위한 Tx, 신호를 받기 위한 Rx선을 사용하여 신호를 주고 받는다. Microcontroller의 경우 전압 대부분 0 V 또는 5 V를 사용하는 TTL(CMOS) 수준이며, Microcontroller와 연결 할 수 있는 소자에 따라 RS232 신호를 사용하는 경우도 있다.

PIC와 소자 또는 장치간 연결

     아래 그림에서 보여 주듯이 UART 신호를 낼 수 있는 Tx와 신호를 받을 수 있는 Rx기능을 가지고있는 PIC 간의 UART 연결 방법을 보여 주고 있다.


UART 연결도


     대부분의 PIC는 UART기능을 제공하고 있어 쉽게 두 소자간의 UART 연결이 가능하다. PIC16F18345는 PIN B7 (Pin 번호 10)이 Tx로 되어있으며(변경가능) PIN B5가 Rx로 되어있어 이 두 Pin을 사용하면 쉽게 UART 기능을 사용할 수 있다. 두 PIC (또는 다른 소자)사이의 UART 연결은 위의 그림과 같이 매우 단순하여 PIC-A의 Tx 핀을 PIC - B의 Rx Pin과, PIC-A의 Rx 핀을 PIC - B의 Tx Pin과 연결하면 모두 끝나게 된다. 나머지는 소프트웨어로 UART에 대한 설정 및 송수신에 대한 코딩이 필요하다.

Coding

     코딩은 크게 통신을 위한 UART 설정, 신호 쓰기, 신호 읽기등 크게 세가지로 나눌수 있다. PIC를 사용한 UART TTL/CMOS, RS232, 또는 RS485 통신 모두 UART라는 통신 방법을 사용하기때문에 모두 같은 설정을 사용한다.

 UART 설정 명령어: (CCS-C Manual 참고)

1. UART TTL, RS232, 또는 RS485를 사용하기 위한 기본 설정: 모두 동일 (RS485는 Rx, Tx 방향 전환이 필요)
     PIC를 이용하야 UART를 사용하기 위하여 데이타 전송속도(baud rate), 데이타 누락 확인을 위한 parity 설정, 송수신을 위한 Pin 지정은 반드시 필요하다. 이를 위하여 사용하는 명령어로 CCS-C에서는 #use rs232 ()을 사용하여 UART 활성화 및 UART 관련 기본 설정을 할 수 있다.

     #pin_select    U1TX = PIN_B7           //* 송신을 위한 PIN을 PIN B7으로 설정
     #pin_select    U1RX = PIN_B5           //* 수신을 위한 PIN을 PIN B5로 설정
     #use              rs232 (baud=19200, parity=N, xmit=PIN_B7, rcv=PIN_B5)     //* UART 사용 및 기본 설정

     - baud (bps):
          데이타 전송속도로서 초당 보낼 수 있는 bit 수이다(9600 인경우 초당 9600 bit의 데이타를 전송함).
          9600, 19200, 38400, 56000, 115200, ... 등이 있고 통신하려고하는 소자 또는 장치에서 반드시 일치하여야 함.
     - parity:
          데이타의 송수신 도중 누락여부를 판단하기 위하여 사용하며 Even, Odd, None이 있다.
     - xmit: 데이타를 송신 PIN 지정
     - rcv: 데이타를 수신 PIN 지정

2. 신호 쓰기:
     UART 초트를 통하여 데이타를 출력하기 위하여 printf (), putc () 함수를 시용한다. printf () 함수와 putc () 함수를 사용하여 문자열, 임의의 수 및 문자를 출력 할 수 있다

     printf ("AssistLab") ;                   //* 문자열 "AssistLab" 을 송신 포트를 통하여 출력
     printf ("Temp: %4.1f", temp1) ;   //* "Temp: "과 연이어 temp1에 있는 값을 송신포트로 출력

     putc ('C') ;                                  //* 문자 'C' 를 송신 포트를 통하여 출력


3. 신호 읽기

     rxd = getch () ;                          //* 수신측에서 받은 문자를 읽어서 rxd 변수에 할당


신호종류

     UART 신호 형식은 두 장치간에 사용하는 통신속도, 통신방법을 미리 정하고 시작하며, 사용하는 전압과 부호에 따라 아래 그림과 같이 TTL, RS232, RS485으로 나눌 수 있다.

아래 그림은 문자 '1'을 비동기 UART로 보낼때의 신호 흐름을 나타낸 그림이다.

Main Picture
UART 통신 방법에 따른 신호의 모양


     위의 그림에서 볼수 있듯이 UART는 크게 세 종류의 신호 흐름 형태로 나눌 수 있다.
- Microcontroller와 전자 소자 사이에서 주로 사용하는 Low 신호로 0 V를 High 신호로 5 V를 사용하는 경우(TTL/CMOS),
- PC 또는 측정 장비에서 주로사용하는 RS232통신과 같은 Low 신호로 +12 V를 High 신호로 -12 V를 사용하는 경우,
- 장거리 통신 및 하나의 장치에서 여러 장치를 연결하기 위한 RS482, RS422 통신과 같은 두 신호선의 전압 차이를 사용하는 방식이 있다.

UART 통신방법(TTL, RS232, RS485, RS422)에 따른 특성
SpecificationTTL/CMOSRS232RS485RS422
Input Range0V / 5V+12V / -12VA-BA-B, A-B
Signalsingle-endedsingle-endeddifferentialdifferential
Driver : Reciver1 : 11 : 11 : 321 : 10
Distance~ 3 m~ 15 m~ 1.2 km~ 1.2 km
Speed20 kbps20 kbps10 Mbps10 Mbps
Operation ModeFull DuplexFull DuplexHalf DuplexFull Duplex


참고:

     1. # UART 통신 이론
     2. Basics of UART Communication | UART Frame Structure | RS 232 Basics | Part1
     3. Relationship between UART and RS232/RS485/RS422
     4. A Hardware Communication Protocol Understanding UART
     5. RS232 / RS422 / RS485 정리
     6. Understanding UART (YouTube)