연구노트/통신 설계

[UART] UART 통신은 어떻게 동작하는 걸까?

ipmes 2026. 5. 29. 10:00

 

 


UART 통신은 어떻게 동작하는 걸까?


 


 

 

1부에서 UART가 무엇인지 그리고 우리 주변 어디에 쓰이는지 간단하게 알아보았습니다.

그렇다면 이번 글에서는 어떻게 통신을 주고 받는지 원리를 알아보도록 하겠습니다.

 

UART가 실제로 데이터를 전송할 때,

그 데이터는 그냥 선 위에 흘려보내지는 것이 아닌 정해진 순서대로 포장되어 전달됩니다.

마치 택배를 보낼 때 상자에 담고, 송장을 붙이고, 테이프로 봉하는 것처럼 UART도 데이터를 일정한 규칙으로 포장합니다.

 

이번 글에서는 기본 구조와 데이터 프레임 구조 그리고 BaudRate, 이 세 가지를 중심으로 UART의 동작 원리를 알아보도록 하겠습니다.

 

 

UART의 기본 구조와 동작 방식은?

 

 

UART 통신은 매우 단순한 구조를 가집니다.

기본적으로 송신을 담당하는 TX(Transmit)수신을 담당하는 RX(Receive),

그리고 기준 전위를 맞추기 위한 GND 세 가지 연결만으로 통신이 가능합니다.

 

송신 장치의 TX 핀은 수신 장치의 RX 핀으로 연결되며, 반대로 수신 장치의 TX 핀은 송신 장치의 RX 핀으로 연결되는 크로스 구조를 가집니다.

이 때 GND를 반드시 공통으로 연결해야 합니다. GND가 빠지면 두 장치가 서로 다른 전압 기준을 갖게 되어 HIGH/LOW 신호를 올바르게 인식하지 못합니다.

 

이렇게 단순한 연결 구조에도 불구하고 UART는 안정적인 통신이 가능한데, 그 이유는 데이터가 일정한 규칙을 가진 프레임 구조로 전송되기 때문입니다.

데이터는 Start Bit로 시작하여 실제 데이터 비트, 필요에 따라 Parity Bit, 그리고 Stop Bit 순서로 구성되어 수신 측은 이 구조를 기반으로 데이터를 구분하고 해석하게 됩니다.

 

즉, 단순히 HIGH와 LOW를 주고받는 것이 아니라, 의미를 가진 데이터 흐름이 만들어지고 있는 것 입니다.

 

 

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

  • 병렬(Parallel) 통신여러 비트를 동시에, 여러 선에 실어 보내는 방식입니다.

8비트 데이터를 보낸다면 선 8가닥을 동시에 사용해 한 번에 전송합니다.

한 번에 많은 데이터를 보낼 수 있어 속도 면에서는 유리하지만, 선이 많아지고 길어지거나 또는 길이 차이 등으로 인해 각 선 사이의 타이밍 오차(스큐, Skew)가 발생해 오히려 신뢰성이 떨어집니다.

 

  • 직렬(Serial) 통신테이터를 한 비트씩 순차로 전송하는 방식입니다.

선이 2가닥(TX, RX)으로 배선이 단순하고, 선이 적으며 선이 길어져도 HIGH와 LOW 단 두가지만 판단하기에 노이즈 대응이 상대적으로 쉽습니다.

 
구분
병렬 통신
직렬 통신
전송 방식
여러 비트 동시 전송
1비트씩 순차 전송
필요한 선 수
많음 (8~16가닥)
적음 (2가닥)
장거리 적합성
낮음 (스큐 문제)
높음
대표 예시
구형 프린터 포트
USB, HDMI, DP

 

 

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

 

  • 동기 통신은 CLK(클럭) 선이 별도로 존재합니다.

송신 측이 데이터를 보낼 때 지금 이 비트를 읽어라는 타이밍 신호를 클럭 선으로 함께 전달합니다.

수신 측은 클럭이 올라가는 순간에 맞춰 데이터를 샘플링합니다.

SPI, I2C가 이 방식에 해당합니다.

 

  • 비동기 통신은 클럭 선이 없어 송수신 측이 별도의 클럭 신호를 공유하지 않는다는 의미입니다.

대신 통신 전에 1초에 9600번 비트를 주고받자는 속도(BaudRate)를 미리 약속합니다.

수신 측은 데이터가 들어오기 시작하는 순간(Start Bit)을 감지하고, 약속한 속도로 비트를 읽어 나갑니다.

UART가 이 방식입니다.

 

클럭 선이 없다는 것은 배선이 단순해진다는 장점이지만, 반대로 양쪽 속도가 조금이라도 다르면 데이터가 어긋난다는 단점이기도 합니다.

UART에서 BaudRate 설정이 그토록 강조되는 이유가 여기에 있습니다.

 

 

UART 데이터 프레임 구조

 

 

UART는 데이터를 그냥보내지 않고 정해진 프레임(Frame) 형식으로 포장해서 전송합니다.

수신 측은 이 프레임 규칙을 알기 때문에 데이터의 시작과 끝, 오류 여부를 스스로 판단할 수 있습니다.

 

UART 데이터 프레임은 일반적으로 다음과 같은 순서를 가집니다.

  1. Start Bit (시작 비트)
  2. Data Bit (데이터 비트, 보통 8bit)
  3. Parity Bit (패리티 비트, 선택)
  4. Stop Bit (정지 비트)

 

1. Start Bit

평소 UART 데이터 선은 HIGH 상태를 유지합니다.

송신 측이 데이터를 보내려면 먼저 선을 LOW로 끌어내리는데, 이것이 Start Bit입니다.

