맨위로가기

UART

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

UART(Universal Asynchronous Receiver/Transmitter)는 비동기 직렬 통신을 위한 하드웨어 장치로, 데이터를 바이트 단위로 전송하고 수신한다. 초기에는 전신 방식에서 시작하여 다양한 문자 코드와 함께 사용되었으며, DEC의 고든 벨이 설계한 최초의 UART는 아날로그 타이밍 방식의 한계를 극복하고 소프트웨어 흐름 제어를 도입했다. 1971년 웨스턴 디지털에서 최초의 상용 단일 칩 UART를 개발했으며, 1980년대에는 IBM PC에 8250 UART가 널리 사용되었다. 1990년대에는 온칩 버퍼를 가진 새로운 UART가 개발되어 데이터 손실 없이 더 높은 전송 속도를 지원했다. 현재는 USB-to-UART 브리지가 널리 사용되며 대부분의 마이크로컨트롤러에 내장되어 있다. UART는 데이터 프레임을 시작 비트, 데이터 비트, 패리티 비트(선택 사항), 정지 비트로 구성하며, 단방향, 전이중, 반이중 통신 방식을 지원한다. 통신을 위해서는 전압 레벨, 보 레이트, 패리티 비트, 데이터 비트 크기, 정지 비트 크기, 흐름 제어 설정이 송수신 측에서 동일해야 한다. UART는 패리티 오류, 오버런 오류, 프레이밍 오류 등의 오류를 감지하며, PC와 주변기기 연결, 소프트웨어 에뮬레이션, 고속 통신 등 다양한 분야에서 활용된다.

더 읽어볼만한 페이지

  • 아두이노 - 마이크로컨트롤러 포트
    마이크로컨트롤러 포트는 외부 장치와 연결되는 핵심 입출력 통로로서 디지털/아날로그 입출력 등 다양한 종류가 있으며 LED 제어, 스위치 입력 감지, 모터 제어 등 여러 응용 분야에 활용되고, 마이크로컨트롤러 종류 및 외부 메모리 추가 여부에 따라 포트 구성이 달라진다.
  • 아두이노 - UDOO
    UDOO는 2013년 킥스타터를 통해 시작된 단일 보드 컴퓨터로, 듀얼, 쿼드 등 세 가지 모델로 출시되었으며 ARM Cortex-A9 프로세서를 탑재하여 고성능 비디오 및 그래픽 처리를 지원한다.
  • 마이크로컨트롤러 - 마이크로프로세서
    마이크로프로세서는 CPU 기능을 단일 IC에 통합한 것으로, 무어의 법칙에 따라 성능이 향상되어 왔으며 다양한 아키텍처와 기술 발전을 거쳐 현재 광범위한 분야에서 사용된다.
  • 마이크로컨트롤러 - ARM 아키텍처
    ARM 아키텍처는 저전력 설계로 모바일 기기에서 널리 쓰이는 RISC 기반 프로세서 아키텍처로서, IP 코어 라이선스 모델과 ARM Flexible Access를 통해 다양한 분야로 확장되고 있다.
  • 데이터 전송 - 대역폭 제한
    대역폭 제한은 네트워크 혼잡 방지, 특정 사용자 과도한 사용 방지, 서비스 품질 관리 등을 위해 컴퓨터 네트워크에서 데이터 전송 속도를 인위적으로 제한하는 기술이다.
  • 데이터 전송 - 데이터 링크
    데이터 링크는 데이터를 송수신하기 위한 통신 연결로, 단방향, 반이중, 전이중 통신으로 나뉘며, 다양한 분야에서 활용되고 특히 항공 분야에서 항공 교통 관제 및 정보 교환, 무인 시스템 제어에 사용된다.
UART
장치 정보
종류컴퓨터 하드웨어 장치
기능비동기 직렬 통신
풀이범용 비동기 송수신기
로마자 표기Yu-a-ti
기술 정보
통신 방식직렬 통신
동기화 방식비동기
주요 구성 요소송신기, 수신기, 클록 생성기
적용 분야마이크로컨트롤러, 컴퓨터 주변 기기, 통신 시스템
특징
데이터 전송전이중 통신 지원
오류 검출패리티 비트 사용
전송 속도다양한 전송 속도 지원 (보 레이트)
데이터 형식시작 비트, 데이터 비트, 패리티 비트, 정지 비트

2. 역사

초기 전신 방식은 모스 부호처럼 가변 길이 펄스를 사용했지만, 회전하는 기계식 스위치를 사용하는 고정 길이 펄스 방식의 직렬 통신 장치가 등장했다.[24] 텔레타이프 단말기와 컴퓨터 주변 장치에서는 5~8비트 데이터 비트를 사용하는 다양한 문자 코드가 널리 사용되었다.[24]

DEC의 고든 벨은 최초의 UART를 설계했으며, 이는 PDP-1을 비롯한 PDP 시리즈 컴퓨터에 사용되었다.[2][3] 벨은 UART의 주요 혁신이 신호를 샘플링하여 디지털 영역으로 변환함으로써, 이전의 아날로그 타이밍 장치보다 더 안정적인 타이밍을 가능하게 한 것이라고 밝혔다.[4] DEC는 XON 및 XOFF 문자를 사용한 흐름 제어를 통해 하드웨어 와이어 대신 소프트웨어를 사용하여 배선, 백플레인 및 기타 구성 요소의 비용을 절감했다.[24]

