2、通信基础概念:串行与并行、同步与异步、全双工与半双工、波特率与比特率、电平标准(TTL/CMOS/RS232/RS485)

在深入I2C、SPI、UART、CAN等具体协议之前,必须先建立一套统一的“通信语言”框架。嵌入式系统中的通信本质上是设备之间交换数据,而交换的方式、节奏、方向以及电气特性,决定了协议的效率、可靠性和适用场景。本章将拆解五个最核心的基础概念:串行与并行、同步与异步、全双工与半双工、波特率与比特率、电平标准。这些概念不是孤立的定义,而是相互关联的工程决策要素。例如,选择同步还是异步,直接决定了是否需要额外的时钟线;选择RS485还是TTL,则决定了通信距离和抗干扰能力。理解这些底层逻辑,是后续分析I2C(同步半双工)、SPI(同步全双工)、UART(异步全双工)和CAN(异步半双工)协议特性的前提。

通信基础概念关系与工程映射图 通信基础概念 串行 vs 并行 串行:1根数据线逐位传输 并行:多根数据线同时传输 → 引脚数 / 速率 / 抗干扰 同步 vs 异步 同步:共享时钟SCLK/SCL 异步:无时钟线,波特率约定 → 时钟线 / 起始位 / 误差容限 全双工 vs 半双工 全双工:独立TX/RX同时收发 半双工:共享总线分时收发 → 数据线数量 / 冲突仲裁 波特率 vs 比特率 波特率:符号/秒 (Baud) 比特率:bit/s (bps) → 调制 / 编码 / 有效数据率 电平标准 TTL(5V/3.3V) / CMOS / RS232(±12V) / RS485(差分) → 电压域 / 逻辑阈值 / 通信距离 → 电平转换芯片选型 I2C(同步半双工) | SPI(同步全双工) | UART(异步全双工) | CAN(异步半双工差分)

上图展示了本章五个核心概念之间的逻辑关系以及它们与后续具体协议的映射。可以看到,每一个概念都对应着一组工程权衡:串行节省引脚但速率受限,并行速率高但占用资源多;同步依赖时钟信号,异步依赖双方约定;全双工需要独立收发通道,半双工则需仲裁机制。电平标准则决定了物理层的电气接口。下面逐一深入解析。

2.1 串行与并行:引脚资源与传输速率的权衡

核心原理

串行通信(Serial Communication)是指数据在一根数据线上按位(bit)顺序传输,如同单车道公路,车辆(数据位)依次通过。并行通信(Parallel Communication)则使用多根数据线,每个位同时传输,如同多车道公路。在嵌入式系统中,串行接口(如UART、SPI、I2C)通常只需要2-4根信号线,而并行接口(如并口NOR Flash、旧式打印机接口)需要8位、16位甚至32位数据线加上地址线和控制线。

从电磁兼容性(EMC)角度看,并行总线在高速切换时会产生严重的信号间串扰(Crosstalk)和同步开关噪声(SSN),而串行差分信号(如RS485、CAN)则具有更好的抗干扰能力。因此,现代高速接口(USB、PCIe、SATA)全部采用串行差分架构,通过提高时钟频率来弥补位宽劣势。

判断方法或操作流程

在实际项目中选择串行还是并行,可以遵循以下决策流程:

  1. 评估数据吞吐量需求:计算峰值数据率(如传感器每秒产生10KB数据),若低于1Mbps,串行接口通常足够。
  2. 统计可用GPIO资源:MCU引脚数量是否紧张?若剩余引脚少于5个,优先选择串行(I2C只需2根,SPI需3-4根)。
  3. 考虑PCB布局与布线空间:并行总线需要等长布线,在紧凑的4层板设计中难度较大;串行总线布线简单。
  4. 检查是否有现成外设:多数MCU内置多个UART/SPI/I2C外设,而并行接口往往需要占用大量GPIO模拟时序。

案例拆解:LCD屏接口选型

