嵌入式 5 大通信接口,时序图讲透 + 一张表选对

在嵌入式系统里,CPU 再强也只是孤岛——传感器要读、执行器要控、数据要上传,这一切都离不开通信外设接口

面试常问、调试常坑、选型常纠结的 UART、I2C、SPI、CAN、USB……这篇文章一次总结清楚:

1. UART / USART:最经典的两根线

UART(通用异步收发器)是嵌入式入门第一课。它只有两根信号线:TXD(发送)和 RXD(接收),外加一根必不可少的 GND 共地线。

所谓异步,就是没有时钟线——双方各自靠约定好的波特率产生本地时钟来对齐数据。

通信双方 TX、RX 交叉连接

1.1 帧格式:靠起始位对齐,靠停止位收尾

没有时钟线怎么知道一位从哪开始?

答案是起始位:总线空闲时为高电平,接收方检测到下降沿后,在位周期中点采样确认起始位,随后按波特率间隔依次采样。

一帧数据的典型结构:起始位(0) + 8 位数据(LSB 在前)+ 可选校验位 + 停止位(1)。

1.2 波特率:异步通信的生死线

波特率即每秒传输的位数,常用 9600 / 115200 等。双方波特率必须一致,误差超过约 2%~3% 就会采错位(常表现为收到乱码)。

1.3 从 UART 到 RS-232 / RS-485 / TTL

UART 只是控制器内部的外设,电平是 TTL(0V/3.3V),传不远。工程上常在其基础上叠加电气标准:

USART 比 UART 多一个 S——Sync(同步),可输出同步时钟(如驱动智能卡);STM32 的 USART 还支持 IrDA、LIN、硬件流控(RTS/CTS),做高速可靠传输时建议打开流控,防止接收缓冲溢出丢数据。

2. I2C:两根线挂一堆设备

I2C(Inter-Integrated Circuit)由 Philips 提出,只需 SCL(时钟)+ SDA(数据)两根线,就能挂多个设备,是读取传感器、EEPROM、触摸 IC、PMIC 的绝对主力。

2.1 电气结构:开漏 + 上拉,天然的线与

I2C 的 SDA/SCL 都是开漏(Open-Drain)输出:器件只能把线拉低,不能主动输出高电平,高电平靠上拉电阻实现。这个设计带来两个关键特性:

  1. 多器件共线不会短路;
  2. 总线呈现线与逻辑——只要有一个器件拉低,总线就是低,这正是 I2C 应答与多主仲裁的物理基础。

2.2 时序三要素:起始、应答、停止

I2C 所有的聪明都藏在时序规则里:

2.3 地址、速度与进阶机制

3. SPI:追求速度的四线全双工

SPI(Serial Peripheral Interface)是摩托罗拉提出的同步串行接口,用四根线换来了速度和简单:

3.1 工作原理:一个双向移位寄存器环路

SPI 的本质是主机和从机各有一个移位寄存器(常见 8 位),首尾相连成环。

时钟每来一个脉冲,两边各移出 1 位、移入 1 位——发送和接收同时进行(全双工)。

所以哪怕你只读不写,也必须发一个哑数据(dummy byte)去换出从机的数据。

3.2 CPOL / CPHA:SPI 的四种方言

不同厂商器件的时序偏好不同,SPI 用两个参数描述,共 4 种模式,主从必须一致:

3.3 SPI 的优缺点

调试 SPI 先示波器/逻辑分析仪抓四根线,确认①片选是否真被拉低;②CPOL/CPHA 与器件手册是否一致;③模式寄存器先发对命令再读数据。很多 SPI Flash 读不到,其实是先要发读 ID命令 0x9F 验证链路。

4. CAN:汽车与工业现场的钢铁总线

CAN(Controller Area Network)由博世为汽车设计,是真正为高噪声、远距离、多节点、高可靠而生的总线。一辆车上往往有多路 CAN,挂着几十个控制器;工业、医疗、电梯领域同样遍地开花。

4.1 差分传输:显性 0 与隐性 1

CAN 采用 CAN_H / CAN_L 差分线对,总线两端各接一个 120Ω 终端电阻(与线缆特征阻抗匹配,消除反射):

和 I2C 一样是线与——显性 0 会覆盖隐性 1,这个不对称性正是仲裁的基础。

▲ 图 9:CAN 总线拓扑——节点并联,两端 120Ω 匹配

4.2 非破坏性仲裁:ID 越小,优先级越高

多节点同时发送怎么办?

CAN 不靠主机调度,而是逐位仲裁:每个节点发送一位的同时回读总线。

发隐性 1 却读到显性 0 的节点,知道自己撞车了,立刻退出转为接收,胜利者继续发送——数据零损耗,这就是非破坏性仲裁。

因此 ID 值越小优先级越高,设计时要给刹车报文分配小 ID,给车窗报文分配大 ID。

4.3 帧结构与可靠性

一帧标准数据报文包含:帧起始 + 11 位 ID + 控制段 + 0~8 字节数据 + 15 位 CRC + ACK 槽 + 帧结束。

调试 CAN 先量总线电阻(两端电阻并联应约 60Ω)和终端电阻位置(必须在物理两端);波特率和采样点(典型 75%~87.5%)必须全网一致;CAN 收发器(如 TJA1050)的 TXD 被拉死为低会把总线占成显性,S 脚(静音)和终端电阻也要先查。

5. USB:即插即用的万能口

USB 是我们最熟悉又最陌生的接口。USB 2.0 物理层用 D+ / D- 差分线,编码是 NRZI(遇到 0 电平翻转、遇到 1 保持),配合位填充保证同步;USB 3.x 另加 SSTX/SSRX 收发线对,编码换成 8b/10b 等。

它和前几种接口的最大区别在于协议模型

在嵌入式开发中,USB 最常见的形态是两类:设备类(把开发板做成 CDC 虚拟串口、HID 键盘鼠标、MSC U盘、DFU 固件升级)和主机类(读取 U 盘、USB 转串口)。

6. 其他值得认识的接口

7. 总结

接口 线数 时钟 典型速率 距离 拓扑/主从 应答机制 典型应用 UART 2 + GND 无(异步) ≤ 1Mbps 板级/米级 点对点 无 调试串口、GPS、蓝牙模组 RS-485 2(建议共地) 无(异步) ≤ 10Mbps(短距) ≤ 1200m(低速) 一主多从 协议自定 Modbus、工控 I2C 2 有 100k~3.4MHz 板级 一主多从/多主 ACK 应答 传感器、EEPROM、OLED SPI 4+N 有 几十 MHz 板级 一主多从 无 Flash、LCD、SD卡 CAN 2(建议共地) 无独立时钟(位同步) ≤ 1Mbps ≤ 40m@1M 多主对等 ACK + CRC 汽车、工业现场 USB D+/D-(3.x 再加两对) 有(嵌入) 1.5M~5Gbps ≤ 5m 主机中心 协议层确认 虚拟串口、U盘、HID

展开阅读全文

更新时间:2026-09-18

标签:数码   时序   嵌入式   接口   通信   总线   时钟   主机   数据   节点   波特率   串口   电阻   显性   器件

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight All Rights Reserved.
Powered By 61893.com 闽ICP备11008920号
闽公网安备35020302034844号

Top