Embedded World

UART 통신 본문

Embedded Systems

UART 통신

jh-rrr 2025. 6. 7. 14:43

서론

임베디드 관련 프로젝트를 하면서 UART 통신을 사용하게 되었는데, 까먹은 개념적 부분이 많아 이를 복습하였다. 책 "STM32F 시리즈를 이용한 ARM Cortex-M3/M4 구조와 응용"을 참고하였다.

 

본론

1. 직렬통신 및 UART

1.1 직렬 통신(Serial communication)

1.1.1 직렬(Serial) 통신과 병렬(Parallel) 통신

컴퓨터와 마이크로프로세서, 그리고 IC 칩들 사이에 데이터를 서로 주고 받는 것을 데이터 통신이라고 한다. 이런 데이터 통신 방식은 여러 가지가 있을 수 있으나, 통신에 사용되는 channel 수를 기준으로 구분하면 직렬 통신과 병렬 통신으로 구분할 수 있다.

https://images.app.goo.gl/gnALUw7ft1jgm3tC7

직렬 통신은 클럭당 1비트의 데이터를 전송하고, 병렬 통신은 클럭당 여러 비트를 전송하는 방식이다. 병렬 통신은 한번에 보낼 수 있는 데이터의 수가 더 많기 때문에 데이터를 전송할 수 있는 속도가 직렬통신에 비해 개념적으로 더 빠르다. 하지만 최근에는 직렬 통신이 병렬 통신보다 훨씬 빠른 클럭의 사용이 가능해져, 오히려 직렬 통신의 속도가 빨라지게 되는 경우도 발생하게 되었다. 또한, 병렬 통신은 직렬 통신에 비해 마이크로프로세서에 내장되는 pin이 더 많이 할당되게 된다. 이는 chip 크기의 증가와 가격의 증가로 이어지기 때문에, 많은 마이크로프로세서나 IC 칩은 외부와의 데이터 통신을 위해 직렬 통신을 더 많이 이용한다.

 

* 8비트 병렬 통신의 경우 통신에 필요한 라인 수는 8개 또는 그 이상이다. 반면, 직렬 통신에 필요한 라인의 수는 데이터 선과 접지 선을 포함하여 일반적으로 2~3개이다.

* 직렬 통신에서 고주파의 클럭 사용이 가능한 이유는, 통신에 필요한 라인의 갯수가 병렬 통신보다 훨씬 적으므로 외부 노이즈의 차폐가 용이하고 crosstalk 등 전기적 특성이 유리하기 때문이다.

 

직렬 통신의 예로는 다음이 있다.

  • 모스 부호를 사용하는 통신(전보)
  • RS-232C(UART), RS-422, RS-485
  • USB, TCP/IP(인터넷), CAN(자동차)
  • I2C, SPI
  • PCI Express(GPU)

1.1.2 단방향 통신과 양방향 통신

통신은 데이터의 흐름 방법에 따라 단방향(Simplex) 통신과 양방향(Duplex) 통신으로 나눌 수 있다. 양방향 통신은 다시 반이중(Half-duplex) 방식과 전이중(Full-duplex) 방식으로 나눌 수 있다.

단방향 통신은 데이터가 한 방향으로만 전송되는 것이며, 예로는 라디오 방송, TV 방송 등이 있다.

반이중 통신은 데이터가 양 방향으로 전송 가능하지만, 동시에 양방향 통신은 불가능한 통신으로, 예로는 워키토키, RS-485 통신이 있다.

그리고 전이중 방식의 통신은 데이터를 동시에 양방향으로 전송 가능한 통신으로, 전화, RS-232C 등이 있다.

 

 

1.2 UART / USART

두 장치(PC, 마이크로프로세서, 각종 기기)가 멀리 떨어져 있을 때 데이터를 직렬로 통신하는 경우가 많다. 그런데 마이크로프로세서 내에서 데이터는 8비트, 16비트, 32비트 등의 단위로 처리된다. 즉, 마이크로프로세서 내에서 데이터 버스는 병렬 통신방식을 사용하므로 직렬 통신 포트를 이용한 데이터 송신 시에는 병렬을 직렬로, 수신시에는 직렬을 병렬로 변환해주어야 한다.

 

UART(Universial Asyncronous Receiver/Transmitter : 범용 비동기 송수신기)는 데이터를 직렬로, 또는 병렬로 변환시켜주는 물리적 장치로써 PC, 마이크로프로세서와 주변장치들 간에 직렬(Serial) 포트를 이용한 통신에 주로 사용된다. 요즘 대부분의 MCU는 UART를 내장하는 경우가 많다.

 

UART는 기본적으로 비동기 통신 방식을 사용한다. 그런데 최근의 UART는 비동기뿐만 아니라 동기 통신도 가능한 것들이 많아졌는데 이러한 장치를 USART라고 부른다.

 

