프레임과 비트 시간을 먼저 정합니다
비동기 UART(Universal Asynchronous Receiver/Transmitter)는 송신자와 수신자가 별도의 클록선을 공유하지 않는 직렬 통신 장치입니다. 여기서는 반전하지 않은 일반적인 논리 신호를 가정합니다. 대기 상태는 HIGH이고, 시작 비트의 LOW 전이가 새 프레임의 시간 기준이 됩니다. RS-232 전압 파형 등은 수신기 내부의 논리 극성과 구분해서 읽어야 합니다.
일반적인 이진 UART의 9600 baud는 초당 9600비트에 대응하므로 한 비트 시간은 1/9600 s ≈ 104.17 µs입니다. 8E1은 데이터 8비트, 짝수 패리티(even parity), 정지 1비트를 뜻합니다. 시작 비트까지 세면 1 + 8 + 1 + 1 = 11비트이고, 패리티가 없는 8N1은 10비트입니다. 이 글의 8은 전달할 데이터의 비트 수이지 특정 주변장치의 워드 길이 레지스터 값이 아닙니다.
예를 들어 0x55에는 1이 네 개 있으므로 짝수 패리티 비트는 0입니다. 8E1의 데이터 비율은 8/11 ≈ 72.7%, 8N1은 8/10 = 80%입니다. 이 값에는 메시지 헤더·체크섬·프레임 사이의 공백이 포함되지 않습니다. 실제 로그 처리량은 직렬 로그 시간 예산처럼 전송 바이트 수와 발생 주기를 함께 계산해야 합니다.
오버샘플링은 장치의 구현 조건입니다
수신기는 입력을 관찰하며 시작 비트를 판별하고, 자신의 시간 기준으로 데이터와 정지 비트를 읽습니다. 오버샘플링(oversampling)은 한 비트 시간보다 짧은 간격으로 입력을 관찰하는 방식입니다. 샘플을 여러 번 얻는 것과 그 샘플을 다수결로 판정하는 것은 서로 다른 설계 선택입니다.
STM32L4 USART 교육 자료의 3·7·8쪽에는 8배/16배 오버샘플링과 속도·클록 오차 내성의 차이, 프레임 형식이 설명되어 있습니다. 이는 해당 USART의 예입니다. 다른 UART도 반드시 16배로 샘플링하거나 특정 번호의 세 점을 투표한다고 일반화하지 않습니다. 중앙 한 점인지 여러 점인지, 시작 에지 뒤 첫 샘플의 위치가 어디인지 해당 IP의 설명서와 설정을 확인합니다.
같은 ST 자료는 패리티가 설정된 경우 패리티 비트를 워드 길이에 포함하는 레지스터 관례도 설명합니다. 따라서 일반 표기인 8E1을 특정 장치의 “8비트 워드 + 패리티” 설정으로 기계적으로 옮기면 안 됩니다. 실제 데이터 8비트가 전송되는지 프레임 형식과 레지스터 정의를 함께 대조합니다.
TX가 3% 빠르다는 값만으로 오류를 확정할 수는 없습니다
여기부터는 설명용 이상 모델입니다. RX의 비트 시간을 T, 두 장치가 정확히 함께 잡은 시작 시점을 t = 0으로 놓습니다. 프레임은 공백 없이 이어지는 8E1이고, 수신기는 정지 비트의 중앙 한 점만 읽는다고 가정합니다. 시작 검출 지연·샘플 양자화·지터·잡음은 이 계산에서 제외합니다.
RX 정지 비트 샘플: 10.5T
TX baud가 RX보다 3% 높으면: Ttx = T / 1.03
TX 정지 비트 시작: 10T / 1.03 ≈ 9.709T
TX 다음 시작 비트: 11T / 1.03 ≈ 10.680T
따라서 9.709T < 10.5T < 10.680T입니다. 이 모델의 정지 비트 샘플은 아직 HIGH 구간 안에 있습니다. “TX가 3% 빠르면 반드시 다음 시작 비트를 읽어 프레이밍 오류가 난다”는 결론은 이 조건에서 나오지 않습니다. 반대로 이 계산이 모든 UART에서 3% 오차를 허용한다는 보증도 아닙니다.

