在嵌入式系统里,CPU 再强也只是孤岛——传感器要读、执行器要控、数据要上传,这一切都离不开通信外设接口。
面试常问、调试常坑、选型常纠结的 UART、I2C、SPI、CAN、USB……这篇文章一次总结清楚:

UART(通用异步收发器)是嵌入式入门第一课。它只有两根信号线:TXD(发送)和 RXD(接收),外加一根必不可少的 GND 共地线。
所谓异步,就是没有时钟线——双方各自靠约定好的波特率产生本地时钟来对齐数据。
通信双方 TX、RX 交叉连接:

没有时钟线怎么知道一位从哪开始?
答案是起始位:总线空闲时为高电平,接收方检测到下降沿后,在位周期中点采样确认起始位,随后按波特率间隔依次采样。
一帧数据的典型结构:起始位(0) + 8 位数据(LSB 在前)+ 可选校验位 + 停止位(1)。

波特率即每秒传输的位数,常用 9600 / 115200 等。双方波特率必须一致,误差超过约 2%~3% 就会采错位(常表现为收到乱码)。
UART 只是控制器内部的外设,电平是 TTL(0V/3.3V),传不远。工程上常在其基础上叠加电气标准:
USART 比 UART 多一个 S——Sync(同步),可输出同步时钟(如驱动智能卡);STM32 的 USART 还支持 IrDA、LIN、硬件流控(RTS/CTS),做高速可靠传输时建议打开流控,防止接收缓冲溢出丢数据。
I2C(Inter-Integrated Circuit)由 Philips 提出,只需 SCL(时钟)+ SDA(数据)两根线,就能挂多个设备,是读取传感器、EEPROM、触摸 IC、PMIC 的绝对主力。
I2C 的 SDA/SCL 都是开漏(Open-Drain)输出:器件只能把线拉低,不能主动输出高电平,高电平靠上拉电阻实现。这个设计带来两个关键特性:

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

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

SPI 的本质是主机和从机各有一个移位寄存器(常见 8 位),首尾相连成环。
时钟每来一个脉冲,两边各移出 1 位、移入 1 位——发送和接收同时进行(全双工)。
所以哪怕你只读不写,也必须发一个哑数据(dummy byte)去换出从机的数据。
不同厂商器件的时序偏好不同,SPI 用两个参数描述,共 4 种模式,主从必须一致:

调试 SPI 先示波器/逻辑分析仪抓四根线,确认①片选是否真被拉低;②CPOL/CPHA 与器件手册是否一致;③模式寄存器先发对命令再读数据。很多 SPI Flash 读不到,其实是先要发读 ID命令 0x9F 验证链路。
CAN(Controller Area Network)由博世为汽车设计,是真正为高噪声、远距离、多节点、高可靠而生的总线。一辆车上往往有多路 CAN,挂着几十个控制器;工业、医疗、电梯领域同样遍地开花。
CAN 采用 CAN_H / CAN_L 差分线对,总线两端各接一个 120Ω 终端电阻(与线缆特征阻抗匹配,消除反射):
和 I2C 一样是线与——显性 0 会覆盖隐性 1,这个不对称性正是仲裁的基础。


▲ 图 9:CAN 总线拓扑——节点并联,两端 120Ω 匹配
多节点同时发送怎么办?
CAN 不靠主机调度,而是逐位仲裁:每个节点发送一位的同时回读总线。
发隐性 1 却读到显性 0 的节点,知道自己撞车了,立刻退出转为接收,胜利者继续发送——数据零损耗,这就是非破坏性仲裁。
因此 ID 值越小优先级越高,设计时要给刹车报文分配小 ID,给车窗报文分配大 ID。

一帧标准数据报文包含:帧起始 + 11 位 ID + 控制段 + 0~8 字节数据 + 15 位 CRC + ACK 槽 + 帧结束。
调试 CAN 先量总线电阻(两端电阻并联应约 60Ω)和终端电阻位置(必须在物理两端);波特率和采样点(典型 75%~87.5%)必须全网一致;CAN 收发器(如 TJA1050)的 TXD 被拉死为低会把总线占成显性,S 脚(静音)和终端电阻也要先查。
USB 是我们最熟悉又最陌生的接口。USB 2.0 物理层用 D+ / D- 差分线,编码是 NRZI(遇到 0 电平翻转、遇到 1 保持),配合位填充保证同步;USB 3.x 另加 SSTX/SSRX 收发线对,编码换成 8b/10b 等。
它和前几种接口的最大区别在于协议模型:
在嵌入式开发中,USB 最常见的形态是两类:设备类(把开发板做成 CDC 虚拟串口、HID 键盘鼠标、MSC U盘、DFU 固件升级)和主机类(读取 U 盘、USB 转串口)。
接口 线数 时钟 典型速率 距离 拓扑/主从 应答机制 典型应用 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
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight All Rights Reserved.
Powered By 61893.com 闽ICP备11008920号
闽公网安备35020302034844号