가운데 접지가 남고 양쪽 신호만 서로 바뀌어야 합니다
UART(Universal Asynchronous Receiver/Transmitter)는 별도의 공통 클록선 없이 데이터를 직렬로 주고받는 통신 방식입니다. 각 기판의 TX(Transmit)는 데이터를 내보내는 출력, RX(Receive)는 데이터를 받아들이는 입력입니다. 따라서 한쪽의 TX는 다른 쪽의 RX로 연결하고, 반대 방향도 똑같이 연결합니다. GND(Ground, 접지)는 두 회로의 신호 전압을 비교할 기준입니다.
TX와 RX를 각각 다른 신호선으로 연결하면 두 장치가 동시에 보내고 받을 수 있습니다. 이를 전이중(full duplex)이라고 합니다. 이 3핀 배선에 세 번째 장치를 추가하면서 여러 TX 출력을 한 선에 바로 묶으면 출력끼리 충돌할 수 있으므로, 장치를 늘릴 때는 송신선을 누가 구동할지 별도로 설계해야 합니다.
3개 접점이 왼쪽부터 TX–GND–RX로 놓이고 케이블의 양쪽 커넥터가 그 배열에 맞도록 만들어졌다면, 한쪽 커넥터를 180° 돌려 꽂았을 때 양 끝 접점의 역할이 맞바뀌고 가운데 접지는 그대로 남습니다. 돌리는 것은 기판이나 전선 하나가 아니라 케이블 커넥터의 한쪽 끝입니다. 실제 연결은 커넥터를 어느 면에서 보느냐와 내부 배선에 따라 달라지므로, 인쇄된 순서만으로 확정하지 마세요.
| A 기판의 접점 | 케이블을 거친 B 기판의 접점 | 확인할 일 |
|---|---|---|
| TX | RX | A의 송신 출력을 B의 입력에 연결합니다. |
| GND | GND | 두 회로의 신호 기준을 연결합니다. |
| RX | TX | B의 송신 출력을 A의 입력에 연결합니다. |
이 표는 이렇게 연결되어야 한다는 목표입니다. 모든 3핀 케이블을 뒤집으면 자동으로 이 결과가 나온다는 뜻은 아닙니다.
전원을 넣기 전에 실제 케이블을 측정합니다
- 두 기판과 케이블의 전원을 모두 끕니다. 단자를 어느 방향에서 읽은
TX–GND–RX인지 기판과 커넥터에 표시합니다. 키가 있어서 한쪽 커넥터를 돌려 꽂을 수 없다면 억지로 끼우지 않습니다. - 케이블을 두 기판에서 분리한 상태로 두고, 멀티미터의 도통(continuity) 기능으로 케이블 양 끝의 접점을 하나씩 확인합니다. 한쪽 커넥터를 180° 돌려 장착할 방향을 정한 뒤, 케이블 도통 결과와 두 기판의 실제 단자 배치를 배선표에 대응시킵니다. 완성된 배선표에서 A의 TX→B의 RX, A의 GND→B의 GND, A의 RX→B의 TX가 맞아야 합니다. 신호선끼리나 신호선과 접지 사이의 뜻하지 않은 단락도 확인합니다.
- 전원 핀은 3핀 뒤집기 배열에서 제외합니다. 단자 옆에 별도의
3V접점이 있더라도 그것까지 포함한 4핀 플러그를 통째로 뒤집으면 전원이 신호나 접지에 연결될 수 있습니다. 양쪽 기판의 전원 공급 방법을 별도로 정하고, 서로 다른 전원 출력을 무작정 묶지 않습니다. - 각 TX의 높은 전압이 상대 RX의 허용 범위 안에 드는지 확인합니다. 커넥터를 돌리는 동작은 배선 순서만 바꾸며 전압을 변환하지 않습니다. 마이크로컨트롤러의 논리 레벨 UART에 RS-232 신호를 바로 연결하지 않습니다.
- 전원을 켠 뒤 알려진 짧은 메시지를 양방향으로 보내 봅니다. 수신이 없다면 먼저 접지와 TX/RX 연결을 다시 확인하고, 그다음 통신 속도·데이터 비트·패리티·정지 비트 설정을 확인합니다.
5 V 송신 출력과 더 낮은 전압을 받는 RX 사이에 저항 두 개로 분압기(voltage divider)를 넣는다면 저항값을 실제로 계산합니다. 송신 출력 쪽의 직렬 저항을 R위, RX와 접지 사이의 저항을 R아래라고 할 때 무부하의 RX 전압은 V_RX ≈ V_TX × R아래 / (R위 + R아래)입니다. 예를 들어 R위=2 kΩ, R아래=4.7 kΩ, V_TX=5 V이면 V_RX≈3.51 V로, 3.3 V가 아닙니다. 이 값은 이상적인 계산 예시입니다. 전원과 저항의 공차, 수신 입력의 허용 최고 전압·HIGH 판정 전압, 신호 상승 시간과 전원 차단 때의 역류 조건을 실제 부품 자료에 대조한 뒤 연결해야 합니다.
이 방법은 양쪽 단자의 기계적 방향, 접점 순서와 전기적 역할을 함께 설계한 경우에만 쓸 수 있습니다. 연결이 맞는 것으로 확인한 방향을 커넥터에 남겨 두세요. 다음 조립에서 기억에 의존해 반대로 꽂는 일을 막을 수 있습니다.
배선 잡음·보드레이트 오차·프레임 해석을 나누어 확인합니다
도통표와 통신 설정이 맞는데 문자가 간헐적으로 깨진다면, 신호선이 전력선이나 스위칭 전원 주변을 길게 지나는지 확인합니다. 같은 두 보드·전원·전송 자료·속도를 유지하고 케이블의 길이 또는 경로를 한 항목씩 바꾸어 수신 오류를 비교합니다. 길이와 경로를 동시에 바꿨다면 어느 변화가 원인인지 분리되지 않았다고 기록합니다. 실제 귀환 경로와 수신단 RX 핀의 전압·에지·문턱 통과 시점을 함께 봅니다. TX–RX를 무조건 한 꼬임쌍으로 묶거나 속도만 낮추는 것을 보편 처방으로 삼지 않습니다.
설정한 baud와 실제 비트 기간을 구분합니다
양쪽에 같은 115200을 적었어도 UART 커널 클록, 분주값, 분수 분주와 오버샘플링 설정 때문에 실제 속도가 다를 수 있습니다. CPU 클록을 UART 클록으로 대신하지 말고 실제 양쪽 TX 비트 기간을 측정하거나 해당 소자 공식 식으로 계산합니다. 상대 오차를 e=(실제 송신 baud−실제 수신 baud)/실제 수신 baud로 정의하면, 이상적인 8N1의 정지 비트 중앙에서 누적되는 위치 차이는 송신 비트 기간을 기준으로 약 9.5×e입니다. e=3%의 계산 예는 0.285비트이며 합격 기준이 아닙니다. 시작 검출의 불확실성, 샘플 위치, 프레임 길이와 잡음 여유도 필요합니다.
Microchip AVR LA의 허용 오차 표는 데이터·패리티 길이와 보통/배속 모드를 나눕니다. ST STM32G0 USART 설명도 8배 오버샘플링의 속도 이점과 16배 모드의 더 큰 클록 편차 여유를 구분합니다. 이 값과 분주식을 다른 MCU의 공통 한계로 복사하지 않습니다.
같은 길이의 프레임에서 양쪽 클록의 백분율 차이가 그대로라면 baud를 낮춰도 비트 기간에 대한 누적 오차율은 저절로 사라지지 않습니다. 다만 속도를 바꾸면 분주 양자화 오차·오버샘플링 모드와 선로 에지의 상대 여유가 달라질 수 있습니다. 실제 전압·온도에서 재측정하고 framing·noise·overrun 오류와 수신 바이트를 구분해 기록합니다. 클록 보정·지원되는 자동 baud 검출·분주 변경·외부 발진기 또는 배선 개선 중 원인에 맞는 방법을 고릅니다. ST AN4908 Rev 9처럼 자동 검출도 소자와 USART 인스턴스별 지원 조건이 있으므로 내장 RC는 항상 실패한다거나 외부 수정 소자가 항상 필요하다고 단정하지 않습니다. 로그 처리 지연은 출력량·버퍼의 시간 예산으로 따로 확인합니다.
8-E-1은 데이터 8비트와 짝수 패리티를 구분해 읽습니다
비반전·LSB 우선으로 설정한 논리 레벨 UART를 예로 들면 idle HIGH, 시작 LOW, 데이터 8비트, 짝수 패리티 1비트, 정지 HIGH 1비트가 이어집니다. 0x48의 이진수는 01001000이고 LSB부터 전송되는 순서는 0,0,0,1,0,0,1,0입니다. 데이터의 1이 두 개이므로 짝수 패리티 비트는 0입니다. 시작·정지를 포함해 총 11비트인 자체 계산 예이며 원본 파형을 재현한 값은 아닙니다. ST 예처럼 비트 순서·반전과 레지스터의 데이터 길이 정의가 설정 가능하면 실제 설정을 먼저 확인합니다. 프레임 분석기의 baud·극성·비트 수·패리티와 시간 해상도를 맞춘 뒤 실제 RX 파형과 대조하며, 패리티만으로 모든 데이터 오류를 검출한다고 보지 않습니다.
English summary. Separate cable coupling, relative baud error, framing and software overrun. Hold operating conditions fixed, change one wiring factor at a time, and inspect RX voltage plus error counters. The 9.5-bit/3% calculation is an ideal timing example, not a tolerance specification. For configured non-inverted LSB-first 8-E-1, 0x48 has two set data bits and even parity 0.