3、接口通信基础:串行与并行通信、同步与异步、全双工与半双工、电平标准(TTL/CMOS/RS232)

在嵌入式系统设计中,GPIO、UART、I2C、SPI 等接口的物理层行为与通信模型,决定了数据能否在芯片、板卡与外部设备之间可靠传输。本章聚焦于接口通信的四大基础维度:串行与并行、同步与异步、全双工与半双工,以及 TTL/CMOS/RS232 电平标准。理解这些概念,不仅有助于正确选型总线,更直接关系到信号完整性设计、驱动能力匹配和排障效率。下图概括了本章核心知识框架,后续将逐一展开。

接口通信基础 串行 vs 并行 • 串行:1bit/时钟,节省引脚 • 并行:多bit/时钟,速率高 • 串行适合长距离、抗干扰 • 并行适合片内/短距高速 同步 vs 异步 • 同步:共享SCLK时钟 • 异步:波特率约定,无时钟线 • 同步适合高速连续数据流 • 异步适合低速、简单连接 全双工 vs 半双工 • 全双工:同时收发 • 半双工:分时收发 • 全双工:SPI/UART(4线) • 半双工:I2C/RS485 电平标准 • TTL:0~0.8V L, 2~5V H • CMOS:0~0.3VDD L, 0.7VDD H • RS232:-3~-15V L, +3~+15V H • 电平不匹配需转换芯片 典型接口映射 UART(异步/全双工/串行) | I2C(同步/半双工/串行) | SPI(同步/全双工/串行) GPIO(并行位控制/电平标准由VDD决定)

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 采样周期,满足实时性。此案例说明串行通信通过“时间换空间”,在保持足够吞吐的前提下大幅降低引脚占用。

经验提醒:并行通信并非完全被淘汰。在 DDR 内存接口、LCD RGB 并口、FPGA 与高速 ADC 之间,并行仍因低延迟和高带宽而不可替代。选型时应综合引脚、速率、距离、成本四个维度。

常见误区

  • 误区一:认为串行一定比并行慢。实际上,现代串行协议(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),否则长期传输会累积位偏移导致乱码。

风险提示:异步通信没有时钟线,当波特率误差超过 2% 时,采样点会逐渐偏移,最终导致帧错误(Framing Error)。排查乱码问题时,应首先用示波器测量实际波特率,而非仅检查代码配置。

常见误区

  • 误区一:认为同步通信一定比异步快。实际上,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 总线)。全双工的优势是低延迟、高吞吐;半双工的优势是节省引脚和线缆,但需要总线仲裁或方向切换。

判断方法

  1. 查看接口定义:若协议包含独立的 TX/RX 或 MOSI/MISO 引脚,则为全双工;若只有一根双向数据线(如 SDA),则为半双工。
  2. 分析应用场景:需要同时上传传感器数据并下发控制指令时,全双工更合适;仅需周期性读写寄存器时,半双工足够。
  3. 考虑总线拓扑:多设备共享总线时(如 I2C 多从机),半双工天然支持多设备寻址;全双工总线(如 SPI)需通过片选区分设备。

案例拆解:I2C 半双工通信的时序分析

以 I2C 读取温度传感器 TMP117 为例:主机先发送从机地址(7 位 + 写位),再发送寄存器地址,然后发送重复起始位(Sr),最后发送从机地址 + 读位。整个过程中,SDA 线在主机发送和从机回复之间不断切换方向。若从机需要处理时间,会拉低 SCL 进行时钟拉伸。半双工模式下,主机必须在发送完读命令后释放 SDA 总线,并等待从机驱动数据。若主机误将 SDA 配置为推挽输出而不释放,将导致总线冲突,从机无法应答。

实战要点:半双工总线切换方向时,必须插入“ turnaround time”(转向时间)。在 I2C 中,主机在发送读位后需至少等待一个 SCL 周期再采样数据;在 RS485 中,需控制 DE/RE 引脚延时切换,否则会丢失首个字节。

常见误区

  • 误区一:认为全双工一定优于半双工。实际上,半双工总线(如 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.4V0.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。解决方案:

  1. 方案一:使用 TXB0108 电平转换芯片,自动检测方向,支持 1.2V~3.6V 与 1.65V~5.5V 双向转换。
  2. 方案二:若 LCD 输出为开漏,可外接上拉电阻至 3.3V,实现电平钳位。
  3. 方案三:串联 1kΩ 限流电阻 + 钳位二极管(如 BAV99),但仅适用于低速信号。

实际项目选用 TXB0108,因为 LCD 数据总线为 8 位并行,且时钟频率 10MHz,需要双向自动方向检测。若使用电阻分压,会因负载效应导致信号畸变。

风险提示:RS232 电平(±12V)绝不能直接连接 TTL/CMOS 引脚,必须使用 MAX3232 或 SP3232 等转换芯片。否则高压会击穿 MCU 的 ESD 保护二极管,造成永久损坏。

常见误区

  • 误区一:认为 3.3V 和 5V 系统可以直接互连。实际上,5V 输出到 3.3V 输入时,VIH 可能超限,需检查最大额定值。
  • 误区二:忽略 CMOS 输入的高阻抗特性。CMOS 引脚悬空时易受噪声干扰,必须接上拉或下拉电阻。
  • 误区三:RS232 电平的负逻辑理解错误。发送数据时,空闲状态为负电压(-5V~-15V),起始位为正电压(+3V~+15V)。

3.5 综合对比与选型决策

在实际嵌入式项目中,接口选型需综合本章所有维度。以下为典型决策流程:

  1. 确定通信距离:板内 <10cm 可选 I2C/SPI;板间 10cm~1m 可选 UART/RS485;远距离 >1m 需 RS485/RS422/CAN。
  2. 确定速率需求:<1Mbps 可选 I2C/UART;1~50Mbps 可选 SPI;>50Mbps 需考虑并行或 LVDS。
  3. 确定设备数量:单主机多从机选 SPI(片选);多主机多从机选 I2C(仲裁);点对点选 UART。
  4. 确定电平域:统一 3.3V 或 5V;混合电平需加转换芯片。
  5. 确定双工需求:实时双向交互选全双工;周期性读写选半双工。
总结复盘:本章四个维度并非独立,而是相互耦合。例如,I2C 同时具备串行、同步、半双工、开漏输出(电平由外部上拉决定)四个特性;UART 则是串行、异步、全双工、TTL/RS232 电平可选。理解这些组合特性,是进行硬件原理图设计和驱动开发的基础。建议工程师在设计初期绘制一张接口选型矩阵表,将候选接口的引脚数、速率、双工模式、电平要求列出,再结合成本与供应链因素做最终决策。