1971년, 웨스턴 디지털은 최초의 상용 단일 칩 UART인 WD1402A를 개발했다.[2] 이는 중규모 집적 회로의 초기 사례였다.

1980년대에는 IBM PC에 사용된 National Semiconductor의 8250이 널리 사용되었다.[5] 1990년대에는 온칩 버퍼를 가진 새로운 UART가 개발되어 데이터 손실 없이 더 높은 전송 속도를 지원했다. 예를 들어, National Semiconductor 16550은 16바이트 FIFO를 가지고 있었으며, 여러 변종을 파생시켰다.[5]

2000년대 이후, PC에서 RS-232 COM 포트가 점차 사라지고 USB 포트가 주로 사용되면서, USB-to-UART 브리지가 널리 사용되고 있다.[6] 사이프러스 반도체와 FTDI는 이러한 칩의 주요 상용 공급업체이다.[6] 현재는 대부분의 마이크로컨트롤러에 UART 또는 USART(Universal Synchronous/Asynchronous Receiver/Transmitter)가 내장되어 있다.

3. 데이터 송수신 방식

UART는 비동기 직렬 통신 방식을 사용하며, 송신 측과 수신 측은 사전에 설정된 통신 규약(전송 속도, 데이터 비트, 패리티 비트, 정지 비트 등)을 따라야 한다. 데이터 프레임은 시작 비트, 데이터 비트, 패리티 비트(선택 사항), 정지 비트로 구성된다.

범용 비동기 수신기-송신기(UART)는 데이터 바이트를 받아 개별 비트를 순차적으로 전송한다.[7] 대상에서는 두 번째 UART가 비트를 다시 조립하여 완전한 바이트로 만든다. 각 UART에는 직렬 및 병렬 형식 간의 변환의 기본 방법인 시프트 레지스터가 포함되어 있다.

UART는 일반적으로 서로 다른 장비 간에 사용되는 외부 신호를 직접 생성하거나 수신하지 않는다. 별도의 인터페이스 장치가 UART의 논리 레벨 신호를 외부 신호 레벨로 변환하는 데 사용되며, 이는 표준화된 전압 레벨, 전류 레벨 또는 기타 신호일 수 있다.

통신은 다음 3가지 모드가 가능하다.


  • ''단방향'' (한 방향으로만, 수신 장치가 송신 장치로 정보를 다시 보낼 수 있는 기능이 없음)
  • ''전이중'' (두 장치가 동시에 송수신)
  • ''반이중'' (장치가 번갈아 가며 송수신)


UART가 작동하려면 송신 측과 수신 측 모두에서 다음 설정이 동일해야 한다.

  • 전압 레벨
  • 보 레이트
  • 패리티 비트
  • 데이터 비트 크기
  • 정지 비트 크기
  • 흐름 제어


전압 레벨의 경우, 2개의 UART 모듈이 동일한 전압 레벨, 예를 들어 2개의 UART 모듈 간 3V-3V를 가지면 잘 작동한다. 서로 다른 전압 레벨에서 2개의 UART 모듈을 사용하려면 외부적으로 레벨 스위치 회로를 추가해야 한다.[8]

=== 데이터 프레임 구성 요소 ===

UART의 데이터 프레임은 유휴 상태, 시작 비트, 데이터 비트, 패리티 비트, 정지 비트로 구성된다.

  • 유휴 상태: 데이터가 없는 상태로, 일반적으로 고전압(논리 1)을 유지한다. 이는 전신에서 유래된 것으로, 회선과 송신기의 손상 여부를 확인하기 위함이다.
  • 시작 비트 (Start bit): 통신의 시작을 알리는 신호로, 논리 0 상태를 유지한다. 수신기는 이를 통해 새로운 문자가 전송됨을 인지한다.
  • 데이터 비트 (Data bits): 실제 전송되는 데이터로, 5~8비트(일반적으로 최하위 비트부터 전송)로 구성된다. 사용할 비트 수는 레지스터 설정을 통해 결정된다.
  • 패리티 비트 (Parity bit): 데이터 오류 검출을 위한 비트로, 사용 여부와 종류(짝수, 홀수)는 레지스터 설정을 통해 선택할 수 있다. 사용하지 않으면 이 비트는 제거된다. 전송 중 데이터 변경 여부를 확인하는 데 사용된다.
  • 정지 비트 (Stop bit(s)): 통신의 종료를 알리는 신호로, 논리 1 상태를 1~2 비트 시간 동안 유지한다. 유지 시간은 레지스터 설정을 통해 결정된다. 수신기는 정지 비트를 통해 문자의 완료를 인지한다.


UART 프레임의 예시. 1개의 바이트가 전송되며, 시작 비트, 8개의 데이터 비트(D1-8) 및 2개의 정지 비트로 구성되어 11비트 UART 프레임이 된다.


