UART란?
- universal asynchronous receiver-transmitter의 약자로 설정된 데이터 포맷과 전송 속도로 범용적으로 비동기 통신을 위한 컴퓨터 하드웨어 장치이다.
- 가장 작은 단 비트부터 가장 큰 비트까지 전송되는 정확한 타이밍이 통신 채널에 의해 핸들링 되기 위해 시작과 끝 bit로 프레임된 데이터 bits를 하나씩 보내는 것
- 전기 신호 레벨은 UART 외부 드라이버 회로에 의해 처리됨
- 통신 데이터의 경우, 메모리 또는 레지그터에 들어 있어 이를 차례대로 읽어 직렬화하여 통신하고 최대 8bits가 기본 단위
- 일반적으로 병렬 데이터를 직렬화하여 통신하는 개별 집적 회로
- 두개의 UART 사이 데이터 통신을 위해서는 두 가닥의 wire만 있으면 된다. 데이터는 Tx핀에서 전송되어 Rx 핀으로 흐름이 이어진다.
- UART 전송 데이터는 비동기 방식이기 때문에, clock 신호가 존재하지 않는다. clock 신호 대신, 데이터 통신의 시작과 끝을 인식할 수 있는 bits를 각 데이터 프레임에 넣어서 전송을 하게 된다.
- Rx가 start bit를 인식하게 되면, 이후에 들어오는 데이터를 baud rate로 알려진 특정 주기마다 들어오는 bit data를 읽기 시작한다.
작동 방식
- 송신UART(Tx)는 CPU같은 제어 장치로부터 병렬 데이터를 직렬로 변환하여 수신 UART(Rx)로 직렬 전송. 수신 UART(Rx)는 직렬 데이터를 수신 장치에 대한 병렬 데이터로 다시 변환
- baud rate는 데이터 전송 속도 측정으로, bits per second(bps) 단위이다. 서로 통신하는 UART는 같은 baud rate를 가져야하며 baud rate의 오차 범위는 최대 10% 이내이다.
- 두개의 UART는 서로 같은 데이터 패킷 구조를 가져야한다.
데이터 통신
Start Bits
UART 데이터 전송 라인은 일반적으로 고전압 레벨의 경우에는 데이터 전송을 하지 않는다. 데이터를 시작하기 위해 Tx는 high에서 low로 1 clock cycle 동안 전송 라인을 당긴다. Rx에서 high 에서 low로 전압 변화가 감지되면 Baud Rate 간격마다 전송되는 데이터를 읽어들이기 시작한다.
Data Frame
Data Frame은 전송된 데이터 중 실제적으로 사용해야하는 데이터를 포함하고 있다. 이는 최소 5 bits 부터 시작해서 Parity Bit를 사용하는 경우에는 최대 8 bits, Parity Bit가 사용되지 않는 경우에는 최대 9 bits 사용될 수 있다. 대부분의 경우에는 최소 중요 비트와 함께 전송된다.
Parity
Parity는 짝수인지 홀수인지에 대해 알려주는 Bit이다. Parity Bit는 어떠한 데이터를 전송하는 동안 변화가 발생했는지 여부에 대해 Rx에게 알려주는 방식으로 쓰인다. Bits는 Baud Rates의 미스매치, 장거리 데이터 통신, 전자파에 의해 변화할 수 있다.
Rx가 Data Frame을 읽은 이후에, 1인 Bits의 수를 카운트 하고 총 값이 짝수인지 홀수인지 확인한다. 만약 Parity Bit가 0이면 Data Frame안의 논리값이 high이거나 1인 bit는 총 짝수개이다. Parity Bit가 1이면 Data Frame안의 논리값이 high이거나 1인 bit는 총 홀수개이다.
만약 Rx와 Tx의 Parity Bit가 일치하다면, 데이터 전송에 있어 에러가 발생하지 않음을 알 수 있고 Parity Bit가 일치하지 않으면 전송되는 데이터에 있어 변화가 있음을 UART가 알 수 있다.
Stop Bits
Data Packet의 마지막을 전송하기 위해, Tx는 데이터 전송 라인에 저전압에서 고전압으로 1~2 bits동안 드라이브를 걸어 데이터의 마지막을 알린다.
UART 전송 단계
1단계
Data Bus를 통해 병렬적으로 데이터를 Tx로 전송
2단계
Tx에서 전송받은 Data를 Start Bit - Data Frame - Parity Bit - Stop Bit 순으로 패킷을 조합한다.
3단계
전체 패킷은 Start Bit 부터 Stop Bit까지 연속적으로 Tx에서 Rx로 보내진다. Rx는 Start Bit를 인식한 이후 Baud Rate 간격으로 Data를 샘플링한다.
4단계
Rx는 Start Bit, Parity Bit, Stop Bit를 무시하고 Data Frame을 읽어들인다.
5단계
Rx는 읽어들인 Data를 병렬화하여 Data Bus로 전송한다.
주요 사용처
- Debugging: 시스템 내에서 메세지를 캡쳐링 하여 시나리오 상 시스템 버그를 조기에 발견 할 수 있음
- Manufacturing function-level tracing: 생산 라인에서 발생하는 Log를 알려줌으로써 공정 내에 어떠한 상황이 발생하는지 알 수 있음
- Customer or Client update: 동적인 하드웨어 내에서 완전한 시스템을 위한 업데이트 가능한 소프트웨어로 이용 가능함
- Testing/Verification: 소비자에게 최상의 제품을 제공하기 위해 공정 라인에서 테스팅과 검증에 있어서 이용 가능함
UARTS의 장단점
장단점
- 오직 two wires만 사용
- clock signal이 필요 없음
- error check를 할 수 있는 parity bit가 존재
- Data Packet 구조는 Tx와 Rx가 설정되어 있는 한 언제나 변경할 수 있음
- 범용적으로 사용되고 문서화가 잘 되어 있음
단점
- Data Frame의 크기가 최대 9 Bits로 제한적
- Master-Slave 관계가 n:1, 1:n, n:n이 허용되지 않음
- 서로 간 Baud Rate 오차가 최대 10% 이내여야함
출처
https://www.circuitbasics.com/basics-uart-communication/
https://www.analog.com/en/analog-dialogue/articles/uart-a-hardware-communication-protocol.html
'IT 톺아보기 > 이런저런 공부' 카테고리의 다른 글
C 프로그램의 메모리 이해 (1) | 2024.01.29 |
---|---|
Naver map API를 이용하여 네이버 지도를 화면에 띄우기 (2) | 2024.01.08 |
LIN이란? (0) | 2023.05.08 |
memmove 사용법 (0) | 2023.04.21 |
memset 사용법 (0) | 2023.04.20 |