Edit online

UART 使用指南

3 Dec 2024
Read time: 5 minute(s)

通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作 UART,是一种通用串行数据总线。

串行通信是指利用一条传输线将数据一位位地顺序传送,通信线路非常简单。

UART 为双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART 用于主机与辅助设备通信,如汽车音响与外接 AP 之间的通信,也用于 PC 机通信包括与监控调试器和其它器件,如 EEPROM 通信。

在 UART 上追加同步方式的序列信号变换电路的产品,被称为 USART (Universal Synchronous Asynchronous Receiver Transmitter)

1. 术语定义
术语 定义 注释说明
UART Universal Asynchronous Receiver/Transmitter 通用异步收发传输器
TTL Transistor-Transistor Logic 逻辑门电路
DCD Data Carrier Detect 载波侦听
DTR Data Terminal Ready 数据终端准备好
DSR Data Set Ready 数据准备好
RTS Request To Send 请求发送
CTS Clear To Send 清除发送
RI Ring Indicator 响铃指示
THR Transmit Holding Register 发送保持寄存器
RBR Receive Buffer Register 接收缓冲寄存器
ACPI Advanced Configuration and Power Interface 高阶配置和电源接口

模块特性

  • 兼容工业标准 16550 UART

  • 256x8bit 发送与接收 FIFO

  • 传输速度可达 3 Mbps

  • 支持 5-8 数据位以及 1/1 ½/2 停止位

  • 支持奇校验,偶校验或者无奇偶校验

  • 支持 DMA 控制器接口

  • 支持软件/硬件流控

  • 支持 IrDA 1.0 SIR

  • 支持 RS-485/9bit 模式

  • RS-485 支持硬件使能

  • Compact-IO 精简 2 线模式

通信协议

UART 作为异步串行通信协议的一种,工作原理是将传输数据的每个字符一位接一位地传输。其协议中添加了一些特殊的表示位:

  • 起始位 Start bit

    先发出一个逻辑“0”的信号,表示传输字符的开始

  • 数据位 Data bits

    紧接着起始位之后。数据位的个数可以是 4、5、6、7、8 等,构成一个字符。通常采用 ASCII 码。从最低位开始传送,靠时钟定位。

  • 奇偶校验位 Parity

    数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验数据传送的正确性。

  • 停止位 Stop bits

    它是一个字符数据的结束标志。可以是 1 位、1.5 位、2 位的高电平。 由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。停止位的位数越多,时钟同步的容忍程度越大,但是数据传输率会越慢

  • 流控 Flow contorl

    管理两个节点之间数据传输速率的过程,以防止出现接收端的数据缓冲区已满,而发送端依然继续发送数据,所导致数据丢失,我们会在一些上位机上看到 RTS /CTS、DTR /DSR 和 XON /XOFF 的选项,这是对流控制的选项

  • 空闲位

    处于逻辑“1”状态,表示当前线路上没有数据传送,该位为协议位,自动产生

  • 波特率 BaudRate

    是衡量数据传送速率的指标。表示每秒钟传送的 bit 数。比如波特率 115200,表示传输速率是 115200 bps

  • 串口、COM 口是指的物理接口形式(硬件)。

  • TTL、RS-232、RS-485 是指的电平标准(电信号)。

参数信息

在 UART 进行通信的时候,双方需要协商相关参数,否则无法进行信息解析,因此在通信之初,需要对所使用的工具设置上述的所有参数


uart-param1

常用接口