일반적으로 각 데이터 비트의 경계는 시작 비트를 기준으로 16/64배 빠른 클럭 신호를 이용하여 찾아낸다. 이 클럭 신호는 내부 클럭 디지털 회로에서 발생하며, 보드 설정에 따라 주 클럭으로부터 타이머 등을 이용하여 설정된 속도의 클럭 신호를 생성한다. 통신 양쪽은 미리 설정을 약속하고 클럭 신호 발생부의 레지스터를 같은 속도로 설정해야 원활한 통신이 가능하다.

가장 일반적인 설정은 8개의 데이터 비트, 패리티 없음, 1개의 정지 비트(8N1)를 사용하는 것이다. 이 경우 프로토콜 효율은 80%이다. 이는 이더넷의 최대 처리량 프레임(95%)이나 점보 프레임(99%)보다는 낮지만, 1바이트 또는 몇 바이트의 작은 메시지를 전송하는 경우에는 이더넷보다 효율적이다.

UART 데이터 프레임 구성
비트 수1234567891011
시작 비트
(Start bit)
5–8 데이터 비트패리티 비트
(parity bit)
종료 비트
(Stop bit(s))
StartData 0Data 1Data 2Data 3Data 4Data 5Data 6Data 7ParityStop



=== 송신기 (Transmitter) ===

전송 시스템은 시프트 레지스터에 문자를 넣는 즉시, UART는 시작 비트를 생성하고, 필요한 수의 데이터 비트를 라인으로 시프트하여 내보낸다. 패리티 비트(사용되는 경우)를 생성 및 전송하며, 정지 비트를 전송한다. 전이중 동작은 문자를 동시에 전송하고 수신해야 하므로 UART는 전송된 문자와 수신된 문자에 대해 두 개의 다른 시프트 레지스터를 사용한다.

고성능 UART는 CPU 또는 DMA 컨트롤러가 시프트 레지스터에 한 번에 하나의 문자를 넣는 대신 여러 문자를 FIFO(First In First Out) 버퍼에 일괄적으로 넣을 수 있도록 전송 FIFO 버퍼를 포함할 수 있다. 단일 또는 여러 문자의 전송은 CPU 속도에 비해 시간이 오래 걸릴 수 있으므로 UART는 호스트 시스템이 전송 버퍼 또는 시프트 레지스터에 최소한 하나의 문자가 있는지 알 수 있도록 사용 중 상태를 표시하는 플래그를 유지한다. "다음 문자(들) 준비"는 인터럽트로 신호를 보낼 수도 있다.

=== 수신기 (Receiver) ===

수신기는 각 클럭 펄스마다 들어오는 신호의 상태를 테스트하여 시작 비트의 시작을 찾는다. 시작 비트가 비트 시간의 절반 이상 지속되면 유효한 것으로 간주하여 새 문자의 시작을 알린다. 그렇지 않으면 스퓨리어스 펄스로 간주하고 무시한다.[9][10] 추가 비트 시간을 기다린 후 회선의 상태를 다시 샘플링하고 결과 레벨을 시프트 레지스터로 클록한다. 문자 길이(일반적으로 5~8비트)에 필요한 수의 비트 기간이 경과하면 시프트 레지스터의 내용이 수신 시스템에서 병렬 방식으로 사용할 수 있게 된다. UART는 새로운 데이터가 있음을 나타내는 플래그를 설정하고 호스트 프로세서가 수신된 데이터를 전송하도록 요청하는 인터럽트를 생성할 수도 있다.[9][10]

통신하는 UART는 통신 신호 외에는 공유된 타이밍 시스템이 없다. 일반적으로 UART는 스퓨리어스 펄스로 간주되지 않는 데이터 회선의 각 변경에서 내부 클럭을 다시 동기화한다. 이러한 방식으로 타이밍 정보를 얻으면 송신기가 예상보다 약간 다른 속도로 전송할 때에도 안정적으로 수신할 수 있다. 단순한 UART는 이 작업을 수행하지 않고 시작 비트의 하강 에지에서만 다시 동기화한 다음 각 예상 데이터 비트의 중앙을 읽는다. 이 시스템은 방송 데이터 전송 속도가 정지 비트를 안정적으로 샘플링할 수 있을 만큼 정확하면 작동한다.[9][10]

UART는 다음 문자를 수신하는 동안 가장 최근 문자를 저장하는 표준 기능을 갖추고 있다. 이러한 "이중 버퍼링"은 수신 컴퓨터에 수신된 문자를 가져올 수 있는 전체 문자 전송 시간을 제공한다. 많은 UART에는 수신기 시프트 레지스터와 호스트 시스템 인터페이스 사이에 FIFO 버퍼 메모리가 있다. 이를 통해 호스트 프로세서는 UART로부터의 인터럽트를 처리할 시간이 더 많아지고 높은 속도로 수신된 데이터의 손실을 방지할 수 있다.[9][10]

3. 1. 데이터 프레임 구성 요소

