2、串口通信基础:串行通信与并行通信的区别、同步与异步通信的概念、UART全称及历史沿革
串口通信(Serial Communication)是嵌入式系统、工业控制、传感器采集和计算机外设交互中最基础、最广泛的通信方式之一。理解串口通信,首先需要厘清几个核心概念:串行与并行、同步与异步,以及UART这一经典协议的来龙去脉。本章将从通信的本质出发,逐步拆解这些基础概念,帮助读者建立清晰的通信知识框架。
2.1 串行通信与并行通信的本质区别
通信的本质是信息在发送端与接收端之间的传递。根据数据位在传输介质上的排列方式,通信可分为串行通信与并行通信两大类。串行通信将数据字的各个比特位按顺序逐位发送,而并行通信则通过多条数据线同时发送多个比特位。以8位数据为例,并行通信需要8根数据线外加必要的控制线,而串行通信仅需1根数据线(半双工)或2根数据线(全双工)。
从工程实践角度,并行通信的优势在于单位时间内可传输的数据量更大,适合短距离、高速率场景,如早期的打印机并口(IEEE 1284)、存储器总线等。然而,并行通信存在两个显著问题:一是线缆成本高、占用PCB面积大;二是高速并行传输时,各数据线之间的信号偏移(Skew)和串扰(Crosstalk)会严重限制传输距离和速率。相比之下,串行通信虽然单次传输的数据量小,但通过提高时钟频率和差分信号技术,其总吞吐率已远超并行通信,例如PCIe、USB、SATA等高速串行总线已全面取代并行总线。
| 对比维度 | 串行通信 | 并行通信 |
|---|---|---|
| 数据传输方式 | 逐位顺序传输 | 多比特同时传输 |
| 所需信号线 | 1~2根(数据+地) | 8~64根(数据+控制) |
| 传输距离 | 可达数十米(RS-485) | 一般不超过数米 |
| 抗干扰能力 | 强(差分信号更佳) | 弱(易受线间串扰) |
| 典型应用 | UART、SPI、I2C、USB、PCIe | 旧式打印机并口、存储器总线 |
| 成本 | 低(线缆少、连接器小) | 高(线缆粗、连接器大) |
2.2 同步通信与异步通信的概念辨析
同步与异步的区分核心在于时钟信号的传递方式。同步通信要求发送端和接收端共享同一个时钟信号,数据在时钟边沿被采样,因此收发双方严格同步。典型的同步通信协议包括I2C(带SCL时钟线)、SPI(带SCLK时钟线)以及同步串行接口。同步通信的优点是传输效率高、协议简单,因为接收端无需恢复时钟;缺点是必须额外布置时钟线,且时钟频率受限于传输距离和线间电容。
异步通信则不需要共享时钟线,收发双方各自使用独立的本地时钟,通过约定的波特率(Baud Rate)来保证采样时刻的一致性。UART就是最典型的异步通信协议。异步通信的每个字符帧包含起始位、数据位、校验位(可选)和停止位。接收端通过检测起始位的下降沿来同步本地采样时钟,从而实现帧同步。异步通信的优势在于仅需两根信号线(TX和RX)即可实现全双工通信,且无需时钟线,布线简单;缺点是每个字符帧需要额外的起始位和停止位,有效数据率约为80%~87%,且收发双方的波特率误差必须控制在±2%以内(通常要求±1%)。
2.3 UART全称及历史沿革
UART的全称是Universal Asynchronous Receiver/Transmitter,即通用异步收发器。它既指一种通信协议,也指实现该协议的硬件模块(通常是芯片内部的一个外设IP核或独立芯片,如经典的8250、16550)。UART的历史可以追溯到20世纪60年代,最初由DEC公司为其PDP系列小型机开发,用于连接电传打字机(Teletype)和调制解调器(Modem)。1978年,National Semiconductor推出了业界著名的8250 UART芯片,随后被IBM PC采用,成为PC串口(COM口)的标准实现。1987年,16550 UART问世,增加了16字节的FIFO缓冲区,大幅降低了CPU中断频率,至今仍在工业界广泛使用。
UART的协议层定义非常简洁:空闲时TX线保持高电平;发送数据时先拉低一个位时间作为起始位,然后从最低位(LSB)开始依次发送5~8个数据位,可选发送1位奇偶校验位,最后发送1~1.5或2个停止位(高电平)。这种帧格式设计使得接收端无需外部时钟即可完成字节同步,且实现成本极低。UART的物理层标准则由RS-232、RS-422、RS-485等规范定义,其中RS-232使用±12V电平,传输距离约15米;RS-485使用差分信号,传输距离可达1200米,且支持多点组网。
2.4 实战场景:MCU间UART通信的帧格式设计
假设我们需要在两块STM32单片机之间通过UART实现传感器数据的可靠传输,波特率设定为115200bps,数据格式为8N1(8数据位、无校验、1停止位)。初始现象是:接收端偶尔出现乱码,且数据错位后长时间无法恢复。
分析判断过程如下:首先,检查波特率误差。STM32的USART外设时钟来自APB总线(通常为72MHz或84MHz),通过USARTDIV分频得到波特率。若APB时钟为72MHz,要得到115200bps,分频系数为72,000,000 / (16 × 115200) = 39.0625,取整为39,实际波特率为72,000,000 / (16 × 39) = 115,384.6bps,误差约0.16%,在允许范围内。其次,检查帧格式是否匹配——确认双方都配置为8N1。最后,检查信号线连接——TX接RX、RX接TX、GND共地。
实际操作步骤:
- 使用逻辑分析仪抓取TX引脚波形,确认起始位下降沿、数据位电平、停止位高电平是否符合预期。
- 在接收端代码中增加帧超时检测:若超过3个字符时间未收到完整帧,则强制重新同步。
- 在数据帧中加入帧头(如0xAA 0x55)和CRC校验字节,接收端校验失败则丢弃该帧并等待下一帧头。
结果对比:增加帧同步机制后,乱码率从约2%降至0.01%以下,且即使发生单字节错误,也能在下一帧恢复同步。风险与代价是:帧头+CRC增加了约20%的协议开销,但对于传感器数据采集场景,吞吐量仍远高于实际需求。
2.5 常见误区与总结复盘
在串口通信的学习与调试中,以下误区最为常见:
- 误区一:串行通信一定比并行通信慢。事实上,现代高速串行总线(PCIe 5.0单通道速率32GT/s)远超并行总线。串行通信通过差分信号和多电平编码(如PAM4)实现了极高的频谱效率。
- 误区二:异步通信不需要时钟。异步通信的收发双方各自有独立的时钟源,只是没有单独的时钟线。波特率就是双方约定的“虚拟时钟”频率。
- 误区三:UART就是RS-232。UART是协议层(帧格式、波特率),RS-232是电气层(电平标准)。UART可以通过RS-232、RS-485、TTL等不同物理层传输。
- 误区四:校验位能保证数据可靠。奇偶校验只能检测奇数个比特错误,无法纠错,且对偶数个比特错误完全无效。工程中应使用CRC或更高级的校验机制。