3、接口通信基础:串行与并行通信、同步与异步、全双工与半双工、电平标准(TTL/CMOS/RS232)
在嵌入式系统设计中,GPIO、UART、I2C、SPI 等接口的物理层行为与通信模型,决定了数据能否在芯片、板卡与外部设备之间可靠传输。本章聚焦于接口通信的四大基础维度:串行与并行、同步与异步、全双工与半双工,以及 TTL/CMOS/RS232 电平标准。理解这些概念,不仅有助于正确选型总线,更直接关系到信号完整性设计、驱动能力匹配和排障效率。下图概括了本章核心知识框架,后续将逐一展开。
3.1 串行与并行通信:引脚效率与速率的权衡
核心原理
串行通信将数据按位(bit)依次在单一数据线上传输,每个时钟周期只传送 1 位;并行通信则通过多条数据线同时传输多个位(通常为 8/16/32 位)。从信息论角度看,并行通信在相同时钟频率下具有更高的瞬时吞吐量,但代价是引脚数量、PCB 布线面积和同步 skew 问题。串行通信虽然单线速率看似较低,但通过提高时钟频率(如 SPI 可达 50MHz+)和差分信号技术(如 LVDS),实际吞吐量可以远超传统并行总线。
判断方法
- 引脚预算:MCU 可用 GPIO 少于 20 个时,优先选择串行总线(UART/I2C/SPI)。
- 传输距离:板间或机箱间通信(>30cm)必须使用串行 + 差分/电流环,并行线缆成本高且易受干扰。
- 实时性要求:若需同时采样多通道 ADC 数据且延迟敏感,可考虑并行接口(如 FPGA 与高速 ADC 之间)。
- EMC 考量:并行总线同时翻转会产生巨大 di/dt 噪声,串行总线 EMI 特性更优。
案例拆解:传感器数据采集的接口选型
某工业采集模块需连接 8 个 16 位温度传感器,采样率 1kSps。若采用并行总线,需要 8×16=128 根数据线,显然不现实。实际方案选用 SPI 总线,每个传感器挂载在独立片选(CS)上,共享 SCLK/MOSI/MISO 三根线,仅需 8 根 CS 线 + 3 根共享线 = 11 根 GPIO。SPI 时钟设为 10MHz,读取 8 个传感器共需 8×16=128 个时钟周期,耗时 12.8μs,远小于 1ms 采样周期,满足实时性。此案例说明串行通信通过“时间换空间”,在保持足够吞吐的前提下大幅降低引脚占用。
常见误区
- 误区一:认为串行一定比并行慢。实际上,现代串行协议(PCIe、USB3.0)速率远超传统并行 ATA。
- 误区二:忽略并行总线的信号完整性问题。高频并行总线对等长、阻抗匹配要求极高,设计难度大。
- 误区三:盲目追求高时钟。串行时钟过高时,线间串扰和反射会急剧恶化,需增加终端匹配电阻。
3.2 同步与异步通信:时钟的“有”与“无”
核心原理
同步通信由主机主动产生时钟信号(SCLK),所有数据位在时钟边沿被采样,收发双方无需独立时钟源。异步通信则没有专用时钟线,收发双方各自使用本地时钟,通过约定波特率(如 9600、115200)和帧格式(起始位、数据位、校验位、停止位)来同步数据。同步通信的典型代表是 I2C 和 SPI;异步通信的典型代表是 UART。
判断方法
| 对比维度 | 同步(I2C/SPI) | 异步(UART) |
|---|---|---|
| 时钟线 | 有(SCLK/SCL) | 无 |
| 时钟源 | 主机提供 | 各自本地时钟 |
| 数据帧 | 无起始/停止位(SPI)或带 ACK(I2C) | 固定起始位+数据+校验+停止位 |
| 速率精度 | 由时钟频率决定,无累计误差 | 双方波特率误差需 <±2% |
| 连续传输效率 | 高(无额外开销) | 低(每字节约 20% 开销) |
| 典型应用 | 传感器、存储器、显示屏 | 调试串口、GPS、蓝牙模块 |
案例拆解:UART 波特率误差导致的乱码
某设备使用 8MHz 系统时钟,UART 配置为 115200bps。计算分频系数:8000000/115200 ≈ 69.44,取整为 69,实际波特率 = 8000000/69 ≈ 115942bps,误差 = (115942-115200)/115200 ≈ 0.64%,在允许范围内。但若系统时钟改为 7.3728MHz(非标准晶振),分频系数 = 7372800/115200 = 64,恰好整除,误差为 0%。关键教训:选择晶振频率时,应优先考虑能被目标波特率整除的值(如 7.3728MHz、11.0592MHz、14.7456MHz),否则长期传输会累积位偏移导致乱码。
常见误区
- 误区一:认为同步通信一定比异步快。实际上,I2C 标准模式仅 100kHz,而 UART 可轻松达到 1Mbps。
- 误区二:忽略 I2C 的时钟拉伸(Clock Stretching)。从设备可拉低 SCL 以暂停通信,主机需支持此机制。
- 误区三:SPI 没有 ACK 机制,从设备故障时主机无法感知,需额外增加错误检测手段。
3.3 全双工与半双工:数据流向的拓扑约束
核心原理
全双工(Full-Duplex)允许数据同时双向传输,需要独立的发送和接收通道(如 SPI 的 MOSI/MISO,UART 的 TX/RX)。半双工(Half-Duplex)共享同一物理通道,收发分时进行(如 I2C 的 SDA 线、RS485 总线)。全双工的优势是低延迟、高吞吐;半双工的优势是节省引脚和线缆,但需要总线仲裁或方向切换。
判断方法
- 查看接口定义:若协议包含独立的 TX/RX 或 MOSI/MISO 引脚,则为全双工;若只有一根双向数据线(如 SDA),则为半双工。
- 分析应用场景:需要同时上传传感器数据并下发控制指令时,全双工更合适;仅需周期性读写寄存器时,半双工足够。
- 考虑总线拓扑:多设备共享总线时(如 I2C 多从机),半双工天然支持多设备寻址;全双工总线(如 SPI)需通过片选区分设备。
案例拆解:I2C 半双工通信的时序分析
以 I2C 读取温度传感器 TMP117 为例:主机先发送从机地址(7 位 + 写位),再发送寄存器地址,然后发送重复起始位(Sr),最后发送从机地址 + 读位。整个过程中,SDA 线在主机发送和从机回复之间不断切换方向。若从机需要处理时间,会拉低 SCL 进行时钟拉伸。半双工模式下,主机必须在发送完读命令后释放 SDA 总线,并等待从机驱动数据。若主机误将 SDA 配置为推挽输出而不释放,将导致总线冲突,从机无法应答。
常见误区
- 误区一:认为全双工一定优于半双工。实际上,半双工总线(如 I2C)支持多主机仲裁,而全双工 SPI 通常只能单主机。
- 误区二:忽略半双工的方向切换开销。频繁切换方向会降低有效吞吐量,高频率读写场景应优先全双工。
- 误区三:在 RS485 半双工网络中,未正确控制发送使能,导致总线冲突和数据损坏。
3.4 电平标准:TTL、CMOS 与 RS232 的匹配与转换
核心原理
TTL(Transistor-Transistor Logic)电平定义:逻辑低电平为 0~0.8V,逻辑高电平为 2~5V(典型 3.3V/5V)。CMOS 电平定义:逻辑低电平为 0~0.3×VDD,逻辑高电平为 0.7×VDD~VDD。RS232 是串行通信的早期标准,采用负逻辑:逻辑低电平为 +3V~+15V,逻辑高电平为 -3V~-15V,摆幅大,抗干扰能力强,但速率低(最高 115.2kbps)。
判断方法
| 参数 | TTL (5V) | CMOS (3.3V) | RS232 |
|---|---|---|---|
| VOH (输出高) | ≥2.4V | ≥2.97V (0.9×VDD) | +5V~+15V |
| VOL (输出低) | ≤0.4V | ≤0.33V (0.1×VDD) | -5V~-15V |
| VIH (输入高) | ≥2.0V | ≥2.31V (0.7×VDD) | ≥+3V |
| VIL (输入低) | ≤0.8V | ≤0.99V (0.3×VDD) | ≤-3V |
| 噪声容限 | 0.4V | 0.66V | ±2V |
| 典型应用 | 5V 逻辑器件 | 3.3V MCU/传感器 | PC 串口、工业设备 |
案例拆解:3.3V MCU 与 5V 外设的电平转换
某设计使用 STM32F103(3.3V)驱动 5V 供电的 LCD 模块(TTL 电平)。若直接连接,MCU 输出高电平为 3.3V,虽高于 LCD 的 VIH(2.0V),但 LCD 输出高电平为 5V,会灌入 MCU 引脚,可能损坏 IO。解决方案:
- 方案一:使用 TXB0108 电平转换芯片,自动检测方向,支持 1.2V~3.6V 与 1.65V~5.5V 双向转换。
- 方案二:若 LCD 输出为开漏,可外接上拉电阻至 3.3V,实现电平钳位。
- 方案三:串联 1kΩ 限流电阻 + 钳位二极管(如 BAV99),但仅适用于低速信号。
实际项目选用 TXB0108,因为 LCD 数据总线为 8 位并行,且时钟频率 10MHz,需要双向自动方向检测。若使用电阻分压,会因负载效应导致信号畸变。
常见误区
- 误区一:认为 3.3V 和 5V 系统可以直接互连。实际上,5V 输出到 3.3V 输入时,VIH 可能超限,需检查最大额定值。
- 误区二:忽略 CMOS 输入的高阻抗特性。CMOS 引脚悬空时易受噪声干扰,必须接上拉或下拉电阻。
- 误区三:RS232 电平的负逻辑理解错误。发送数据时,空闲状态为负电压(-5V~-15V),起始位为正电压(+3V~+15V)。
3.5 综合对比与选型决策
在实际嵌入式项目中,接口选型需综合本章所有维度。以下为典型决策流程:
- 确定通信距离:板内 <10cm 可选 I2C/SPI;板间 10cm~1m 可选 UART/RS485;远距离 >1m 需 RS485/RS422/CAN。
- 确定速率需求:<1Mbps 可选 I2C/UART;1~50Mbps 可选 SPI;>50Mbps 需考虑并行或 LVDS。
- 确定设备数量:单主机多从机选 SPI(片选);多主机多从机选 I2C(仲裁);点对点选 UART。
- 确定电平域:统一 3.3V 或 5V;混合电平需加转换芯片。
- 确定双工需求:实时双向交互选全双工;周期性读写选半双工。