UART의 데이터 프레임은 유휴 상태, 시작 비트, 데이터 비트, 패리티 비트, 정지 비트로 구성된다.

  • 유휴 상태: 데이터가 없는 상태로, 일반적으로 고전압(논리 1)을 유지한다. 이는 전신에서 유래된 것으로, 회선과 송신기의 손상 여부를 확인하기 위함이다.
  • 시작 비트 (Start bit): 통신의 시작을 알리는 신호로, 논리 0 상태를 유지한다. 수신기는 이를 통해 새로운 문자가 전송됨을 인지한다.
  • 데이터 비트 (Data bits): 실제 전송되는 데이터로, 5~8비트(일반적으로 최하위 비트부터 전송)로 구성된다. 사용할 비트 수는 레지스터 설정을 통해 결정된다.
  • 패리티 비트 (Parity bit): 데이터 오류 검출을 위한 비트로, 사용 여부와 종류(짝수, 홀수)는 레지스터 설정을 통해 선택할 수 있다. 사용하지 않으면 이 비트는 제거된다. 전송 중 데이터 변경 여부를 확인하는 데 사용된다.
  • 정지 비트 (Stop bit(s)): 통신의 종료를 알리는 신호로, 논리 1 상태를 1~2 비트 시간 동안 유지한다. 유지 시간은 레지스터 설정을 통해 결정된다. 수신기는 정지 비트를 통해 문자의 완료를 인지한다.


일반적으로 각 데이터 비트의 경계는 시작 비트를 기준으로 16/64배 빠른 클럭 신호를 이용하여 찾아낸다. 이 클럭 신호는 내부 클럭 디지털 회로에서 발생하며, 보드 설정에 따라 주 클럭으로부터 타이머 등을 이용하여 설정된 속도의 클럭 신호를 생성한다. 통신 양쪽은 미리 설정을 약속하고 클럭 신호 발생부의 레지스터를 같은 속도로 설정해야 원활한 통신이 가능하다.

가장 일반적인 설정은 8개의 데이터 비트, 패리티 없음, 1개의 정지 비트(8N1)를 사용하는 것이다. 이 경우 프로토콜 효율은 80%이다. 이는 이더넷의 최대 처리량 프레임(95%)이나 점보 프레임(99%)보다는 낮지만, 1바이트 또는 몇 바이트의 작은 메시지를 전송하는 경우에는 이더넷보다 효율적이다.

UART 데이터 프레임 구성
비트 수1234567891011
시작 비트
(Start bit)
5–8 데이터 비트패리티 비트
(parity bit)
종료 비트
(Stop bit(s))
StartData 0Data 1Data 2Data 3Data 4Data 5Data 6Data 7ParityStop


3. 2. 송신기 (Transmitter)

전송 시스템은 시프트 레지스터에 문자를 넣는 즉시, UART는 시작 비트를 생성하고, 필요한 수의 데이터 비트를 라인으로 시프트하여 내보낸다. 패리티 비트(사용되는 경우)를 생성 및 전송하며, 정지 비트를 전송한다. 전이중 동작은 문자를 동시에 전송하고 수신해야 하므로 UART는 전송된 문자와 수신된 문자에 대해 두 개의 다른 시프트 레지스터를 사용한다.

고성능 UART는 CPU 또는 DMA 컨트롤러가 시프트 레지스터에 한 번에 하나의 문자를 넣는 대신 여러 문자를 FIFO(First In First Out) 버퍼에 일괄적으로 넣을 수 있도록 전송 FIFO 버퍼를 포함할 수 있다. 단일 또는 여러 문자의 전송은 CPU 속도에 비해 시간이 오래 걸릴 수 있으므로 UART는 호스트 시스템이 전송 버퍼 또는 시프트 레지스터에 최소한 하나의 문자가 있는지 알 수 있도록 사용 중 상태를 표시하는 플래그를 유지한다. "다음 문자(들) 준비"는 인터럽트로 신호를 보낼 수도 있다.

3. 3. 수신기 (Receiver)

수신기는 각 클럭 펄스마다 들어오는 신호의 상태를 테스트하여 시작 비트의 시작을 찾는다. 시작 비트가 비트 시간의 절반 이상 지속되면 유효한 것으로 간주하여 새 문자의 시작을 알린다. 그렇지 않으면 스퓨리어스 펄스로 간주하고 무시한다.[9][10] 추가 비트 시간을 기다린 후 회선의 상태를 다시 샘플링하고 결과 레벨을 시프트 레지스터로 클록한다. 문자 길이(일반적으로 5~8비트)에 필요한 수의 비트 기간이 경과하면 시프트 레지스터의 내용이 수신 시스템에서 병렬 방식으로 사용할 수 있게 된다. UART는 새로운 데이터가 있음을 나타내는 플래그를 설정하고 호스트 프로세서가 수신된 데이터를 전송하도록 요청하는 인터럽트를 생성할 수도 있다.[9][10]

통신하는 UART는 통신 신호 외에는 공유된 타이밍 시스템이 없다. 일반적으로 UART는 스퓨리어스 펄스로 간주되지 않는 데이터 회선의 각 변경에서 내부 클럭을 다시 동기화한다. 이러한 방식으로 타이밍 정보를 얻으면 송신기가 예상보다 약간 다른 속도로 전송할 때에도 안정적으로 수신할 수 있다. 단순한 UART는 이 작업을 수행하지 않고 시작 비트의 하강 에지에서만 다시 동기화한 다음 각 예상 데이터 비트의 중앙을 읽는다. 이 시스템은 방송 데이터 전송 속도가 정지 비트를 안정적으로 샘플링할 수 있을 만큼 정확하면 작동한다.[9][10]

