1. UART 基础概念

UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)是嵌入式系统中最基础、最常用的串行通信接口之一。它通过两根信号线(TX 和 RX)实现设备间的全双工数据交换,无需共享时钟信号,因此被称为“异步”通信。理解 UART 的协议原理、帧格式和波特率配置,是后续驱动开发(轮询→中断→DMA)的基石。

1.1 串行通信原理

串行通信与并行通信的核心区别在于:串行通信逐位发送数据,而并行通信同时发送多位。UART 属于串行通信,其物理层仅需两条数据线(TX 发送、RX 接收)和一条公共地线(GND)。

关键特性: 异步、全双工、点对点、无时钟线。
通信方式 数据线数量 时钟同步 传输距离 典型应用
UART(异步串行) 2(TX + RX) 无(需双方约定波特率) 中(1~15m) 调试串口、传感器、GPS 模块
SPI(同步串行) 4(SCLK + MOSI + MISO + CS) 有(主设备提供时钟) 短(板级) Flash、ADC、显示屏
I²C(同步串行) 2(SCL + SDA) 有(主设备提供时钟) 短(板级) EEPROM、传感器、RTC
并行通信 ≥8(数据线 + 控制线) 有 极短(板级) 旧式打印机、并口存储器

UART 的异步特性意味着发送方和接收方必须预先约定相同的波特率,才能正确采样每一位数据。接收端通过检测起始位的下降沿来同步位采样时钟。

串行通信 vs 并行通信 串行通信(UART) 发送端 TX 接收端 RX TX→RX 接收端 RX 发送端 TX TX→RX 逐位传输,2 线全双工 无时钟线,需约定波特率 并行通信 发送端 接收端 8 位同时传输 需要时钟线 传输距离短

1.2 UART 数据帧格式

UART 协议以“帧”为单位传输数据。一个标准的数据帧由以下部分组成:

  1. 起始位(Start Bit): 逻辑低电平(0),标志一帧的开始,用于接收端同步位采样时钟。
  2. 数据位(Data Bits): 通常为 5~9 位,常见配置为 8 位。低位(LSB)先发送。
  3. 校验位(Parity Bit): 可选,用于简单的错误检测。支持无校验(None)、奇校验(Odd)、偶校验(Even)、强制 0/1(Mark/Space)。
  4. 停止位(Stop Bit): 逻辑高电平(1),标志一帧结束。常见配置为 1 位、1.5 位或 2 位。
字段 位宽 电平 说明
起始位 1 bit 低(0) 帧同步信号,下降沿触发接收采样
数据位 5~9 bits LSB 先发 实际传输的有效数据,常用 8 位
校验位 0 或 1 bit 取决于校验方式 奇偶校验:使 1 的个数为奇数/偶数
停止位 1 / 1.5 / 2 bits 高(1) 帧结束标志,保证帧间有恢复时间
常见配置: 8N1(8 数据位、无校验、1 停止位)是嵌入式开发中最通用的 UART 帧格式,也是 Linux 串口驱动的默认配置。
UART 数据帧结构(8N1 示例) 起始位 0 D0 (LSB) D1 D2 D3 D4 D5 D6 D7 (MSB) 校验位 (可选) 停止位 1 LSB 先发,停止位后可能跟空闲高电平

1.3 波特率

波特率(Baud Rate)定义每秒传输的符号数。在 UART 中,一个符号对应一个 bit,因此波特率等于比特率(bps)。常见波特率包括:

  • 9600 bps: 最经典的标准,广泛用于调试终端、老旧设备。
  • 115200 bps: 嵌入式开发中最常用的高速串口波特率,兼顾速度与稳定性。
  • 921600 bps / 1 Mbps: 用于高速数据传输,如固件升级、日志输出。

波特率决定了每一位的持续时间:

位时间 (s) = 1 / 波特率

示例:波特率 115200 bps
位时间 = 1 / 115200 ≈ 8.68 μs
一帧(8N1)总时间 = 10 bits × 8.68 μs ≈ 86.8 μs
理论最大吞吐 ≈ 11520 字节/秒
常见误区: 波特率越高,传输距离越短,对时钟精度要求越高。在长线传输或噪声环境中,应适当降低波特率。

1.4 硬件信号与连接

标准 UART 接口至少包含以下信号:

信号 方向 说明
TX 输出 发送数据线
RX 输入 接收数据线
GND 公共地 信号参考地,必须连接
RTS / CTS 输出 / 输入 硬件流控(可选),用于防止数据溢出

连接时需注意交叉连接:设备 A 的 TX 接设备 B 的 RX,设备 A 的 RX 接设备 B 的 TX。GND 必须相连,否则信号无法形成回路。

UART 设备连接(交叉连接) 设备 A TX RX 设备 B RX TX TX → RX TX → RX GND(公共地)

1.5 流控机制

UART 提供两种流控方式,用于防止接收端数据溢出:

  • 硬件流控(RTS/CTS): 通过专用信号线实现。接收端准备就绪时置高 RTS,发送端检测 CTS 为高时才发送数据。
  • 软件流控(XON/XOFF): 通过发送特殊字符(0x11 XON、0x13 XOFF)控制数据流,无需额外引脚,但仅适用于文本传输。
驱动开发提示: 在 Linux 内核中,UART 驱动通过 termios 结构体配置波特率、帧格式和流控模式。后续章节将深入讲解如何操作 UART 控制器寄存器。

1.6 本章小结

UART 作为异步串行通信协议,其核心要素包括:

  • 串行逐位传输,仅需 TX、RX、GND 三线即可实现全双工通信。
  • 数据帧由起始位、数据位(LSB 先发)、可选校验位和停止位组成。
  • 波特率决定位传输速率,收发双方必须一致。
  • 硬件/软件流控可选,用于协调数据收发节奏。