串行通信把数据按位发送。理解一个接口时,先分清三个互相独立的问题:什么时候采样、数据能朝哪些方向传输、线上电压怎样表示数据。同步/异步、半双工/全双工、UART/RS-485 不能互相替代。
1. 先建立分层关系
跳转到“1. 先建立分层关系”| 层次 | 解决的问题 | 示例 |
|---|---|---|
| 应用协议 | 一条消息代表什么,怎样寻址、应答和校验 | Modbus RTU、自定义设备命令 |
| 数据传输与控制器 | 怎样组成位流、产生时序、收发数据 | UART、SPI、I²C、CAN 控制器 |
| 电气接口 | 电压、驱动能力、共模范围与线缆连接 | CMOS 电平、RS-232、RS-485、CAN 收发器 |
例如,微控制器的 UART 可以经 RS-485 收发器连接到差分总线,再承载 Modbus RTU。UART 引脚不能因此直接接到 RS-485 的 A/B 差分线。
2. 同步、异步与双工
跳转到“2. 同步、异步与双工”同步串行接口用约定的时钟关系确定采样时刻,SPI 和 I²C 都有时钟线。UART 没有单独的时钟线:双方约定速率,接收器检测起始位后用自己的时钟采样,属于异步串行传输。
这里的“同步”不表示发送后等待应答;是否等待应答是另一层协议行为。异步通信仍然需要时间同步和时钟误差限制。
| 方式 | 含义 | 常见例子 |
|---|---|---|
| 单工 | 信息只沿一个固定方向流动 | 广播接收、单向测量输出 |
| 半双工 | 可双向传输,同一共享信道不能同时承载两路独立数据 | 两线 RS-485、I²C 的 SDA、CAN 总线 |
| 全双工 | 两个方向可同时传输 | 独立 TX/RX 的 UART、常规四线 SPI、四线 RS-485 |
双工由信道和设备能力决定。RS-485 可以使用两线半双工或四线全双工;“全双工 RS-485 就是 RS-422”不成立。RS-422 和 RS-485 的区别还涉及驱动器及多点连接能力。TI 的 RS-485 说明给出了两种 RS-485 网络。
3. UART:帧格式与有效吞吐量
跳转到“3. UART:帧格式与有效吞吐量”以常见 8N1 为例:8 个数据位、无奇偶校验、1 个停止位;此外还有 1 个起始位。
空闲高电平 → 起始位 0 → D0 D1 D2 D3 D4 D5 D6 D7 → 停止位 1 1 位 8 位 1 位数据位数量、位序、奇偶校验及停止位以实际设备配置为准。奇校验让“数据位与校验位合计”的 1 的数量为奇数,偶校验则为偶数;奇偶校验不能检出所有多位错误。
波特率是每秒码元数,比特率是每秒比特数。二进制 UART 每码元通常表示 1 bit,两者数值相同,但不能把波特率普遍定义为比特率。
连续发送且没有字节间空闲时,8N1 每发送一个 8 位字节占 10 bit:
因此 9600 baud 的上限是 960 byte/s,19200 baud 是 1920 byte/s;应用报头、校验、应答和调度还会降低有效吞吐量。原先直接除以 8 的算法遗漏了帧开销。
一次串口应用通常依次完成:选择驱动或串口库 → 配置速率/数据位/校验/停止位 → 打开端口 → 按协议组织与解析字节流 → 处理超时与错误 → 关闭端口。RS-485 半双工还要控制发送使能及收发切换时刻;发送函数返回不一定意味着最后一个停止位已经离开硬件。
4. RS-232、RS-422 与 RS-485
跳转到“4. RS-232、RS-422 与 RS-485”| 项目 | RS-232 | RS-422 | RS-485 |
|---|---|---|---|
| 信号形式 | 相对参考地的单端信号 | 平衡差分信号 | 平衡差分信号 |
| 常见连接 | 点对点,独立 TX/RX | 单驱动器到一个或多个接收器 | 支持多驱动器的多点总线 |
| 常见双工 | TX/RX 独立时全双工 | 双向连接通常使用两对线 | 一对线半双工;两对线可全双工 |
| 软件额外关注 | 流控、端口参数与消息边界 | 方向和设备协议 | 总线访问、发送使能、周转时间与冲突 |
距离和速率要一起设计,还受线缆、终端、支线、节点负载及收发器规格影响。不能把“20 米”“10 Mb/s”当成任意连接都成立的保证,也不能仅由波特率断言某条线路能传多远。
差分信号并不免除共模电压限制。终端匹配、偏置、参考地/隔离及保护应结合实际器件和布线设计。自动收发转换器也有传播及周转时间,产品宣传中的“零延迟”不等于物理延迟为零。
5. SPI:信号、采样边沿与多设备
跳转到“5. SPI:信号、采样边沿与多设备”常规四线 SPI 包括 SCLK、MOSI、MISO、CS;此外通常需要共同参考地。控制器产生时钟及片选,同时发送 MOSI、采样 MISO;外设采样 MOSI 并输出 MISO。两端都在采样,并非只有控制器“采样从机”。有些芯片采用三线、单向或多数据线变体,不能用“四根线”限制全部 SPI。
5.1 四种模式怎样读
跳转到“5.1 四种模式怎样读”CPOL 决定空闲时钟电平;CPHA 决定在一个周期的第一个还是第二个边沿采样。
| 模式 | CPOL | CPHA | 空闲电平 | 采样边沿 | 通常更新下一位的边沿 |
|---|---|---|---|---|---|
| 0 | 0 | 0 | 低 | 第一个,上升沿 | 下降沿 |
| 1 | 0 | 1 | 低 | 第二个,下降沿 | 上升沿 |
| 2 | 1 | 0 | 高 | 第一个,下降沿 | 上升沿 |
| 3 | 1 | 1 | 高 | 第二个,上升沿 | 下降沿 |
例如 Mode 0 的第一位必须在第一个上升沿之前稳定;接收端在上升沿采样,发送端通常在下降沿换成下一位。还必须满足建立时间、保持时间以及片选到首个时钟的时间要求。
CPHA 单独不能决定“上升沿还是下降沿”,必须与 CPOL 一起判断。不同厂商的 CKP、CKE、NCPHA 等寄存器命名和取值语义未必与 CPOL/CPHA 相同,要按芯片时序图核对。Linux SPI 文档和Microchip 模式表可交叉检查四种模式。
5.2 多片选与菊花链
跳转到“5.2 多片选与菊花链”- 独立片选:设备共享 SCLK/MOSI/MISO,各用一根 CS。未被选中的外设应按数据手册释放共享输出;同时选中多个会驱动 MISO 的器件可能发生电气争用。
- 菊花链:前一个器件的串行输出接到后一个的输入,整串移位后再统一锁存。只有支持这种模式的设备才能这样连接。链越长,更新整串所需时钟越多;不能把物理位置直接解释为“优先级低”。
SPI 的命令、地址、字长、位序、片选边界和最高时钟由具体设备规定,常见用途有存储器、ADC、DAC、显示和传感器。SPI 本身没有统一的地址、应答或错误校验格式,外设协议可以另外增加状态位、校验和或 CRC。其速率没有统一的“10 MHz”“120 MHz”上限,也没有固定为 I²C 两倍的关系。TI 的 SPI 概述说明了基本连接及协议灵活性。
6. I²C:先理解开漏,再理解事务
跳转到“6. I²C:先理解开漏,再理解事务”I²C(也写作 IIC)使用 SDA 数据线和 SCL 时钟线。常见标准/快速模式使用开漏或开集电极输出及上拉电阻:器件主动拉低,释放后由上拉形成高电平。支持的速度模式、总线电容和上拉阻值必须按器件与规范确定。
控制器发起事务并组织时钟;目标器件可在支持时通过拉低 SCL 延长等待,这叫时钟拉伸。因此“只有主机能影响 SCL”不准确。设备是否能当控制器或目标、是否支持多控制器,取决于其实现。
6.1 关键条件
跳转到“6.1 关键条件”| 条件 | SDA/SCL 上的含义 |
|---|---|
| 空闲 | SDA、SCL 均为高 |
| START | SCL 为高时,SDA 从高变低 |
| STOP | SCL 为高时,SDA 从低变高 |
| 普通数据位 | SCL 为高时 SDA 保持稳定;通常在低电平期间更新 |
| ACK | 每 8 bit 后的第 9 个时钟,由接收方把 SDA 拉低 |
| NACK | 第 9 个时钟,SDA 保持高 |
START/STOP 是数据稳定规则的专门例外。NACK 可能表示地址未响应、接收方暂时不能接受数据,也可能是控制器读完最后一个字节后正常结束,不能一概当成传输失败。
6.2 一次写和一次读
跳转到“6.2 一次写和一次读”常见 7 位地址格式把地址放在前 7 bit,最低位为 R/W。I²C 另有 10 位地址格式,不要把 7 位当成唯一情况。
写:START → 地址+W → ACK → 数据0 → ACK → 数据1 → ACK → STOP读:START → 地址+R → ACK → 数据0 → ACK → 最后一字节 → NACK → STOP每个字节按高位先行;数据字节数和寄存器含义由设备协议决定。读寄存器时常见“先写寄存器地址 → 重复 START → 地址+R → 读取”,重复 START 允许在不释放总线的情况下切换事务方向。
I²C 的 ACK 表示字节层面的应答,并不替代端到端数据完整性检查。完整时序、电气条件、仲裁及各速度模式应以 NXP UM10204为准。
7. CAN:共享总线上的消息仲裁
跳转到“7. CAN:共享总线上的消息仲裁”CAN 使用独立节点时钟,通过总线边沿进行同步和重同步,不需要单独的时钟线。各节点可以发起消息,仲裁让竞争中的高优先级消息继续发送,其他节点随后重试。
经典 CAN 的共享总线在一个时刻承载一帧消息,属于半双工;发送节点同时监测总线是仲裁和错误检测的一部分,并不意味着同时传输两路独立帧。CAN 数据链路包含 CRC、位监测、位填充、格式与应答等检查,不能照搬 UART 的奇偶校验来解释。
CAN 常见物理布线是两端终端匹配的线形总线,支线长度受到速率及时序约束。任意星形连接不能直接假定可靠。经典 CAN 与 CAN FD 的帧格式和速率安排也需分别核对。TI CAN 基础介绍了仲裁、同步、错误检查和故障隔离。
8. 调试时按同一个顺序检查
跳转到“8. 调试时按同一个顺序检查”- 电气连接:供电、参考地、逻辑电平、差分极性、上拉和终端是否正确。
- 时序参数:UART 帧格式;SPI 的模式、位序、片选;I²C 的地址表示、ACK 和时钟拉伸。
- 消息含义:寄存器地址、长度、字节序、校验、请求与应答关系。
- 观察真实波形:示波器确认幅值与边沿;逻辑分析仪辅助解码,解码参数错误也会生成看似合理的错误字节。
- 验证边界情况:超时、设备未连接、连续传输、收发切换以及总线恢复。
原笔记中的时序图
跳转到“原笔记中的时序图”下列本地素材保留用于对照;概念和参数以正文及对应芯片手册为准。