UART는 다음 문자를 수신하는 동안 가장 최근 문자를 저장하는 표준 기능을 갖추고 있다. 이러한 "이중 버퍼링"은 수신 컴퓨터에 수신된 문자를 가져올 수 있는 전체 문자 전송 시간을 제공한다. 많은 UART에는 수신기 시프트 레지스터와 호스트 시스템 인터페이스 사이에 FIFO 버퍼 메모리가 있다. 이를 통해 호스트 프로세서는 UART로부터의 인터럽트를 처리할 시간이 더 많아지고 높은 속도로 수신된 데이터의 손실을 방지할 수 있다.[9][10]

4. UART 모델

8250은 IBM PC에 사용된 초기 UART로, 1바이트 버퍼를 가지고 있어 현재는 사용되지 않는다.[12] Intel 8251도 널리 사용되었다.[12]

16550은 내셔널 세미컨덕터에서 개발되었으며, PC/AT 호환 기종의 시리얼 포트에 널리 사용된다.[14] FIFO 버퍼를 내장하고 있으며, 확장 기능을 통해 더 빠른 데이터 통신 속도를 설정할 수 있다. 16450 UART에 FIFO를 내장한 것이 16550이다.[14] 16550A는 16바이트 FIFO 버퍼를 가지고 있으며, 수신 인터럽트 트리거 레벨을 1, 4, 8 또는 14자로 설정할 수 있다.[15]

Z80 SCC (Z85C30)는 Zilog에서 개발되었으며, 썬 마이크로시스템즈 등의 유닉스 워크스테이션에 사용되었다.[13] 3바이트 수신 버퍼와 1바이트 전송 버퍼를 가지고 있으며, HDLC 및 SDLC 처리를 가속화하는 하드웨어를 갖추고 있다.[13]

PL011은 ARM에서 개발한 AXI 버스용 IP 코어이다.[23]

이 외에도 다양한 UART 모델이 존재한다.

모델설명
WD1402A일반적으로 판매된 최초의 단일 칩 UART. 약 1971년에 출시되었다.[11]
인터실 6402
CDP 1854
Zilog Z8440범용 동기 및 비동기 수신기-송신기(USART). 2000 kbit/s. 4바이트 RX 버퍼. 2바이트 TX 버퍼.[12]
Z8530/Z85C303바이트 수신 버퍼와 1바이트 전송 버퍼. CMOS 버전(Z85C30)은 타사 DMA 컨트롤러가 DMA 전송을 수행할 수 있도록 하는 신호를 제공한다.[13]
모토로라 6850
6522
6551
록웰 65C52
16450IBM PC/AT 시리즈 컴퓨터에서 사용되었다.
82510두 개의 독립적인 4바이트 FIFO를 사용하여 최대 288 kbit/s의 비동기 작동을 허용한다.
16C552
1665032바이트 버퍼. 460.8 kbit/초
1675064바이트 버퍼 (송신), 56바이트 (수신). 921.6 kbit/초
16850128바이트 버퍼. 460.8 kbit/초, 즉 1500 kbit/초
16C850
16950128바이트 버퍼 및 9비트 문자 지원.
16C95016950과 동일하며, 9비트 문자 지원.
1695416950/16C950의 쿼드 포트 버전.
16C95416950/16C950의 쿼드 포트 버전.
16C1550/16C155116바이트 FIFO 버퍼가 있는 UART. 최대 1.5 Mbit/s.
16C24501바이트 FIFO 버퍼가 있는 듀얼 UART.
16C255016바이트 FIFO 버퍼가 있는 듀얼 UART.
SCC2691프로그래밍 가능한 카운터/타이머도 포함하는 단일 채널 UART. 1바이트 전송 홀딩 레지스터와 4바이트 수신 FIFO.[10]
SCC28L91
SCC26922개의 통신 채널, 관련 제어 레지스터 및 1개의 카운터/타이머로 구성된 듀얼 UART(DUART). 각 채널은 1바이트 전송 홀딩 레지스터와 4바이트 수신기 FIFO.
SC26C92
SC28L92
SCC28C94채널 활동이 많은 기간 동안 효율적인 처리를 위한 중재된 인터럽트 시스템을 추가.
SCC2698B단일 패키지에 있는 4개의 SCC2692 DUART.
SCC28L1988개의 독립적인 통신 채널과 채널 활동이 많은 기간 동안 효율적인 처리를 위한 중재된 인터럽트 시스템.
Z85230동기/비동기 모드(USART),[16] 2개의 포트. 채널당 4바이트 버퍼 전송, 8바이트 버퍼 수신.
Hayes ESP1KB 버퍼, 921.6 kbit/s, 8개 포트.[17]
Exar XR17V352, XR17V354 및 XR17V35816550 호환 레지스터 세트, 256바이트 TX 및 RX FIFO.
Exar XR17D152, XR17D154 및 XR17D15816C550 호환 5G 레지스터 세트, 64바이트 전송 및 수신 FIFO.
Exar XR17C152, XR17C154 및 XR17C15816C550 호환 레지스터, 64바이트 전송 및 수신 FIFO.
Exar XR17V252, XR17V254 및 XR17V258전력 관리 지원, 16C550 호환 레지스터 세트, 레벨 카운터 및 프로그래밍 가능한 트리거 레벨이 있는 64바이트 TX 및 RX FIFO.