某产品需要驱动一块240×320分辨率的TFT-LCD,颜色深度16位,帧率30fps。计算原始数据量:240×320×16×30 = 36,864,000 bps ≈ 36.9Mbps。若使用8位并行接口,需要时钟频率至少4.6MHz(36.9/8),加上行场同步信号,共需约12根信号线。而若改用SPI接口(假设支持SPI模式),最大时钟通常为20MHz,但SPI是串行传输,实际有效数据率仅为20Mbps,无法满足需求。因此,该场景必须选择并行RGB接口或MIPI DSI(串行差分,但速率极高)。反之,若仅驱动一个128×64的单色OLED,数据量仅为128×64×1×10 = 81,920bps,使用SPI或I2C绰绰有余。

经验总结:串行与并行的选择不是“谁更好”,而是“谁更合适”。在低速率、长距离、引脚受限的场景下,串行是唯一选择;在高速率、短距离、引脚充裕的场景下,并行仍有一席之地。但趋势是串行接口通过提高速率(如SPI时钟达到50MHz以上)正在逐步替代部分并行应用。

2.2 同步与异步:时钟信号的角色

核心原理

同步通信(Synchronous)要求发送方和接收方共享同一个时钟信号。发送方在时钟的上升沿或下降沿驱动数据,接收方在相同的时钟沿采样数据。典型代表是SPI(SCLK时钟线)和I2C(SCL时钟线)。同步通信的优点是时序关系明确,传输速率可以很高(SPI可达几十MHz),且不需要复杂的起始位和停止位。缺点是必须额外占用一根时钟线,且通信双方必须严格遵循时钟极性(CPOL)和相位(CPHA)配置。

异步通信(Asynchronous)不传输时钟信号,而是通过双方预先约定的波特率(Baud Rate)来采样数据。典型代表是UART。发送方以约定的波特率逐位发送,接收方以相同波特率在每位数据的中心点采样。为了确保同步,异步通信在数据帧前添加起始位(低电平),在帧尾添加停止位(高电平)。异步通信的优点是只需两根数据线(TX/RX),节省引脚;缺点是波特率误差必须控制在±2%以内,且无法实现超高速传输(通常不超过1Mbps)。

判断方法或操作流程

选择同步还是异步,可以从以下三个维度判断:

  • 距离与时钟完整性:如果通信距离超过1米,时钟信号容易衰减和畸变,此时异步通信(如UART转RS232/RS485)更可靠。
  • 数据帧结构:如果数据是连续流(如音频流),同步通信更高效;如果是离散命令(如寄存器读写),异步通信的帧格式更灵活。
  • 硬件资源:同步通信需要额外的时钟引脚,异步通信需要双方精确的晶振(通常为8MHz、12MHz等整数倍)。

案例拆解:MCU与Wi-Fi模块通信

某物联网节点使用ESP8266 Wi-Fi模块,与主控MCU(STM32)通信。ESP8266支持UART和SPI两种接口。若使用UART,波特率设为115200bps,则每字节传输时间约为87μs(含起始位和停止位),对于发送AT指令和接收TCP数据足够。但若需要高速传输固件升级包(如1MB),UART需要约87秒,而SPI接口(时钟10MHz)仅需约0.8秒。实际项目中,考虑到ESP8266的SPI从机模式时序复杂,且固件升级不频繁,最终选择UART。若升级频繁,则需改用SPI并处理DMA传输。

风险提示:异步通信的波特率误差是常见故障点。例如,若发送方波特率为115200,接收方实际为115200×1.02=117504,则每帧数据(10位)的累积误差为2%,在数据位中间采样时可能错位。因此,通信双方应使用精度不低于±1%的晶振,并避免使用内部RC振荡器进行高速异步通信。

2.3 全双工与半双工:数据流向的通道设计

核心原理