클록 오차는 두 장치의 상대 속도로 계산합니다. 같은 명목 baud에 대해 TX와 RX의 오차를 각각 eTX, eRX라 하면 비율은 (1 + eTX) / (1 + eRX)입니다. 서로 반대 부호의 오차는 상대 차이를 키울 수 있습니다. 실제 허용 범위는 시작 검출 위상, 프레임 길이, 샘플/투표 방식, 분주 오차와 입력 파형을 포함한 해당 장치의 조건으로 판단해야 합니다.
프레이밍 오류와 수신 버퍼 넘침을 구분합니다
프레이밍 오류(framing error)는 기대한 시점에 유효한 정지 비트를 보지 못했다는 뜻이지, baud 불일치만을 특정하는 진단은 아닙니다. 송수신 프레임 설정, 긴 LOW 상태인 break, 잡음과 신호 품질도 조사해야 합니다. 패리티 오류는 패리티 검사 결과이며, 수신 버퍼 넘침(overrun)은 데이터를 제때 꺼내지 못하는 등 수신 저장 경로의 문제입니다. 장치에 따라 여러 상태가 함께 나타날 수 있습니다.
PIC16F18126/46의 EUSART 문서 32.1.2.4절은 프레이밍 상태가 FIFO의 읽지 않은 맨 앞 문자에 대응하므로 데이터 레지스터를 읽기 전에 FERR를 확인하도록 설명합니다. 이는 구체적인 장치의 읽기 순서 예이지 모든 UART의 공통 API가 아닙니다. 오류 비트 이름, 데이터와의 대응 관계, 해제 순서는 사용하는 장치에서 따로 확인합니다.
입력 조건을 나누고 데이터와 상태를 함께 기록합니다
다음 표는 RTL·시뮬레이터 또는 장치 시험을 설계할 때의 확인 항목입니다. 이 글에서 실제 UART 하드웨어나 RTL 시험을 수행한 것은 아닙니다. 시험의 합격 조건은 해당 IP 명세에서 정하고, 계산 결과를 실측 결과로 대신하지 않습니다.
| 바꿀 조건 | 함께 남길 결과 |
|---|---|
| TX·RX baud 오차와 부호 | 양쪽 실제 주기, 상대 비율, 수신 바이트, 오류가 처음 나타나는 조건 |
| 8N1·8E1과 프레임 사이 공백 | 데이터/패리티/정지 비트 개수, 연속 프레임에서의 샘플 시각 |
| 짧은 시작 글리치·잡음 | 시작 검출 여부, 실제 샘플 위치, 데이터와 장치별 잡음 상태 |
| 정지 비트 LOW·break | 지속 시간, 프레이밍 상태, break 처리와 다음 정상 프레임의 복구 |
| 패리티 불일치·수신 읽기 지연 | 패리티 오류와 overrun을 각각 유발한 조건, 데이터 손실 및 복구 순서 |
시험 기록에는 IP/부품 버전, 클록원과 분주 설정, 오버샘플링 모드, 시험 데이터, 신호 극성, 입력 시각 및 플래그 읽기·해제 순서를 넣습니다. 정상 데이터 한 번을 받은 사실이나 프레이밍 오류 한 번만으로 전체 오차 범위를 확정하지 않습니다. 배선 문제는 UART 접속 조건, 운영체제 설정과 읽기 계약은 터미널 직렬 I/O와 구분해서 확인합니다.
참고 자료와 설명 범위
프레임·오버샘플링·상태 구분은 위에 연결한 제조사 자료의 해당 장치 예를 참고했습니다. 3% 시간선과 그림은 이 글의 가정을 바탕으로 한 독립 계산입니다. 주제 검토의 계기는 Abhishek Chakraborty가 작성자로 표시된 UART 저장 카드였지만, 원문 고유 주소·더보기 본문·첨부 이미지와 애니메이션은 확인하지 않았으며 재사용하지 않았습니다.