4. 1. 주요 UART 모델

8250은 IBM PC에 사용된 초기 UART로, 1바이트 버퍼를 가지고 있어 사용되지 않는다.[12] Intel 8251도 널리 사용되었다.[12]

16550은 내셔널 세미컨덕터에서 개발되었으며, PC/AT 호환 기종의 시리얼 포트에 널리 사용된다.[14] FIFO 버퍼를 내장하고 있으며, 확장 기능을 통해 더 빠른 데이터 통신 속도를 설정할 수 있다. 16450 UART에 FIFO를 내장한 것이 16550이다.[14] 16550A는 16바이트 FIFO 버퍼를 가지고 있으며, 수신 인터럽트 트리거 레벨을 1, 4, 8 또는 14자로 설정할 수 있다.[15]

Z80 SCC (Z85C30)는 Zilog에서 개발되었으며, 썬 마이크로시스템즈 등의 유닉스 워크스테이션에 사용되었다.[13] 3바이트 수신 버퍼와 1바이트 전송 버퍼를 가지고 있으며, HDLC 및 SDLC 처리를 가속화하는 하드웨어를 갖추고 있다.[13]

PL011은 ARM에서 개발한 AXI 버스용 IP 코어이다.[23]

이 외에도 다양한 UART 모델이 존재한다.

모델설명
WD1402A일반적으로 판매된 최초의 단일 칩 UART. 약 1971년에 출시되었다.[11]
인터실 6402
CDP 1854
Zilog Z8440범용 동기 및 비동기 수신기-송신기(USART). 2000 kbit/s. 4바이트 RX 버퍼. 2바이트 TX 버퍼.[12]
Z8530/Z85C303바이트 수신 버퍼와 1바이트 전송 버퍼. CMOS 버전(Z85C30)은 타사 DMA 컨트롤러가 DMA 전송을 수행할 수 있도록 하는 신호를 제공한다.[13]
모토로라 6850
6522
6551
록웰 65C52
16450IBM PC/AT 시리즈 컴퓨터에서 사용되었다.
82510두 개의 독립적인 4바이트 FIFO를 사용하여 최대 288 kbit/s의 비동기 작동을 허용한다.
16C552
1665032바이트 버퍼. 460.8 kbit/초
1675064바이트 버퍼 (송신), 56바이트 (수신). 921.6 kbit/초
16850128바이트 버퍼. 460.8 kbit/초, 즉 1500 kbit/초
16C850
16950128바이트 버퍼 및 9비트 문자 지원.
16C95016950과 동일하며, 9비트 문자 지원.
1695416950/16C950의 쿼드 포트 버전.
16C95416950/16C950의 쿼드 포트 버전.
16C1550/16C155116바이트 FIFO 버퍼가 있는 UART. 최대 1.5 Mbit/s.
16C24501바이트 FIFO 버퍼가 있는 듀얼 UART.
16C255016바이트 FIFO 버퍼가 있는 듀얼 UART.
SCC2691[10]
SCC28L91
SCC26922개의 통신 채널, 관련 제어 레지스터 및 1개의 카운터/타이머로 구성된 듀얼 UART(DUART). 각 채널은 1바이트 전송 홀딩 레지스터와 4바이트 수신기 FIFO.
SC26C92
SC28L92
SCC28C94채널 활동이 많은 기간 동안 효율적인 처리를 위한 중재된 인터럽트 시스템을 추가.
SCC2698B단일 패키지에 있는 4개의 SCC2692 DUART.
SCC28L1988개의 독립적인 통신 채널과 채널 활동이 많은 기간 동안 효율적인 처리를 위한 중재된 인터럽트 시스템.
Z85230동기/비동기 모드(USART),[16] 2개의 포트. 채널당 4바이트 버퍼 전송, 8바이트 버퍼 수신.
버퍼, , 8개 포트.[17]
Exar XR17V352, XR17V354 및 XR17V35816550 호환 레지스터 세트, 256바이트 TX 및 RX FIFO.
Exar XR17D152, XR17D154 및 XR17D15816C550 호환 5G 레지스터 세트, 64바이트 전송 및 수신 FIFO.
Exar XR17C152, XR17C154 및 XR17C15816C550 호환 레지스터, 64바이트 전송 및 수신 FIFO.
Exar XR17V252, XR17V254 및 XR17V258전력 관리 지원, 16C550 호환 레지스터 세트, 레벨 카운터 및 프로그래밍 가능한 트리거 레벨이 있는 64바이트 TX 및 RX FIFO.


5. 오류 검출

