UART 简介
通用异步收发传输器(Universal Asynchronous Receiver/Transmiiter,简称 UART)是一种异步收发传输器,是电脑硬件的一部分,将数据通过串列通信进行传输。 UART 通常用在与其他通信接口(如 EIA RS-232 )的连接上。
具体实物表现为独立的模块化芯片,或是微处理器中的内部周边设备(peripheral)。一般和RS-232C规格的,类似Maxim的MAX232之类的标准信号幅度变换芯片进行搭配,作为连接外部设备的接口。在UART上追加同步方式的串行信号变换电路的产品,被称为USART(Universal Synchronous Asynchronous Receiver Transmitter)。

UART 是通用异步收发器(异步串行通信口)的英文缩写,它包括了 RS232 、 RS449 、 RS423 、 RS422 和 RS485 等接口标准规范和总线标准规范,即 UART 是异步串行通信口的总称。而 RS232 、 RS449 、 RS423 、 RS422 和 RS485 等,是对应各种异步串行通信口的接口标准和总线标准,它规定了通信口的电气特性、传输速率、连接特性和接口的机械特性等内容。实际上是属于通信网络中的物理层(Physical Layer)的概念,与通信协议没有直接关系。而通信协议,是属于通信网络中的数据链路层(Data Link Layer)的概念。
COM 是 PC(个人计算机)上,异步串行通信口的简写。由于历史原因, IBM 的 PC 外部接口配置为 RS232 ,成为实际上的 PC 界默认标准。所以,现在 PC 机的 COM 均为 RS232 。若配有多个异步串行通信口,则分别称为 COM1 、 COM2 … 。
异步串行通信
异步串行通信是一种串行通信,其通信的端点不是被共同的时钟信号持续对齐。在每个数据单元传输时,数据流自带同步信息(开始信号与停止信号)。
+
RS-232 传输 ASCII 码字节时,就常采用这种方式。
使用异步串行通信,发送方与接收方必须就下述问题达成协议:
- 全双工还是半双工
- 每个字符的比特数
- 比特序,即哪个比特先发送
- 线路的每秒比特速率。有些系统能自动检测速率
- 是否使用奇偶校验位
- 如果使用奇偶校验位,是奇校验还是偶校验
- 停止比特的最低数量
异步串行通信的开始/停止比特在物理层用于计算机与调制解调器的通信,数据链路使用帧协议如PPP。相比于同步访问的性能随时可以忽略。

UART 原理
通用异步接收器-发送器(UART)把数据的字节按照比特顺序发送。另一端的 UART 把比特组装为字节。每个 UART 包含一个移位寄存器。通过一根线或其他介质的串行通信比通过多根线的并行通信具有更低的成本。 UART 通常并不直接产生或接收其他设备的外部信号。独立接口设备用于转换信号的逻辑电平给 UART 。通信可以是单工、全双工或半双工。
数据帧

空闲状态,即没有数据传输,是高电平。这是从(有线)电报时代的历史遗存。线路保持高电平表明线路与传输设备没有损坏。每个字符表示为一个帧,以逻辑低电平为开始比特,然后是数据比特,可选的奇偶校验比特,最后是一个或多个停止比特(逻辑高电平)。大部分应用都是先传最低位的数据比特(the least significant data bit),但也有例外(如IBM 2741打印终端)。
如果线路长期(至少大于传输一帧的时间)保持低电平,这被UART检测为Break condition.
接收器
UART 硬件受一个内部时钟信号控制。该时钟信号是数据传输率的倍频,典型是比特率的 8 或 16 倍。接收器在每个时钟脉冲时测试接收到的信号状态是否为开始比特。如果开始比特的低电平持续传输1个比特所需时间的一半以上,则认为开始了一个数据帧的传输;否则,则认为是毛刺脉冲并忽略。到了下一个比特时间后,线路状态被采样并送入移位寄存器。约定的表示一个字符的所有数据比特(典型为 5 至 8 个比特)接收后,移位寄存器可被接收系统使用。 UART 将设置一个标记指出新数据可用,并产生一个处理器中断请求主机处理器取走接收到的数据。
简化的 UART 在开始比特下降沿开始重新同步时间,然后在每个数据比特的中心时刻采样。
UART 的标准特性之一是在接收下一个字符时在缓冲区保存上一个接收到的字符。这种“双缓冲区”允许接收计算机用一个字符的传输时段来获取缓冲区内的上一个字符。许多 UART 有更大的 FIFO 缓冲区,允许主机一次处理多个字符,这特别适用于高传输数据率的串行通信同时处理器中断频率有限(通常中断间隔大于1毫秒)。
发送器
UART 把一个字符放入移位寄存器,就开始产生一个数据帧。对于全双工通信,发送与接受使用不同的移位寄存器。使用更大的 FIFO 使得主机处理器或 DMA 放置多个字节后由 UART 自主完成传输。 UART 用一个标志位表示 busy 。
应用
接收与发送的 UART 必须达成数据帧协议。如果接收方发现这方面错误,会向主机报告 “framing error” 标志。
典型的连接 modem 的串口,使用8个比特表示一个字节,没有奇偶校验位, 1 个停止位。比特率除以 10 就是发送 ASCII 字符的传输速率。
超低成本的嵌入式系统没有 UART 而是用处理器来实现异步串行通信。