全双工(Full-Duplex)允许数据同时双向传输,需要独立的发送通道和接收通道。典型代表是UART(TX/RX独立引脚)和SPI(MOSI/MISO独立数据线)。全双工的优势是吞吐量高,无需切换方向,适合实时性要求高的场景(如音频采样回传)。半双工(Half-Duplex)则共享同一物理通道,数据只能单向传输,需要切换方向。典型代表是I2C(SDA双向数据线)和CAN(CANH/CANL差分总线)。半双工的优势是节省引脚和布线,但需要额外的仲裁机制(如I2C的时钟同步和CAN的位仲裁)来避免冲突。

判断方法或操作流程

判断一个协议是全双工还是半双工,最简单的方法是查看其物理层是否有独立的发送和接收引脚。例如:

协议数据线方向类型
UARTTX, RX独立全双工
SPIMOSI, MISO独立全双工
I2CSDA共享半双工
CANCANH, CANL差分共享半双工

案例拆解:多传感器数据采集系统

一个数据采集系统需要同时读取温度传感器(I2C接口)和加速度计(SPI接口)。温度传感器数据更新率1Hz,数据量小,使用I2C半双工即可,因为每次读取只需发送寄存器地址并接收2字节数据,总线占用时间极短。加速度计输出2000Hz的3轴数据,每轴16位,总数据率2000×3×16=96,000bps,若使用I2C(400kHz)则总线占用率约为24%,尚可接受;但若使用SPI(10MHz),占用率不到1%,且全双工允许同时发送配置命令和接收数据,更适合高速采样。因此,设计中选择SPI连接加速度计,I2C连接温度传感器,各取所长。

设计建议:在混合使用全双工和半双工设备时,注意总线的空闲电平。I2C的SDA在空闲时被上拉电阻拉高,而SPI的MISO在无从机选中时通常为高阻态。若将两者混接在同一总线上,可能导致电平冲突。务必使用独立的I2C和SPI总线,或使用电平转换/总线开关芯片。

2.4 波特率与比特率:符号速率与数据速率的换算

核心原理

波特率(Baud Rate)指每秒传输的符号(Symbol)数量,单位是Baud。比特率(Bit Rate)指每秒传输的比特数,单位是bps。在简单的二进制编码中,一个符号代表一个比特,此时波特率等于比特率。但在多电平调制(如PAM4、QPSK)中,一个符号可以携带多个比特,此时比特率 = 波特率 × log₂(电平数)。在嵌入式通信中,UART、SPI、I2C均使用二进制电平,因此波特率与比特率数值相等。但需要注意,UART的比特率计算需包含起始位、停止位和可选校验位。例如,波特率9600,数据位8,停止位1,无校验,则有效数据率 = 9600 × (8/10) = 7680bps。

判断方法或操作流程

计算有效数据吞吐量时,应遵循以下步骤:

  1. 确定协议帧格式:如UART帧 = 1起始位 + 8数据位 + 1停止位 = 10位。
  2. 计算每帧有效数据占比:8/10 = 80%。
  3. 计算有效比特率:波特率 × 有效数据占比。
  4. 若考虑协议开销(如I2C的ACK位、CAN的填充位),需进一步扣除。

案例拆解:CAN总线波特率配置

某CAN总线系统要求波特率为500kbps,采用标准帧(11位ID),数据场8字节。CAN协议中,一帧包含SOF(1) + ID(11) + RTR(1) + IDE(1) + r0(1) + DLC(4) + Data(64) + CRC(15) + DEL(1) + ACK(2) + EOF(7) = 108位。此外,CAN采用位填充(连续5个相同电平插入一个反相电平),最坏情况下增加约20%的位。因此,实际传输一帧需要约130位。有效数据率 = 8字节×8位 / 130位 × 500kbps ≈ 246kbps,效率约49%。若改用8字节数据,但ID为29位(扩展帧),则帧长度增加,有效数据率进一步下降。因此,在CAN网络设计中,应尽量使用标准帧并减少数据场长度,以提高总线利用率。

