UART
고친 사람 github-actions[bot]
UART 는 두 장치가 신호선 두 가닥으로 바이트를 주고받게 해 주는 회로입니다. 보내는 쪽은 바이트를 비트 하나씩 차례로 내보냅니다. 받는 쪽은 그 비트를 모아 다시 바이트로 만듭니다. 서버의 시리얼 콘솔이나 작은 보드가 내보내는 디버깅 메시지가 이 길로 나옵니다.
쉽고 빠른 이해
UART 는 장치 둘이 신호선 두 가닥으로 바이트를 한 비트씩 주고받게 해 주는 부품입니다. 한 가닥은 보내는 데, 한 가닥은 받는 데 씁니다. 예를 들어 서버의 네트워크 설정이 꼬여 원격으로 못 들어갈 때, 선을 직접 꽂아 여는 시리얼 콘솔이 이 부품을 거칩니다.
한 가닥으로 비트를 보내려면 받는 쪽이 언제 다음 비트를 읽을지 알아야 합니다. UART 는 박자를 알려 주는 선을 따로 깔지 않습니다. 대신 두 쪽이 1초에 비트를 몇 개 보낼지 미리 똑같이 맞춰 둡니다. 덕분에 선이 적고 회로가 단순합니다.
어떻게 도는가:
- 쉴 때 선은 높은 전압에 머뭅니다
- 보내는 쪽이 전압을 한 비트 길이만큼 낮춰 시작을 알립니다
- 맞춰 둔 속도로 데이터 비트를 차례로 싣습니다. 끝에는 다시 높은 전압을 둡니다
대가도 있습니다. 두 쪽의 속도 설정이 다르면 글자가 깨져 나옵니다. 받았다는 답이 없어서 잃어버린 바이트를 스스로 다시 보내지 못합니다. 한 쌍의 선 끝에 상대가 하나뿐이라 장치를 여럿 매달 수 없습니다.
상세
UART(Universal Asynchronous Receiver-Transmitter, 범용 비동기 송수신기)는 바이트를 비트의 줄로 바꿔 내보내는 회로입니다. 반대로 들어온 비트의 줄을 다시 바이트로 되돌리는 일도 합니다.
많은 마이크로컨트롤러가 이 회로를 칩 안에 하나 이상 품고 있습니다. 마이크로컨트롤러는 프로세서와 메모리와 입출력 회로를 칩 하나에 담은 작은 컴퓨터입니다.
UART 가 쓰는 방식은 직렬 통신입니다. 직렬 통신은 비트를 한 줄로 세워 선 하나 위로 차례로 보내는 방식입니다. 여러 비트를 나란히 보내는 방식보다 선이 적게 듭니다.
직렬은 영어 serial 을 옮긴 말이라 시리얼이라고도 읽습니다. 이 글에 나오는 시리얼 콘솔과 직렬 포트도 같은 낱말에서 왔습니다.
이 절은 먼저 UART 라는 이름과 선을 잇는 법을 봅니다. 그다음 박자 신호 없이 비트를 맞추는 법을 글자 하나가 선 위를 지나가는 모양으로 따라갑니다. 끝으로 오류와 흐름 제어, 이웃 방식과의 차이, 운영체제와 서버에서 UART 가 보이는 모습을 봅니다.
이름에 담긴 세 낱말
UART 라는 이름은 이 회로가 하는 일을 거의 다 말해 줍니다. 이 소절은 이름을 뒤에서부터 한 낱말씩 풉니다.
송수신기는 보내는 회로와 받는 회로를 한 몸에 담았다는 뜻입니다. 보내는 회로를 송신기, 받는 회로를 수신기라고 부릅니다. 두 회로는 서로 기다리지 않고 따로 돕니다.
비동기는 두 장치가 박자 신호를 함께 쓰지 않는다는 뜻입니다. 박자 신호는 일정한 간격으로 오르내리는 신호입니다. 흔히 클록이라고 부릅니다. 클록 선을 함께 쓰면 받는 쪽은 그 신호를 보고 비트를 읽을 때를 압니다. UART 에는 그런 선이 없습니다.
백엔드 개발자가 아는 비동기 호출과는 뜻이 다릅니다. 여기서 비동기는 코드의 실행 순서가 아니라 두 장치의 박자가 묶여 있지 않다는 말입니다.
범용은 설정을 바꿔 여러 상대에 맞출 수 있다는 뜻입니다. 비트를 보내는 속도, 한 번에 싣는 비트 수, 오류 검사 비트를 붙일지를 고를 수 있습니다. 이 값들은 아래 소절에서 하나씩 나옵니다.
엇갈려 잇는 두 가닥의 선
UART 두 개를 이으려면 신호선 두 가닥과 기준선 한 가닥이 듭니다. 아래 표는 선마다 무엇을 싣는지 보입니다.
| 선 | 싣는 것 |
|---|---|
| TX(Transmit, 송신) | 이 장치가 내보내는 비트 |
| RX(Receive, 수신) | 이 장치로 들어오는 비트 |
| GND(Ground, 접지) | 두 장치가 전압을 잴 때 함께 쓰는 기준 |
전압은 늘 어떤 기준과 견준 높이입니다. 두 장치가 접지를 이어 기준을 같게 맞춰야 서로의 높고 낮음을 똑같이 읽습니다.
신호선은 엇갈려 잇습니다. 한쪽의 TX 는 상대의 RX 로 갑니다. 상대의 TX 는 이쪽의 RX 로 옵니다.
flowchart TD
subgraph A["장치 A"]
ATX["TX"]
ARX["RX"]
end
subgraph B["장치 B"]
BRX["RX"]
BTX["TX"]
end
ATX -->|"A 가 보내는 비트"| BRX
BTX -->|"B 가 보내는 비트"| ARX
TX 를 TX 에 이으면 두 장치가 같은 선에 대고 말할 뿐 아무도 듣지 않습니다. UART 를 처음 잇는 사람이 자주 하는 실수입니다. 글자가 하나도 안 나오면 먼저 이 엇갈림을 봅니다.
보내는 선과 받는 선이 따로 있으니 두 방향이 한꺼번에 오갈 수 있습니다. 이런 통신을 전이중 통신이라고 합니다.
한 쌍의 선 끝에는 상대가 하나뿐입니다. UART 에는 상대를 고르는 주소가 없기 때문입니다. 장치를 더 붙이려면 UART 를 하나 더 쓰고 선도 따로 깝니다.
미리 맞춰 두는 속도
클록 선이 없으니 받는 쪽은 비트 하나가 얼마 동안 이어지는지를 미리 알아야 합니다. 두 장치는 통신 전에 같은 속도를 설정해 둡니다. 이 속도를 보 레이트(baud rate)라고 부릅니다.
보 레이트는 원래 1초에 신호를 몇 번 바꾸는지를 셉니다. 신호를 한 번 바꿀 때 비트를 여럿 싣는 방식도 있어서, 이 횟수가 비트 수와 다를 수 있습니다. UART 는 한 번에 비트 하나만 싣기 때문에 보 레이트가 곧 1초에 보내는 비트 수입니다. 9600 보라면 비트 하나가 1초의 9600분의 1 동안 이어집니다.
자주 쓰는 값은 몇 개로 굳어 있습니다. 9600 과 115200 이 대표적입니다. 속도는 양쪽이 같기만 하면 됩니다. 어느 값이 옳다는 규칙은 없습니다.
두 쪽의 속도가 다르면 받는 쪽은 비트를 엉뚱한 때 읽습니다. 그러면 화면에 알아볼 수 없는 글자가 쏟아집니다. 시리얼 콘솔을 처음 열었을 때 깨진 글자가 보이면 대개 속도 설정부터 확인합니다.
한 바이트를 감싸는 프레임
선은 쉴 때 높은 전압에 머뭅니다. 높은 전압을 1, 낮은 전압을 0 으로 읽습니다. 그래서 쉬는 선은 1 이 끝없이 이어지는 모양입니다.
UART 는 바이트 하나를 보낼 때마다 앞뒤에 표시 비트를 붙입니다. 이렇게 감싼 한 덩어리를 프레임이라고 부릅니다. 아래 그림은 데이터 여덟 비트짜리 프레임의 비트 배치입니다. 그림의 패리티는 오류 검사용 비트입니다. 아래에서 따로 풉니다.
packet-beta 0-0: "시작" 1-8: "데이터 비트 8개" 9-9: "패리티 · 고를 때만" 10-10: "정지"
보내는 쪽은 먼저 선을 비트 하나 길이만큼 0 으로 내립니다. 이것이 시작 비트입니다. 받는 쪽은 1 이 이어지다 0 으로 떨어지는 순간을 보고 프레임이 시작됐다는 것을 압니다.
그다음 데이터 비트가 옵니다. 바이트에서 가장 작은 값을 맡은 비트부터 보냅니다. 이 비트를 최하위 비트라고 합니다.
데이터 뒤에는 오류 검사용 비트 하나를 붙일 수 있습니다. 이 비트를 패리티 비트라고 합니다. 붙일지 말지는 설정으로 고릅니다. 쓰임은 뒤의 오류 소절에서 봅니다.
끝에는 선을 다시 1 로 올려 비트 하나나 둘 길이만큼 둡니다. 이것이 정지 비트입니다. 정지 비트 덕분에 다음 프레임의 시작 비트가 1 에서 0 으로 떨어지는 모양으로 또렷하게 드러납니다.
글자 하나가 선 위를 지나가는 모양
이 소절은 글자 A 하나를 보낼 때 선이 어떻게 오르내리는지 봅니다. 글자를 숫자로 정해 둔 표인 ASCII(American Standard Code for Information Interchange)에서 A 는 65 입니다. 65 를 여덟 비트로 적으면 01000001 입니다.
1 1 1 쉬는 중
0 시작 비트
1 0 0 0 데이터 · 오른쪽 끝 비트부터
0 0 1 0 데이터 · 나머지 네 비트
1 정지 비트
1 1 1 다시 쉬는 중
데이터 여덟 비트가 01000001 을 오른쪽부터 거꾸로 읽은 차례로 나갑니다. 최하위 비트부터 보내기 때문입니다. 받는 쪽은 이 차례를 알고 있어서 다시 뒤집어 65 를 얻습니다.
이 설정을 8N1 이라고 줄여 적습니다. 데이터 8비트, 패리티 없음(None), 정지 비트 1개라는 뜻입니다. 장치 설명서에 115200 8N1 처럼 속도와 함께 적힌 것이 이것입니다.
8N1 프레임 하나는 비트 열 칸을 씁니다. 그중 데이터는 여덟 칸입니다. 그래서 9600 보로는 1초에 바이트를 960개 나릅니다.
받는 쪽이 비트를 읽는 때
받는 쪽은 박자 신호 없이 자기 시계만 보고 비트를 읽습니다. 이 소절은 받는 쪽이 언제 선을 들여다보는지 따라갑니다.
받는 쪽은 선이 1 에서 0 으로 떨어지는 순간을 기다립니다. 떨어지면 비트 반 개 길이만큼 기다렸다가 선을 다시 봅니다. 그때도 0 이면 진짜 시작 비트로 칩니다. 잠깐 튄 잡음이었다면 선은 이미 1 로 돌아와 있습니다.
그 뒤로는 비트 하나 길이마다 한 번씩 선을 봅니다. 반 개를 먼저 기다렸으니 매번 비트의 한가운데를 보게 됩니다. 비트의 가장자리는 전압이 바뀌는 중이라 잘못 읽기 쉽습니다.
한가운데를 노리는 까닭은 시계 오차입니다. 두 장치의 시계는 조금씩 다르게 갑니다. 비트를 하나 읽을 때마다 그 차이가 쌓입니다. 가운데에서 출발하면 반 비트만큼 밀리기 전까지 버틸 수 있습니다.
이 오차는 프레임마다 새로 맞춰집니다. 시작 비트가 올 때마다 받는 쪽이 시계를 다시 맞추기 때문입니다. 오차가 쌓이는 길이는 프레임 하나, 비트 열 개 남짓으로 끝납니다. 두 시계가 조금 달라도 통신이 되는 까닭입니다.
데이터를 다 읽은 뒤 정지 비트 칸에서 1 이 아니라 0 이 읽힐 때가 있습니다. 받는 쪽은 프레임이 어긋났다고 판단합니다. 이것을 프레이밍 오류라고 합니다. 아래 그림은 받는 쪽이 한 프레임 동안 거치는 상태를 모은 것입니다.
stateDiagram-v2
state "쉼 · 선이 1" as idle
state "시작 비트 확인 · 반 비트 뒤" as start
state "데이터 비트 읽기 · 비트마다 한 번" as data
state "정지 비트 확인" as stop
state "프레이밍 오류" as err
[*] --> idle
idle --> start: 선이 0 으로 떨어짐
start --> idle: 다시 1 · 잡음이었다
start --> data: 여전히 0
data --> stop: 여덟 개를 다 읽음
stop --> idle: 1 · 바이트 완성
stop --> err: 0
err --> idle
오류를 알아채는 세 가지 신호
UART 는 받은 바이트가 맞는지 상대에게 묻지 않습니다. 대신 받는 쪽이 혼자 알아챌 수 있는 이상 신호가 셋 있습니다. 셋 다 알아채기만 하고 고치지는 않습니다.
첫째는 패리티 비트입니다. 패리티 비트는 데이터 안의 1 의 개수를 짝수나 홀수로 맞추는 비트입니다. 짝수로 맞추기로 했는데 A 처럼 1 이 두 개면 패리티 비트는 0 입니다. 1 이 세 개였다면 1 을 붙여 넷으로 맞춥니다.
받는 쪽은 1 을 다시 셉니다. 개수가 약속과 다르면 비트가 하나 뒤집혔다는 뜻입니다. 다만 비트 두 개가 함께 뒤집히면 개수가 다시 맞아 알아채지 못합니다.
둘째는 앞 소절에서 본 프레이밍 오류입니다. 정지 비트 칸에서 1 이 아니라 0 이 읽히는 경우입니다.
셋째는 받는 쪽이 늦어서 생깁니다. UART 의 수신 회로는 받은 바이트를 담아 두는 작은 버퍼를 갖습니다. 프로그램이 이 버퍼를 제때 비우지 않으면 새 바이트가 들어갈 곳이 없어 버려집니다. 이것을 오버런(overrun)이라고 합니다.
아래 표는 세 신호를 받는 쪽이 무엇을 보고 알아채는지와 흔한 원인으로 견줍니다.
| 오류 | 받는 쪽이 보는 것 | 흔한 원인 |
|---|---|---|
| 패리티 오류 | 1 의 개수가 약속과 다르다 | 선에 낀 잡음 |
| 프레이밍 오류 | 정지 비트 칸이 0 이다 | 두 쪽의 속도 설정이 다르다 · 잡음 |
| 오버런 | 버퍼가 찬 채 새 바이트가 왔다 | 프로그램이 늦게 읽는다 |
UART 는 오류가 난 바이트를 다시 보내 달라고 하지 않습니다. 그런 절차가 없기 때문입니다. 데이터가 꼭 맞아야 하면 그 위에서 도는 프로그램이 이 일을 맡습니다.
프로그램은 보낼 데이터로 계산한 검사값을 함께 붙입니다. 체크섬과 CRC(Cyclic Redundancy Check, 순환 중복 검사)가 이런 검사값입니다. 받는 쪽은 같은 계산을 다시 해서 값을 견줍니다. 값이 틀리면 다시 보내 달라는 요청도 그 프로그램이 직접 합니다.
받는 쪽이 넘치지 않게 하는 흐름 제어
오버런을 막으려면 받는 쪽이 「잠깐 멈춰」라고 말할 수단이 있어야 합니다. 받는 쪽이 감당할 만큼만 보내게 하는 일을 흐름 제어라고 합니다. UART 에서는 두 방식이 쓰입니다.
하드웨어 흐름 제어는 선을 두 가닥 더 깝니다. 한 가닥은 RTS(Request To Send, 송신 요청)입니다. 다른 한 가닥은 CTS(Clear To Send, 송신 허락)입니다.
받는 쪽은 받을 준비가 됐을 때만 자기 RTS 를 켜 둡니다. 이 선은 상대의 CTS 로 이어져 있습니다. 보내는 쪽은 CTS 가 켜져 있을 때만 보냅니다.
선을 켠다는 것은 그 선을 약속된 전압으로 바꿔 둔다는 뜻입니다. 높은 전압과 낮은 전압 가운데 어느 쪽이 켜짐인지는 선이 따르는 전기 규격이 정합니다.
받는 쪽이 「송신 요청」이라는 이름의 선을 켜는 것은 거꾸로 들립니다. 이 이름은 옛 모뎀 시절, 보내려는 쪽이 허락을 청하던 쓰임에서 왔습니다. 지금의 흐름 제어에서는 같은 선을 「받을 준비가 됐다」는 신호로 씁니다.
소프트웨어 흐름 제어는 선을 늘리지 않습니다. 받는 쪽이 데이터 선으로 약속된 바이트 두 개를 보냅니다. 멈추라는 바이트는 XOFF(Transmit Off, 송신 멈춤)입니다. 다시 보내라는 바이트는 XON(Transmit On, 송신 재개)입니다. 둘 다 화면에 글자로 찍히지 않는 제어용 값입니다.
대신 이 두 값이 데이터 안에 섞여 나오면 멈춤 신호로 잘못 읽힙니다. 글자만 오가는 통신에서는 제어용 값이 데이터에 나올 일이 없습니다. 그래서 소프트웨어 흐름 제어는 이런 통신에 주로 씁니다.
UART 밖에서 정하는 전압
UART 는 비트를 어떤 순서와 길이로 보낼지까지만 정합니다. 1 과 0 을 몇 볼트로 나타낼지는 따로 정해집니다. 같은 UART 신호가 선의 종류에 따라 다른 전압으로 실립니다.
한 기판 위의 칩끼리는 칩의 전원 전압을 손대지 않고 씁니다. 전원 쪽 전압이 1, 접지 쪽이 0 입니다. 이 신호를 TTL(Transistor-Transistor Logic) 수준 신호라고 부릅니다.
케이블을 길게 끌 때는 RS-232(Recommended Standard 232)가 쓰였습니다. RS-232 는 장치 사이를 케이블로 이을 때 쓰는 전압을 정한 규격입니다. 옛 컴퓨터 뒷면의 직렬 포트가 이 규격을 따릅니다.
RS-232 는 칩보다 높은 전압을 씁니다. 게다가 음의 전압을 1 로 읽습니다. 칩에서는 높은 전압이 1 이었으니 극성이 거꾸로입니다.
RS-232 포트를 칩의 UART 핀에 바로 이으면 칩이 망가질 수 있습니다. 둘 사이에는 전압을 바꿔 주는 변환 칩을 둡니다.
공장 설비처럼 먼 거리를 잇거나 여러 장치를 한 선에 매달 때는 RS-485(Recommended Standard 485)를 씁니다. RS-485 는 선 두 가닥의 전압 차이로 비트를 싣습니다. 그래서 잡음을 덜 탑니다.
나란히 깐 두 선에는 잡음이 거의 똑같이 낍니다. 받는 쪽은 두 선의 차이만 재므로 함께 낀 잡음이 지워집니다.
선 두 가닥을 신호 하나에 다 쓰므로, 한 쌍으로 이으면 두 방향이 번갈아 말합니다. 이런 통신을 반이중 통신이라고 합니다.
장치를 여럿 매달아도 UART 자체는 여전히 상대를 고르지 못합니다. 누구에게 보내는지는 그 위의 프로그램이 정합니다.
I2C·SPI 와 견줌
한 기판 위에서 UART 와 자주 견주는 방식이 둘 있습니다. I2C(Inter-Integrated Circuit, 집적 회로 간 통신)는 선 두 가닥에 여러 칩을 매답니다. 두 가닥은 박자 선과 데이터 선입니다. 상대는 칩마다 정해진 주소로 부릅니다.
SPI(Serial Peripheral Interface, 직렬 주변 장치 인터페이스)는 모든 칩이 함께 쓰는 공용 선 셋을 깝니다. 박자 선 하나와, 방향마다 하나씩인 데이터 선 둘입니다. 여기에 칩마다 칩 선택선을 하나씩 더 깝니다. 칩 선택선은 지금 말을 걸 칩 하나만 깨우는 선입니다.
둘 다 한쪽이 클록을 내보내 박자를 이끕니다. UART 만 클록 없이 미리 맞춘 속도에 기댑니다. 아래 표는 셋을 견줍니다.
| UART | I2C | SPI | |
|---|---|---|---|
| 신호선 | 둘(보내는 선·받는 선) | 둘 | 공용 셋 + 칩마다 하나 |
| 박자 | 속도를 미리 맞춘다 | 한쪽이 클록을 보낸다 | 한쪽이 클록을 보낸다 |
| 상대 | 하나뿐 | 주소로 고른다 | 칩 선택선으로 고른다 |
| 두 방향 동시 | 된다 | 안 된다 | 된다 |
| 받았다는 확인 | 없다 | 바이트마다 있다 | 없다 |
UART 가 맞는 곳은 장치 둘이 따로 떨어져 있을 때입니다. 박자를 이끄는 쪽이 없어서 어느 쪽이든 먼저 말을 꺼낼 수 있습니다. 칩 하나와 그 곁의 센서 여럿을 이을 때는 I2C 나 SPI 가 흔합니다.
운영체제에서 보이는 모습
프로그램이 UART 회로를 직접 만지지는 않습니다. UART 를 맡은 디바이스 드라이버가 회로를 다룹니다. 디바이스 드라이버는 특정 장치를 다루는 운영체제 안의 소프트웨어입니다.
UART 가 바이트를 받으면 회로가 인터럽트를 걸어 드라이버를 부릅니다. 인터럽트는 장치가 프로세서에게 하던 일을 멈추고 자기를 봐 달라고 보내는 신호입니다. 드라이버는 수신 버퍼에서 바이트를 꺼내 메모리로 옮깁니다.
수신 버퍼는 대개 FIFO(First In First Out, 선입선출) 꼴입니다. 들어온 차례대로 꺼낸다는 뜻입니다. 바이트를 여러 개 모아 두었다가 한꺼번에 알리면 인터럽트가 덜 걸립니다.
리눅스에서는 드라이버가 UART 를 장치 파일로 내놓습니다. 장치 파일은 프로그램이 보통 파일처럼 열어 장치와 주고받는 통로입니다. 보드에 붙은 UART 는 /dev/ttyS0, USB(Universal Serial Bus) 변환기로 단 UART 는 /dev/ttyUSB0 같은 이름으로 나타납니다.
이름의 tty 는 텔레타이프라이터(teletypewriter)의 줄임말입니다. 글자를 찍어 주고받던 이 단말기가 UART 로 컴퓨터에 붙던 시절의 흔적입니다. 그래서 운영체제는 지금도 UART 를 터미널 장치로 다룹니다.
속도와 프레임 모양은 파일을 연 뒤 설정 호출로 정합니다. 리눅스에서는 stty 명령이나 termios 라는 설정 인터페이스가 이 일을 맡습니다.
요즘 노트북에는 직렬 포트가 없습니다. 대신 USB 와 UART 를 이어 주는 변환기를 꽂아 씁니다. 변환기 안에 UART 회로가 들어 있습니다. 컴퓨터 쪽에서는 이 변환기가 USB 장치로 보입니다.
서버와 장비에서 만나는 시리얼 콘솔
백엔드 개발자가 UART 를 만나는 흔한 곳은 시리얼 콘솔입니다. 시리얼 콘솔은 UART 를 거쳐 여는 관리용 콘솔 화면입니다. 네트워크가 없어도 열린다는 점이 쓸모입니다.
서버의 네트워크 설정을 잘못 바꾸면 SSH(Secure Shell)로 다시 들어갈 수 없습니다. 이때 시리얼 콘솔로 붙으면 로그인 화면을 볼 수 있습니다. 운영체제가 부팅하며 찍는 메시지도 이쪽으로 내보내도록 설정할 수 있습니다. 부팅 중에 멈춘 까닭을 찾을 때 이 메시지를 읽습니다.
네트워크 스위치와 라우터도 대개 콘솔 포트를 둡니다. 처음 설정할 때나 원격 접속이 끊겼을 때 이 포트에 선을 꽂습니다.
작은 보드와 임베디드 장비도 디버깅 메시지를 대개 UART 로 내보냅니다. 임베디드 장비는 기기 안에 넣어 정해진 일만 하는 컴퓨터입니다.
메시지를 내는 쪽은 부트로더와 펌웨어입니다. 부트로더는 전원이 들어오면 맨 먼저 돌아 운영체제나 본 프로그램을 불러오는 작은 프로그램입니다. 펌웨어는 장치 안에 심어 두고 돌리는 소프트웨어입니다.
관련 항목
UART 프레임을 이루는 비트와 설정값
시작 비트 · 데이터 비트 · 패리티 비트 · 정지 비트 · 최하위 비트 · 보 레이트 · 클록 · 접지
UART 가 비트를 싣는 방식
직렬 통신 · 병렬 통신 · 비동기 · 전이중 · 반이중 · 프레임 · 오버샘플링
UART 에서 나는 오류와 막는 수단
패리티 오류 · 프레이밍 오류 · 오버런 · 체크섬 · CRC · 흐름 제어 · 하드웨어 흐름 제어 · 소프트웨어 흐름 제어
UART 신호를 싣는 전기 규격
RS-232 · RS-422 · RS-485 · 논리 레벨 · 레벨 시프터 · 차동 신호
UART 와 같은 역할을 두고 겨루는 직렬 버스
I2C · SPI · I3C · CAN · USB · 1-Wire
UART 를 구현한 칩
8250 · 16550 · PL011 · USB 시리얼 변환기
UART 를 다루는 운영체제 구성 요소
디바이스 드라이버 · 인터럽트 · FIFO · 버퍼 · DMA · 장치 파일 · 터미널 · termios · stty · 리눅스 커널
UART 를 거쳐 여는 콘솔과 장비
시리얼 콘솔 · SSH · 부트로더 · 펌웨어 · 모뎀 · 네트워크 스위치 · 라우터
UART 가 속하는 상위 분류
다른 이름: Universal Asynchronous Receiver-Transmitter · 범용 비동기 송수신기 · 유아트