2. 串口基础回顾:UART协议帧格式、波特率、起始位/数据位/停止位/校验位详解
在深入低功耗设计之前,必须彻底理解UART(通用异步收发传输器)的物理层协议。UART是一种异步串行通信协议,这意味着它不需要单独的时钟线来同步发送方和接收方,而是通过预定义的波特率和帧格式来确保数据正确传输。
2.1 UART协议帧格式
一个标准的UART数据帧由以下部分组成:
- 空闲位(Idle):当总线没有数据传输时,TX线保持高电平(逻辑1)。
- 起始位(Start Bit):发送方将TX线从高电平拉低(逻辑0),通知接收方“准备接收数据”。
- 数据位(Data Bits):紧随起始位之后,通常为5~9位,最常见的是8位(LSB优先发送)。
- 校验位(Parity Bit):可选,用于简单的错误检测(奇校验或偶校验)。
- 停止位(Stop Bit):将TX线拉回高电平(逻辑1),表示帧结束。长度通常为1、1.5或2位。
关键概念:UART的“异步”特性意味着接收方必须依靠起始位的下降沿来重新同步其内部时钟。如果波特率误差超过±2%,数据采样将出现位偏移,导致通信失败。
2.2 波特率详解
波特率(Baud Rate)定义了每秒传输的符号数。在UART中,一个符号通常对应一个比特,因此波特率等于比特率(bps)。
| 波特率 (bps) | 位时间 (μs) | 传输1字节耗时 (8N1) | 典型应用场景 |
|---|---|---|---|
| 9600 | 104.17 | ≈1.04 ms | 调试终端、GPS模块 |
| 115200 | 8.68 | ≈86.8 μs | 蓝牙模块、传感器数据流 |
| 921600 | 1.09 | ≈10.9 μs | 高速数据采集、固件升级 |
| 3000000 | 0.33 | ≈3.3 μs | 内部芯片间通信(短距离) |
低功耗设计要点:波特率越高,单位时间传输的数据量越大,MCU可以更快地进入休眠状态。但高波特率对时钟精度要求更高,且信号在长距离传输时更容易衰减。在电池供电系统中,建议在满足通信距离的前提下,优先选择115200或更高的波特率。
2.3 起始位与停止位
起始位和停止位是UART帧的“帧同步”机制:
- 起始位(Start Bit):固定为逻辑0(低电平)。接收方通过检测到下降沿(从空闲高电平跳变到低电平)来启动内部采样时钟。
- 停止位(Stop Bit):固定为逻辑1(高电平)。接收方在停止位结束时,必须检测到高电平,否则将产生帧错误(Framing Error)。
停止位的长度可以配置为1、1.5或2位。在低功耗设计中,使用1位停止位可以最小化帧开销,提高有效数据吞吐量。
2.4 数据位与字节序
数据位通常配置为8位(1字节),但也可以配置为5、6、7或9位。UART协议规定LSB(最低有效位)优先发送。例如,发送字节 0x53(二进制 0101 0011)时,实际发送顺序为:
起始位 → 1 → 1 → 0 → 0 → 1 → 0 → 1 → 0 → 停止位
(D0) (D1) (D2) (D3) (D4) (D5) (D6) (D7)
常见陷阱:许多初学者误以为UART发送的是MSB优先。如果使用逻辑分析仪抓取波形,请务必确认LSB优先的规则,否则会得到反向的字节值。
2.5 校验位:奇校验与偶校验
校验位提供简单的错误检测能力。发送方根据数据位中“1”的个数,自动计算并插入校验位:
| 校验类型 | 规则 | 示例(数据位 0x53 = 0101 0011,含4个1) |
|---|---|---|
| 无校验 (N) | 不发送校验位 | 帧长度 = 1 + 8 + 1 = 10位 |
| 奇校验 (O) | 使总“1”个数为奇数 | 数据位有4个1(偶数),校验位=1,总1个数=5(奇数) |
| 偶校验 (E) | 使总“1”个数为偶数 | 数据位有4个1(偶数),校验位=0,总1个数=4(偶数) |
| 标记校验 (M) | 校验位固定为1 | 较少使用,不提供错误检测 |
| 空格校验 (S) | 校验位固定为0 | 较少使用,不提供错误检测 |
低功耗建议:在噪声环境较好的板级通信中,建议关闭校验位(8N1格式),以减少每帧的传输时间,从而让MCU更早进入休眠。如果通信环境存在干扰,使用偶校验可以在不显著增加功耗的前提下提供基本的错误检测。
2.6 常见UART配置速查表
以下是最常用的UART帧格式配置及其应用场景:
| 配置名称 | 数据位 | 校验位 | 停止位 | 帧长度 | 典型应用 |
|---|---|---|---|---|---|
| 8N1 | 8 | 无 | 1 | 10位 | 最通用,低功耗首选 |
| 8E1 | 8 | 偶校验 | 1 | 11位 | 工业总线、Modbus RTU |
| 8O1 | 8 | 奇校验 | 1 | 11位 | 某些旧式设备兼容 |
| 7E1 | 7 | 偶校验 | 1 | 10位 | ASCII文本传输(0-127) |
| 9N1 | 9 | 无 | 1 | 11位 | 多机通信地址位标记 |
2.7 硬件流控:RTS/CTS
除了基本的帧格式,UART还支持硬件流控(RTS/CTS)来防止数据溢出:
- RTS(请求发送):接收方拉低RTS信号,表示“可以发送数据”。
- CTS(清除发送):发送方检测CTS信号,如果为低电平则允许发送,否则暂停发送。
低功耗设计关联:在DMA+空闲中断的协同策略中,硬件流控可以防止接收缓冲区溢出,避免因数据丢失而触发额外的重传和唤醒。建议在高速通信(≥921600 bps)时启用RTS/CTS流控。