串口、COM 口是指的物理接口形式(硬件)。TTL、RS-232、RS-485 是指的电平标准(电信号)。
  • TTL
    • TTL 标准是低电平(0V)为 0,高电平(+5V)为 1。

    • TTL 接口需要对端接口也为 TTL,但诸如 PC 等设备无 TTL 接口的 UART 口,一般转 TTL 为 USB 等 PC 更通用的接口。

    • TTL 接口为全双工,连接设备的时候一般只接 GND/RX/TX。不会接 Vcc 或者 +3.3v 的电源线,避免与目标设备上的供电冲突,但 GND 可以保证源设备和目标设备供地,有助于信号稳定。

    • 信号线采用交叉的方式,即源端的 RX 连接目标设备的 TX,源端的 TX 连接目标设备的 RX。

  • RS232
    • RS232 标准是正电平(+3V~+15V)为 0,负电平(-13V~-15V)为 1。

    • RS232 接口在总线上只允许连接 1 个收发器,单站能力。

    • RS232 传输线采用屏蔽双绞线,最高传输距离一般为 15M,最大速率为 20Kbps。

    • RS232 接口为全双工,连接设备的时候一般只接 GND/RX/TX。

    • 信号线也采用交叉的方式,即源端的 RX 连接目标设备的 TX,源端的 TX 连接目标设备的 RX。

  • RS422
    • RS422 标准采用差分信号负逻辑,逻辑“1”以两线间的电压差为+(2—6)V 表示。逻辑“0”以两线间的电压差为-(2—6)V 表示。接口信号电平比 RS232 降低了,就不易损坏接口电路的芯片,且该电平与 TTL 电平兼容,可方便与 TTL 电路连接。

    • RS422 接口在总线上是允许连接多达 128 个收发器,多站能力。

    • RS422 的数据最高传输速率为 10Mbps,100 米长双绞线的最大速度为 1Mb/s。

    • RS422 采用平衡发送和差分接收,因此具有抑制共模干扰的能力。RS422 接口的最大传输距离标准值为 4000 英尺(约 1219 米),实际上可达 3000 米。

    • RS422 是全双工,连接设备的时候一般接 RX+/RX-/TX+/TX-/GND。

    • 信号线也采用交叉的方式,即源端的 RX-/RX+ 连接目标设备的 TX-/TX+,源端的 TX-/TX+ 连接目标设备的 RX-/RX+。

  • RS485
    • RS485 的电气性能和 RS422 完全一样,主要区别是 RS485 是半双工。连接设备的时候一般接 A-/A+/GND,DB9 接口定义了两组,同时必须使用同一组的+/-。

    • 信号线也采用交叉的方式,即源端的 A- 连接目标设备的 A-,源端的 A+ 连接目标设备的 A+。

插头

公母之分
  • 针形的为公头,孔形的为母头

  • PC 串口一般为公头,设备的一般为母头


port-male1

RS232DB9 的信号分分四组:
  • DCD/RI:电气 Ready 参数

  • DTR/DSR:模块 Ready 参数

  • RTS/CTS:流控参数

  • RXD/TXD:数据收发

针序 RS232 说明 RS422 说明 RS485 说明
1 DCD 数据载波检测 RXD- 接收 A- 组 1
2 RXD 接收数据 - - - -
3 TXD 发送数据 - - - -
4 DTR 数据终端准备好 TXD+ 发送 A+ 组 2
5 GND 信号地 GND 信号地 GND 信号地
6 DSR 数据准备好 RXD+ 接收 A+ 组 1
7 RTS 请求发送 RTS 请求发送 RTS 请求发送
8 CTS 清除发送 CTS 清除发送 CTS 清除发送
9 RI 响铃指示 TXD- 发送 A- 组 2

流控

这里讲到的 “流”,指的是数据流。在数据通信中,流控制是管理两个节点之间数据传输速率的过程,以防止出现接收端的数据缓冲区已满,而发送端依然继续发送数据,所导致数据丢失。

当接收端的数据缓冲区已满,无法处理数据来时,就发出 “不再接收” 的信号,发送端则停止发送,直到发送端收到 “可以继续发送” 的信号再发送数据。

计算机中常用的两种流控制分别是硬件流控制(RTS /CTS、DTR /DSR 等)和软件流控制(XON /XOFF)。
  • 硬件流控

    RTS/CTS 属于硬件握手的一种,最初是设计为电传打字机和调制解调器半双工协作通信的,每次它只能一方调制解调器发送数据。终端必须发送请求发送信号然后等到调制解调器回应清除发送信号。


    flowctrol1

  • 软件流控

    软件流控制(Software flow control)是在计算机数据链路中的一种流控制方法,特别适用于 RS232 串口通信。它是采用特殊字符来传输带内信令,特殊编码字符称作 XOFF 与 XON(分别表示 “transmit off” 与 “transmit on”)。因此,也被称作 “XON /XOFF 流控制”。

    码的名字 含义 ASCII 十进制 十六进制
    XOFF 暂停传输 DC3 19 13
    XON 恢复传输 DC1 17 11

    A 端的 DTR(数据设备就绪)发出信号, 当 B 端准备好后,B 端的 DTR(数据设备就绪)向 A 端的 DSR(通讯设备就绪)发出信号。 接下来就可以通过 RTS(请求发送)和 DTR(允许发送)来控制通信。

RAW 模式

UART 作为 tty 设备工作的时候,有两种工作方式:

  • Canonical Input

    RX 端接收到数据之后不会直接反馈给用户态的 read 函数,而是要一直等到一个回车,意即对一些特殊字符进行语意解析

  • Raw Input

    RX 端接收到什么直接返回到用户空间的 read 函数里面

两种工作模式均为 kernel 层逻辑,和驱动/硬件无关,对于普通的 uart 应用,建议 Canonical 方式,对于 RS485 应用,建议使用 Raw 方式,二者通过 termios 的 lflag 参数的 ICANON 位进行区分。