✅UART(Universal Asynchronous Receiver/Transmitter)?
: 두 장치 사이에서 직렬 데이터를 교환할 때 적용되는 프로토콜
- 매우 간단하며 양방향으로 데이터를 송신 및 수신하기 위해 송신기와 수신기 사이에 두 개의 와이어만 사용
- 와이어 양 끝단은 접지 연결이 되어 있다.
- UART를 이용한 통신은 Simplex(단방향 통신)(데이터가 한 방향으로만 전송됨),
Half-duplex(반이중)(한 번에 한 쪽만 전송 가능) 또는 Full-duplex(전이중)(양쪽이 동시에 전송 가능) 방식이 있다
- UART에서 데이터는 프레임 형태로 전송된다.
UART가 사용되는 곳?
가장 초기에 사용되던 직렬 프로토콜로, 한때는 범용 직렬 포트가 대부분 UART 기반이었다.
RS-232 인터페이스, 외부 모뎀 등을 사용하는 장치에서 UART가 일반적이었다
최근에는 SPI 나 I2C와 같은 프로토콜이 칩, 컴포턴트 사이에서 UART를 대체하고 있다
대부분의 최신 컴퓨터와 주변기기들은 직렬 포트를 사용해 통신하는 대신 이더넷, USB 등의 기술을 사용한다.
UART는 단순하고, 비용이 저렴하며, 구현이 간편해 속도와 처리량이 낮은 APP 에서는 여전히 사용한다.
UART 프로토콜의 타이밍 및 동기화
UART의 가장 큰 장점인 비동기화는 송수신기가 공동 클럭 신호를 공유하지 않는 점이다.
이는 프로토콜을 단순화시키지만, UART는 송수신기에 특정 요건을 적용한다.
송수신기가 클럭을 공유하지 않기에 양 끝단에 동일한 비트 타이밍을 보장하기 위해 사전에 정의된 속도로 통신해야 한다.
요즘 가장 일반적으로 사용하는 UART Baudrates는 4800, 9600, 19.2K, 57.6K, 115.2K이다.
동일한 Baudrates를 적용함과 동시에 UART는 양방향에서 동일 프레임 구조 및 매개변수를 사용해야 한다.
UART 프레임을 보면 쉽게 이해가 가능하다.
UART 프로토콜은 특정 전압이나 전압 범위를 정의하지 않기에, 높은 전압 레벨을 "마크", 낮은 전압 레벨을 "스페이스"라고 표시하기도 한다. 데이터가 전송되지 않는 유휴 상태에서는 라인이 H(High)상태인 것을 인지하자.
이를 통해 손상된 라인이나 송신기를 감지하기가 쉽다.
시작 비트와 정지 비트
UART는 비동기식으로 송신기에서 데이터 비트가 들어오는 신호를 보내야 한다.
시작 비트를 통해 수행되며, 시작 비트는 H 상태에서 L상태로의 전환을 말하며, 시작 비트 다음에 사용자 데이터 비트가 전송된다.
데이터 비트 전송이 완료되면 중비 비트가 사용자의 데이터 전송이 종료됨을 표시한다.
정지 비트는 H 상태 또는 유휴 상태로 다시 전환되거나 추가 비트 시간동안 H 상태를 유지한다
수신기가 다음 프레임을 준비할 시간을 갖도록 두 번째 정지 비트(선택)를 구성할 수도 있지만 실제로 흔히 사용되지는 않는다. 두 번째 정지 비트는 일반적으로 안씀
데이터 비트
사용자 데이터 또는 "유용한" 비트로, 일반적으로 시작 비트 바로 뒤에 전송된다.
5~9의 사용자 데이터 비트가 존재하는데 7비트 또는 8비트가 가장 일반적이다.
데이터 비트는 일반적으로 최하위(LSB)비트를 가장 먼저 전송한다.
예시
대문자 "S"를 7비트 ASCII로 전송하려는 경우 비트 시퀀스는 1 0 1 0 0 1 1이다. 즉, 비트 시퀀스를 전송하기 전에 먼저 최하위 비트가 가장 앞에 오도록 순서를 역순으로 조정해야 하며, 역순으로 조정된 비트 시퀀스는 1 1 0 0 1 0 1이다. 마지막 데이터 비트가 전송되면 정지 비트를 사용하여 프레임을 종료하고 라인이 다시 유휴 상태로 변경된다.
- 7-bit ASCII ‘S’ (0x52) = 1 0 1 0 0 1 1
- LSB 순서 = 1 1 0 0 1 0 1
패리티 비트
UART 프레임은 오류 감지를 위해 사용되는 선택적 패리티 비트도 포함할 수 있다. 패리티 비트는 데이터 비트와 정지 비트 사이에 삽입된다. 패리티 비트 값은 사용 중인 패리티 유형(짝수 또는 홀수)에 따라 상이하다.
- 짝수 패리티에서는 프레임에 포함된 1의 개수가 짝수가 되도록 비트가 구성된다.
- 홀수 패리티에서는 프레임에 포함된 1의 개수가 홀수가 되도록 비트가 구성된다.
예시
대문자 "S"(1 0 1 0 0 1 1)는 총 3개의 0과 4개의 1을 포함하고 있다. 짝수 패리티를 사용할 경우, 1의 개수가 이미 짝수이기 때문에 패리티 비트는 0이 된다. 홀수 패리티를 사용하는 경우 프레임에 포함된 1의 개수가 홀수가 되도록 패리티 비트가 1이 되어야 한다.
패리티 비트는 반전된 단일 비트만 감지할 수 있다. 반전된 비트의 개수가 둘 이상인 경우에는 단일 패리티 비트를 사용하여 해당 비트를 안정적으로 감지할 방법이 없다.
🔔요약
- UART는 범용 비동기 송수신기의 약자로 직렬 데이터를 교환하는 간단한 2선식 프로토콜
- 비동기식은 공유되는 클럭이 없다는 사실이기에, UART를 작동시키려면 통신이 이뤄지는 양 끝의 동일한 비트나 Baudrates가 설정되어야 한다.
- 시작 비트와 정지 비트는 시작 지점과 종료 지점 표시나 데이터를 "프레임"화 하기 위해 사용된다.
- 선택적으로 사용하는 패리티 비트를 통해 신호 비트 오류를 감지할 수 있다.
- UART는 최근에도 널리 사용하는 직렬 데이터 프로토콜이나, SPI, I2C, USB, 이더넷 등 들이 일부 애플리케이션들이 UART를 대체하고 있다.
'책벌레와 벌레 그 사이 어딘가 > 개념쌓기' 카테고리의 다른 글
[개념쌓기] 데이터 직렬화(Serialization) (124) | 2023.10.26 |
---|---|
[개념 쌓기] Horizontal Sync & Vertical Sync (128) | 2023.10.11 |
[개념쌓기] Byte Order? Little endian? Big endian? (48) | 2023.08.07 |
[개념쌓기] .dat파일? (38) | 2023.06.12 |
[개념쌓기] I2C란? (31) | 2023.05.23 |
댓글