UART는 데이터의 신뢰성을 유지하기 위해 오류를 감지하는 기능을 가지고 있다. UART는 인터럽트나 내장 레지스터를 통해 마이크로프로세서에 오류가 발생했음을 알린다.


  • 패리티 오류 (Parity error): 수신된 문자의 패리티 비트가 잘못되었을 때 발생하는 오류이다. 패리티 무효 설정 시에는 발생하지 않는다.

  • 오버런 오류 (Overrun error): 수신 버퍼에 저장된 문자를 마이크로프로세서가 가져가기 전에, 시프트 레지스터에 다음 문자가 들어왔을 때 발생하는 오류이다. 가져가지 못한 문자는 손실된다.

  • 프레이밍 오류 (Framing error): 정지 비트를 수신해야 하는 시점에 신호가 정지 비트의 논리값이 아닐 때 발생하는 오류이다.

5. 1. 오류 종류

UART는 데이터의 신뢰성을 유지하기 위해 오류를 감지하는 기능을 가지고 있다. UART는 인터럽트나 내장 레지스터를 통해 마이크로프로세서에 오류가 발생했음을 알린다.

  • 패리티 오류 (Parity error): 수신된 문자의 패리티 비트가 잘못되었을 때 발생하는 오류이다. 패리티 무효 설정 시에는 발생하지 않는다.

  • 오버런 오류 (Overrun error): 수신 버퍼에 저장된 문자를 마이크로프로세서가 가져가기 전에, 시프트 레지스터에 다음 문자가 들어왔을 때 발생하는 오류이다. 가져가지 못한 문자는 손실된다.

  • 프레이밍 오류 (Framing error): 정지 비트를 수신해야 하는 시점에 신호가 정지 비트의 논리값이 아닐 때 발생하는 오류이다.

6. 응용

UART는 다양한 분야에서 활용된다.

모뎀에 연결된 개인용 컴퓨터와 함께 사용되는 일반적인 직렬 포트는 8개의 데이터 비트, 패리티 없음 및 1개의 정지 비트를 사용한다. 이 구성의 경우 초당 ASCII 문자 수는 비트 전송률을 10으로 나눈 값과 같다.

물리적 UART가 없는 일부 저가형 홈 컴퓨터 또는 임베디드 시스템은 대신 입력 포트의 상태를 샘플링하거나 데이터 전송을 위해 출력 포트를 직접 조작하여 소프트웨어로 프로토콜을 에뮬레이트할 수 있다. 매우 CPU 집약적이지만(CPU 타이밍이 중요하기 때문에) UART 칩을 생략하여 비용과 공간을 절약할 수 있다. 이 기술은 비트 뱅깅이라고 알려져 있다.

개인용 컴퓨터의 모뎀은 마더보드 슬롯에 꽂을 수 있으며, 카드에 UART 기능을 포함해야 한다. IBM 개인용 컴퓨터와 함께 제공된 원래의 8250 UART 칩은 각각 수신기와 송신기에 대해 1개의 문자 버퍼를 가지고 있었는데, 이는 통신 소프트웨어가 9600 bit/s 이상의 속도에서 성능이 저조하다는 것을 의미하며, 특히 멀티태스킹 시스템에서 작동하거나 디스크 컨트롤러로부터 인터럽트를 처리하는 경우 더욱 그렇다. 고속 모뎀은 원래 칩과 호환되지만 추가적인 FIFO 버퍼를 포함하는 UART를 사용하여 소프트웨어가 들어오는 데이터에 응답할 수 있는 추가 시간을 제공했다.

높은 비트 전송률에서의 성능 요구 사항을 살펴보면, 16, 32, 64 또는 128 바이트 FIFO가 필수적인 이유를 알 수 있다. 9600 bit/s는 약 1밀리초마다 문자를 전달하므로, 최대 인터럽트 비활성화 타이밍을 충족하는 DOS 시스템에서는 1바이트 FIFO가 이 속도에서 충분해야 한다. 이보다 높은 속도에서는 이전 문자를 가져오기 전에 새 문자를 수신할 수 있으므로, 이전 문자가 손실된다. 이를 오버런 오류라고 하며 하나 이상의 문자가 손실되는 결과를 초래한다.

16바이트 FIFO는 컴퓨터가 인터럽트를 처리하기 전에 최대 16개의 문자를 수신할 수 있도록 한다. 32바이트 FIFO는 최대 속도를 300,000 bit/s 이상으로 증가시킨다. FIFO를 갖는 것의 두 번째 이점은 컴퓨터가 약 8~12%의 인터럽트만 처리하면 되므로 화면을 업데이트하거나 다른 작업을 수행하는 데 더 많은 CPU 시간을 할당할 수 있다는 것이다. 따라서 컴퓨터의 응답도 향상될 것이다.

UART를 송수신하려면 올바른 작동을 위해 동일한 비트 속도, 문자 길이, 패리티 및 정지 비트로 설정해야 한다. 수신 UART는 일치하지 않는 일부 설정을 감지하고 호스트 시스템에 대한 "프레이밍 오류" 플래그 비트를 설정할 수 있다. 예외적인 경우 수신 UART는 손상된 문자의 불규칙한 스트림을 생성하여 호스트 시스템으로 전송한다.

6. 1. 주요 활용 분야

