嵌入式通信基础概念

嵌入式通信基础概念

在深入各种总线之前,先把几个容易混淆的基础概念彻底搞清楚。这些是理解所有通信协议的"元知识"。

1. 同步 vs 异步:到底谁在"喊节拍"?

ℹ️ 一句话区别:有没有一根专门的时钟线来统一收发双方的节奏。
对比项 同步通信 异步通信
时钟线 (如 I2C 的 SCL、SPI 的 SCLK) 没有
同步方式 主机通过时钟线"喊节拍",从机跟着走 双方提前约定波特率,各自本地时钟计数
优点 时序精确,速率可以拉得很高 硬件简单,少一根线
缺点 多一根时钟线,且距离受限(时钟偏移) 波特率必须一致,否则乱码;速率相对较低
典型代表 I2C、SPI UART、CAN
⚠️ 注意:CAN 虽然没有时钟线(异步),但它用位填充技术保证收发同步——每连续 5 个相同位后自动插入一个反转位,让接收方有足够的信号边沿来"校准节奏"。所以异步 ≠ 不靠谱。

2. 串行 vs 并行:一车道和多车道

ℹ️ 一句话区别:一次传 1 bit 还是多 bit
对比项 串行通信 并行通信
数据线数 1 根数据线(一次传 1 bit) 多根数据线(如 8/16/32 根,同时传多 bit)
速率 单位时间传的 bit 少,但可以提高时钟频率弥补 看似更快,但高速时信号线间串扰严重
布线 线少、简单、成本低、距离远 线多、PCB 面积大、等长布线困难
典型代表 UART、I2C、SPI、CAN、USB 8080并口LCD、早期打印机(LPT)、内存总线
💡 类比记忆

串行 = 单车道隧道,车一辆辆通过,但隧道可以修得很长

并行 = 八车道高速公路,同时过 8 辆车,但车道越多越难管理对齐
💬 趋势:现代高速通信几乎全面转向串行(USB 3.x、PCIe、SATA),因为串行可以轻松提高时钟频率,而并行在高速下的线间同步问题(skew)极难解决。本文涉及的 UART / I2C / SPI / CAN / Modbus 全部是串行通信

3. 全双工 vs 半双工 vs 单工:谁能同时"说话"?

ℹ️ 一句话区别:通信双方能不能同时收发
模式 方向 形象比喻 典型代表
单工 A→B(只能单向 广播电台:只能听,不能回话 遥控器红外、广播
半双工 A⇄B(交替双向,同一时刻只能一个方向) 对讲机:说完"over"对方才能说 I2C、CAN、RS485
全双工 A⇌B(同时双向 打电话:双方同时说、同时听 UART、SPI
💡 本质原因

全双工需要收发各一条独立的数据通道(UART 的 TX/RX,SPI 的 MOSI/MISO)

半双工共用一条数据线(I2C 的 SDA),同一时刻只能一个方向占用

口诀:"线分开就全双工,线共用就半双工"

4. 差分信号 vs 单端信号:怎么抗干扰?

ℹ️ 一句话区别:单端信号看一根线的绝对电压,差分信号看两根线的电压差
对比项 单端信号 差分信号
判定方式 信号线电压相对于 GND 的绝对值 两根线(如 CAN_H - CAN_L)的电压差
抗干扰 ——噪声叠加在信号上直接影响判定 ——噪声同时叠加在两根线上,做差后相互抵消
传输距离 短(噪声累积快) (噪声被抵消)
典型代表 UART(TTL)、I2C、SPI CAN、RS485、USB、以太网
💡 类比记忆

单端 = 一个人站在嘈杂工地上喊话,声音容易被噪声淹没

差分 = 两个人同时喊,一个喊"是"一个喊"不是",听的人比较两个声音的差别就能判断,环境噪声对两人的影响一样所以被抵消

5. 主从架构 vs 多主架构:谁来"发起对话"?

架构 说明 典型代表
点对点 只有两个设备直连,谁都可以主动发 UART
一主多从 只有主机能发起通信,从机被动应答 SPI、I2C(常见用法)、Modbus
多主多从 任何节点都可以主动发起,通过仲裁机制解决冲突 CAN、I2C(支持但少用)
⚠️ 注意:I2C 协议本身支持多主,但实际项目中绝大多数场景是一主多从。多主模式需要处理时钟同步和 SDA 仲裁,实现复杂度较高。

速记表

概念 关键区别 记忆锚点
同步 vs 异步 有无时钟线 有时钟线 = 同步
串行 vs 并行 一次传 1 bit 还是多 bit 嵌入式通信全是串行
全双工 vs 半双工 能否同时收发 收发线分开 = 全双工
差分 vs 单端 绝对电压还是电压差 差分 = 抗干扰强 = 传得远
一主多从 vs 多主 谁能主动发起通信 CAN = 多主仲裁