总线协议概览
一、对比表
| 总线 |
线数 |
速率 |
距离 |
拓扑 |
典型应用 |
| UART |
2-4 |
≤ 1 Mbps |
< 15m |
点对点 |
调试、模块 |
| I2C |
2 |
≤ 5 Mbps |
< 5m |
多主多从 |
传感器、EEPROM |
| SPI |
4+nCS |
≤ 100 Mbps |
< 1m |
一主多从 |
Flash、LCD |
| I2S |
3 |
高 |
< 1m |
点对点 |
音频 |
| CAN |
2 |
≤ 1 Mbps |
< 1km |
多主 |
汽车、工业 |
| USB 2.0 |
4 |
480 Mbps |
< 5m |
主从 |
外设 |
| USB 3.0 |
9 |
5 Gbps |
< 3m |
主从 |
高速存储 |
| PCIe |
差分对 |
8 Gbps+ (Gen3) |
< 0.5m |
树形 |
内部高速 |
| Ethernet |
4 (差分) |
100M/1G/10G |
100m |
星形 |
网络 |
| SD/eMMC |
4/8 |
高速 |
< 0.2m |
主从 |
存储 |
| MIPI-CSI/DSI |
多差分对 |
Gbps 级 |
< 0.3m |
点对点 |
摄像头/屏 |
二、关键术语
1. 主从(Master/Slave)
- 总线上的"控制者"和"被控制者"
- 现代术语倾向:Controller/Peripheral 或 Leader/Follower
2. 同步 / 异步
- 同步:有时钟线(SPI、I2C、I2S)
- 异步:靠波特率约定(UART)
3. 差分信号
- 用两根线传输相反信号,抗干扰强
- USB、CAN、Ethernet、LVDS、MIPI、PCIe 都用差分
4. 上拉/下拉
- 决定总线空闲电平
- I2C 必有上拉(通常 4.7kΩ)
5. 地址/片选
- I2C:地址寻址
- SPI:片选(CS)选从机
- UART:点对点,无需寻址
三、嵌入式 Linux 中的总线驱动框架
Linux 内核对总线有统一抽象:
struct bus_type {
int (*match)(struct device *dev, struct device_driver *drv);
int (*probe)(struct device *dev);
void (*remove)(struct device *dev);
// ...
};
i2c_bus_type:drivers/i2c/i2c-core.c
spi_bus_type:drivers/spi/spi.c
platform_bus_type:SoC 内置外设的虚拟总线
pci_bus_type:PCI/PCIe
四、总线分析工具
| 工具 |
用途 |
| 示波器 |
看时序、边沿、毛刺 |
| 逻辑分析仪 |
多通道总线解码(Saleae 经典) |
| 协议分析仪 |
USB、PCIe 专业分析仪 |
| i2c-tools |
Linux 下扫描 I2C 设备(i2cdetect) |
| spidev / spidev_test |
Linux 下测试 SPI |
| can-utils |
Linux 下测试 CAN |