UART는 다양한 분야에서 활용된다.
PC와 주변기기 연결: 모뎀, 프린터, 시리얼 마우스 등 PC와 주변기기 간의 통신에 사용된다. 초기 IBM 개인용 컴퓨터와 함께 제공된 8250 UART 칩은 수신기와 송신기에 각각 1개의 문자 버퍼를 가지고 있었으나, 고속 모뎀은 추가 FIFO 버퍼를 포함하는 UART를 사용하여 성능을 향상시켰다.
기타:

  • UART는 비트 뱅깅 기술을 통해 소프트웨어로 에뮬레이트될 수 있다. 이 기술은 UART 칩을 생략하여 비용과 공간을 절약할 수 있지만, CPU 타이밍이 중요하다.
  • 높은 비트 전송률에서는 16, 32, 64 또는 128 바이트 FIFO가 필수적이다. FIFO는 컴퓨터가 인터럽트를 처리하기 전에 여러 문자를 수신할 수 있도록 하여 데이터 손실(오버런 오류)을 방지하고 시스템 응답성을 향상시킨다.
  • 송수신 UART는 올바른 작동을 위해 동일한 비트 속도, 문자 길이, 패리티 및 정지 비트로 설정되어야 한다. 설정이 일치하지 않으면 "프레이밍 오류"가 발생할 수 있다.

7. 에뮬레이션

UART 통신 프로토콜은 비교적 간단하여, 아두이노[18] 또는 틴시[19]와 같은 현대의 마이크로컨트롤러 소프트웨어에서 비트 뱅잉 GPIO 핀을 사용하여 에뮬레이션할 수 있다.[20][21] 일부 마이크로컨트롤러는 프로그래밍 가능한 I/O 유한 상태 기계를 사용하여 UART를 에뮬레이션할 수 있다. 예를 들어 라즈베리 파이 피코의 PIO[20][21] 또는 NXP의 FlexIO[22]가 있다.

참조

[1] 웹사이트 RS-232 vs. TTL Serial Communication - SparkFun Electronics https://www.sparkfun[...]
[2] 서적 Computer Engineering: A DEC View of Hardware Systems Design http://bitsavers.org[...] Digital Press 2014-05-12
[3] 웹사이트 Curator, Division of Information Technology and Society, National Museum of American History, Smithsonian Institution http://americanhisto[...] 2015-06-14
[4] 문서 Oral History of Gordon Bell http://archive.compu[...] 2005
[5] 서적 Technical Reference 6025008 http://www.minuszero[...] IBM 1981-08
[6] 웹사이트 FTDI Products http://www.ftdichip.[...] 2018-03-22
[7] 서적 An Introduction to Microcomputers Volume 1: Basic Concepts Osborne-McGraw Hill Berkeley California USA 1980
[8] 웹사이트 Universal asynchronous receiver/transmitter (UART) https://www.ti.com/l[...] 2021-03-01
[9] 웹사이트 Determining Clock Accuracy Requirements for UART Communications https://pdfserv.maxi[...] Maxim Integrated 2003-08-07
[10] 웹사이트 Universal asynchronous receiver/transmitter (UART) https://www.nxp.com/[...] Philips [[NXP]] 2006-08-04
[11] 문서 Interfacing with a PDP-11/05: the UART http://retrocmp.com/[...] 2015-08-19
[12] 웹사이트 Zilog Product specification Z8440/1/2/4, Z84C40/1/2/3/4. Serial input/output controller http://www.zilog.com[...]
[13] 웹사이트 Zilog Document Download http://www.zilog.com[...] 2018-03-22
[14] 웹사이트 Re: Serial communication with the 16650 http://www.mail-arch[...] 1999-01-23
[15] 웹사이트 FAQ: The 16550A UART & TurboCom drivers 1994 ftp://ftp.cs.utk.edu[...] 2016-01-16
[16] 웹사이트 SCC/ESCC User Manual UM010901-0601 http://data.leocom.k[...] 2023-05-13
[17] 문서 bill.herrin.us - Hayes ESP 8-port Enhanced Serial Port Manual http://bill.herrin.u[...] 2004-03-02
[18] 웹사이트 SoftwareSerial Library {{!}} Arduino Documentation https://docs.arduino[...] 2022-10-05
[19] 웹사이트 AltSoftSerial Library, for an extra serial port https://www.pjrc.com[...]
[20] 웹사이트 Raspberry Pi Pico Serial Communication Example(MicroPython) https://electrocredi[...] 2023-01-24
[21] 웹사이트 Programmable IO (PIO) for MIDI with the Rasberry Pi Pico https://www.joshka.n[...] 2022-11-05
[22] 웹사이트 Emulating UART by Using FlexIO https://www.nxp.com/[...] 2015
[23] 웹사이트 PrimeCell UART (PL011) Technical Reference Manual https://developer.ar[...] ARM 2024-08-19
[24] 문서 ASR-33のディストリビュータ(分配器)写真(手前) http://www.flickr.co[...]
[25] 웹인용 Zilog Product specification Z8440/1/2/4, Z84C40/1/2/3/4. Serial input/output controller http://www.zilog.com[...]
[26] 웹인용 FAQ: The 16550A UART & TurboCom drivers 1994 http://www.cs.utk.ed[...] 2010-12-15



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com