* 비동기 통신: 두 장치 사이에 데이터가 전송될 때 수신부의 클럭이 송신부의 클럭에 동기되지 않는 방식이다.

* 동기 통신: 두 장치 사이에 데이터가 전송될 때 수신부의 클럭이 송신부 클럭에 동기되는 방식. 동기화를 위해 별도의 클럭 단자를 이용해서 송신부의 클럭을 수신부에 공급하는 방법을 많이 사용한다.

1.2.1 UART의 일반적인 구조

(1) 개요

이미지 출처: 책 "STM32F 시리즈를 이용한 ARM Cortex-M3/M4 구조와 응용"

UART를 이용한 데이터 송수신은 다음과 같이 이루어진다.

  1. 송신 : Transmit Data Register는 전송할 데이터를 데이터 버스를 통해 받아 저장한다.이 데이터는 Trnasmit Shift Register로 전달된다. 여기까지 데이터는 워드 또는 byte 단위로 전달된다. Transmit Shift Register는 데이터를 bit 단위로 TX 단자를 통해 외부로 내보낸다.
  2. 수신 : 수신될 데이터는 외부에서 RX 단자를 통해 Receive Shift Register로 들어오게 된다. Receive Shift Register는 비트 단위로 수신된 데이터를 모아서 워드 또는 byte 단위로 만들고, Receive Data Register로 전달한다. Receive Data Register에 저장된 데이터는 Data Bus를 통해 칩의 내부로 전달된다.

Transmit / Receive Control 은 송신, 수신 과정을 제어해 주는 역할을 하며 Clock Control 은 송신, 수신에 필요한 클럭을 만들어 내거나 제어하는 역할을 한다.

 

(2) Data Frame 구성

UART의 데이터 송수신은 Frame 단위로 이루어진다.

1 Frame의 데이터는 일반적으로 다음과 같이 구성된다.

https://images.app.goo.gl/ZGPxGbWnYVd8g5cm8

start bit : UART 전송을 위한 물리적인 와이어는 데이터를 전송하지 않을 때는 고전압(Hgih Voltage) 레벨로 유지된다. 데이터 전송이 시작되면, 송신 UART는 와이어 전압 레벨을 저전압(Low Voltage) 레벨로 한 클럭 사이클 동안 변경한다. 수신 UART는 와이어가 저전압 레벨로 변경된 것을 감지하면, 설정한 Baud Rate 주파수로 RX 핀으로 흘러 들어오는 일련의 데이터 비트를 읽기 시작한다.

 

data bits : 실질적인 데이터. 일반적으로 데이터는 최하위 비트(LSB) 부터 먼저 전송한다.

 

parity bit : UART 데이터 패킷은 옵션으로 parity bit를 가질 수 있다. 이를 사용해 수신 UART에서 송신 UART가 전송한 데이터 프레임이 전송과정에 변경되었는지 확인할 수 있다. 데이터 비트는  물리적인 와이어를 통해 전송되기 때문에 전자기장, 송수신 UART 인터페이스 장치 간에 일치하지 않는 Baud Rate 등에 의해 변경될 수 있다는 문제가 있다. 만약 data bits의 값의 합이 짝수라면 parity bit를 0으로, data bits의 합이 홀수라면 parity bit를 1로 설정한다면, 데이터 전송의 오류를 쉽게 파악할 수 있게된다. 이런 목적을 위해 parity bit는 사용된다.

 

stop bits : 데이터 패킷의 끝을 알리기 위해 송신 UART는 1~2 bit 크기의 stop bit를 가진다. stop bit는 물리적인 와이어를 저전압 레벨에서 고전압 레벨로 변경하는 방식으로 수신 UART에 알려진다.

 

(3) 데이터 전송을 위한 클럭의 조건

비동기 통신에서는 송신부와 수신부의 클럭이 동기되지 않으므로 송신부와 수신부는 서로 별개의 클럭으로 동작하게 된다. 하지만 실제 구현 시에는 1 프레임 송수신시에 양쪽 클럭의 주파수 차이가 10% 이내여야 한다.

 

(4) 보 레이트(Baud Rate)

보 레이트는 데이터의 전송 속도를 나타내는 말이다. 1baud는 1초에 전자적인 상태가 1번 변한다는 의미이다. 다시말해, 1baud = 1bit/sec 의 의미이다. 최근에는 전송 속도를 나타내는 더 정확한 용어인 bps(bits per second)를 사용한다.

 

 

 

Reference

책 "STM32F 시리즈를 이용한 ARM Cortex-M3/M4 구조와 응용"

UART의 다양한 비트 설명 : https://blog.naver.com/techref/222305240651

 

'Embedded Systems' 카테고리의 다른 글

Timer를 이용한 입출력 제어  (0) 2025.06.10
USB 통신  (0) 2025.06.07