关键公式:有效数据率 = 波特率 × (有效数据位 / 总帧位数)。在UART中,总帧位数 = 1 + 数据位 + 校验位 + 停止位。在SPI中,由于无起始/停止位,有效数据率 = 时钟频率 × 数据位宽 / (数据位宽 + 额外开销),通常开销为0,因此SPI有效数据率等于时钟频率。

2.5 电平标准:TTL/CMOS/RS232/RS485

核心原理

电平标准定义了逻辑“0”和逻辑“1”对应的电压范围。不同标准适用于不同场景:

  • TTL(Transistor-Transistor Logic):供电5V,逻辑1为2.0V~5V,逻辑0为0V~0.8V。输出高电平最小2.4V,输入高电平最小2.0V。TTL是早期集成电路的标准,现在仍用于5V系统。
  • CMOS(Complementary Metal-Oxide-Semiconductor):供电范围宽(1.8V~5.5V),逻辑阈值随供电电压变化。例如3.3V CMOS,逻辑1为2.0V~3.3V,逻辑0为0V~0.8V。CMOS输入阻抗高,功耗低,是当前主流标准。
  • RS232:采用负逻辑,逻辑1为-15V~-3V,逻辑0为+3V~+15V。RS232用于短距离(15米以内)点对点通信,电平摆幅大,抗干扰能力优于TTL,但速率低(通常≤115200bps)。
  • RS485:采用差分信号,A/B两线电压差表示逻辑:A-B > +200mV为逻辑1,A-B < -200mV为逻辑0。RS485支持多点(最多32个节点),传输距离可达1200米,速率最高10Mbps(距离缩短时)。

判断方法或操作流程

在实际电路设计中,电平匹配是首要问题。判断流程如下:

  1. 确认MCU的IO供电电压(如3.3V或5V)。
  2. 确认外设的电平标准(如传感器是3.3V TTL还是5V TTL)。
  3. 若电压不匹配,需使用电平转换芯片(如TXB0108、PCA9306)或分压电阻。
  4. 若通信距离超过1米或环境有干扰,需将TTL/CMOS转换为RS232或RS485。

案例拆解:RS485总线在工业现场的应用

某工厂需要监控分布在100米范围内的10个温度变送器,每个变送器输出RS485信号。主控板采用STM32(3.3V CMOS),通过SP3485芯片将UART的TTL电平转换为RS485差分信号。SP3485的RO引脚连接STM32的RX,DI引脚连接TX,RE和DE引脚并联后由GPIO控制方向。实际测试中,波特率设为9600bps,线缆采用屏蔽双绞线,终端电阻120Ω。在正常工况下,通信误码率为0。但若将波特率提升至115200bps,由于线缆分布电容和反射,误码率上升至0.1%。因此,在长距离RS485通信中,应降低波特率并增加终端匹配电阻。

常见误区:很多人误以为RS232和RS485可以直接连接MCU的UART引脚。实际上,MCU的UART输出的是TTL/CMOS电平,必须经过MAX232(RS232电平转换)或SP3485(RS485电平转换)才能接入外部总线。直接连接会烧毁MCU引脚或导致逻辑错误。

2.6 总结与复盘

本章的五个基础概念构成了嵌入式通信的“第一性原理”。串行与并行决定了物理通道的数量;同步与异步决定了时钟的传递方式;全双工与半双工决定了数据流的方向管理;波特率与比特率决定了传输效率的计算方法;电平标准则划定了电气边界。在实际项目中,这些概念是交织在一起的:例如,CAN协议是串行、异步、半双工、差分电平,且波特率由位定时寄存器配置。理解每个概念的“为什么”比记住“是什么”更重要。当遇到通信故障时,应首先检查电平是否匹配,其次检查波特率误差,再检查同步/异步配置,最后分析全双工/半双工的方向切换逻辑。掌握这些基础,后续学习I2C、SPI、UART、CAN的具体协议时,就能快速抓住其设计精髓。