수신 측은 선이 HIGH에서 LOW로 떨어지는 순간을 통해 데이터 전송이 시작되었음을 인식하여 약속한 BaudRate 속도로 비트를 읽기 시작합니다.

 

2. Data Bit

실제 전송하고자 하는 데이터가 담기는 프레임 구간입니다.

비트 수는 5, 6, 7, 8, 9비트 중 선택할 수 있으며, 현대 통신에서는 8비트(1바이트)가 사실상 표준입니다. 데이터는 최하위 비트(LSB, Least Significant Bit)부터 먼저 전송됩니다.

예를 들어 0x41('A')를 보낼 때는 이진수 01000001을 뒤집어 10000010 순서로 전송합니다.

 

3. Parity Bit

데이터를 전송하다 보면 노이즈 등으로 인해 0이 1로, 또는 1이 0으로 바뀌는 오류가 생길 수 있습니다.

패리티 비트는 이런 오류가 발생했는지 감지하기 위해 데이터 뒤에 붙이는 선택적 구간입니다.

패리티 비트에는 세 가지 옵션이 있습니다.

설정
설명
None
패리티 비트 없음. 가장 많이 사용
Even
데이터 비트 중 1의 개수가 짝수가 되도록 패리티 비트를 설정
Odd
데이터 비트 중 1의 개수가 홀수가 되도록 패리티 비트를 설정

 

단, 아래의 예제와 같이 2비트가 동시에 오류나면 검출하지 못한다는 한계가 있습니다.

구분
데이터
1의 개수
정상적인 송신 측의 데이터
1 0 1 1 0 0 1 0
4개
2개가 뒤집힌 상태로
수신 측이 받은 데이터
1 1 1 0 0 0 1 0
4개

 

 

4. Stop Bit

프레임의 끝을 알리는 신호로, 항상 HIGH입니다.

1비트 또는 2비트를 선택할 수 있으며, 일반적으로 1비트를 사용합니다.

Stop Bit 이후 다음 Start Bit가 올 때까지 선은 HIGH 상태를 유지합니다.

 

UART 설정을 표기할 때는 아래와 같은 약식 표현을 자주 씁니다.

  • 8N1: 8 Data Bits, No Parity, 1 Stop Bit (가장 일반적인 설정)
  • 8E2 : 8 Data Bits, Even Parity, 2 Stop Bits
  • 7O1 : 7 Data Bits, Odd Parity, 1 Stop Bit

 

아두이노 Serial.begin(9600)의 기본값은 8N1입니다.

 

 

BaudRate의 정의

 

BaudRate는 1초에 전송할 수 있는 심볼(Symbol)의 수를 의미합니다.

UART에서는 심볼 1개가 곧 비트 1개이므로, 초당 비트 수와 사실상 동일한 개념으로 이해해도 좋습니다.

 

여기서 중요한 점은, 송신 측과 수신 측의 BaudRate가 반드시 동일해야 한다는 것입니다.

클럭 선이 없는 UART의 특성상 수신 측은 오직 약속된 속도만을 믿고 비트를 읽기 때문입니다.

 

다시말해, 이 주기가 조금이라도 어긋나면 비트를 잘못 읽게 되므로 BaudRate는 단순한 속도 설정값이 아닙니다.

송신 측은 BaudRate에 맞춰 일정한 주기로 비트를 내보내고, 수신 측은 그 동일한 주기로 비트를 샘플링하기 때문입니다.

 

  • 예를 들어 송신 측이 9600 bps로 데이터를 보내는데 수신 측이 115200 bps로 읽으려 한다면, 수신 측은 훨씬 빠른 속도로 샘플링하게 되어 데이터가 완전히 뒤틀리게 됩니다.
  • 아두이노로 실험 중 시리얼 모니터에 알 수 없는 특수문자나 깨진 문자가 지속적으로 출력된다면, BaudRate 불일치를 가장 먼저 의심하는게 좋습니다.

 

 

마무리

 

지금까지 UART가 데이터를 어떤 구조로 포장하고, 어떤 방식으로 주고받는지 살펴봤습니다.

Start Bit 하나로 통신이 시작되고, 약속된 BaudRate로 비트를 하나씩 읽어나가는 구조는 생각보다 단순합니다.

선 두 가닥만 있으면 되고, 별도의 클럭 선도 필요 없으며, 사실상 모든 MCU에 기본으로 내장되어 있습니다.

그것이 UART가 등장한 이후 지금까지도 임베디드 세계의 기본 통신으로 살아남은 이유입니다.

 

다음 글에서는 이 구조가 실제 MCU 내부에서 어떻게 구현되는지, ATmega328P 데이터시트의 레지스터를 직접 펼쳐보며 확인해보겠습니다.

 


 



TEL (062-226-1777, 010-9891-7244), E-mail (ipmes@ipmes.co.kr)

임베디드 시스템 | PCB 설계 제작 | 펌웨어 개발 | 신호처리 | 응용프로그램

 

#IPMES, #아이피엠이에스, #연구노트, #임베디드, #PCB제작, #펌웨어개발,

#하드웨어개발, #소프트웨어개발, #회로설계,

#광주PCB, #광주시제품, #광주시제품개발, #광주OEM, #광주광역시PCB,

#광주임베디드, #광주음성처리, #광주신호처리, #광주광역시임베디드,

#광주회로설계, #광주아트웍, #PCB샘플링

#UART #UART통신 #시리얼통신 #직렬통신 #비동기통신

#UART구조 #UART통신원리 #StartBit #StopBit #ParityBit #BaudRate

#패리티비트 #보레이트