嵌入式通信基础概念
- 嵌入式开发
- 14小时前
- 18热度
- 0评论
嵌入式通信基础概念
在深入各种总线之前,先把几个容易混淆的基础概念彻底搞清楚。这些是理解所有通信协议的"元知识"。
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 辆车,但车道越多越难管理对齐
串行 = 单车道隧道,车一辆辆通过,但隧道可以修得很长
并行 = 八车道高速公路,同时过 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),同一时刻只能一个方向占用
口诀:"线分开就全双工,线共用就半双工"
全双工需要收发各一条独立的数据通道(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 = 多主仲裁 |