串行总线协议
并行 vs 串行
并行: 多根线同时传多位 (一次传 8/16/32 bit)
快但线多、时钟偏移 (skew) 限制速度
串行: 一根线按顺序传 bit
线少、能跑更高频率 → 现代高速接口全是串行
UART (通用异步收发)
基本概念
参数
| 参数 | 常见值 |
| 波特率 | 9600, 19200, 38400, 57600, 115200 |
| 数据位 | 8 (最常见), 7 |
| 停止位 | 1, 2 |
| 校验位 | None, Even, Odd |
| 流控 | None, RTS/CTS (硬件) |
应用
调试串口 (printf 输出到电脑)
GPS/蓝牙模块 (AT 指令)
旧式外设通信
优点: 简单、便宜、可靠
缺点: 只能一对一、低速、无标准应用层
I2C (Inter-Integrated Circuit)
基本概念
同步、半双工、多主多从
2 根线: SCL (时钟) + SDA (数据)
Vcc
│
Rp Rp ← 上拉电阻 (必须!)
│ │
├───┼────────── SDA
│ │
┌┴┐ ┌┴┐
│主│ │从1│ │从2│ ...
└─┘ └─┬┘ └─┬┘
│ │
├────┼──── SCL
│ │
GND GND
SCL: 主机提供时钟
SDA: 双向数据 (开漏, 线与)
每个从机有唯一 7bit (或 10bit) 地址
通信过程
起始条件: SDA↓ 而 SCL 高
发送: 7bit地址 + R/W bit → 从机回应 ACK
传输: 8bit数据 + ACK ... (可连续)
停止条件: SDA↑ 而 SCL 高
ACK: 第9个时钟 SDA=0 (接收方确认)
NACK: 第9个时钟 SDA=1 (无应答)
速度模式:
Standard: 100 kHz
Fast: 400 kHz (最常用)
Fast+: 1 MHz
High Speed: 3.4 MHz
应用
传感器 (温度/湿度/IMU/光线...)
EEPROM/FRAM 存储
RTC (时钟芯片)
PMIC (电源管理)
OLED 显示屏
几乎所有低速外设
优点: 仅需2线、多设备共享
缺点: 速度慢、上拉设计多(功耗)、地址冲突
上拉电阻选择
R 太小 → 功耗大 (灌电流大)
R 太大 → 上升沿太慢 → 速度受限
经验值:
100kHz: 4.7kΩ
400kHz: 2.2kΩ
1MHz: 1kΩ 或更小
计算: Rmax = tr / (0.8473 × Cbus)
tr = 300ns (100kHz 模式)
Cbus = 总线电容 (芯片 + PCB走线)
SPI (Serial Peripheral Interface)
基本概念
时钟模式 (CPOL, CPHA)
CPOL=0: SCK 空闲低
CPOL=1: SCK 空闲高
CPHA=0: 第一个边沿采样
CPHA=1: 第二个边沿采样
最常用: Mode 0 (CPOL=0, CPHA=0) 和 Mode 3 (CPOL=1, CPHA=1)
双方必须匹配! 否则通信错乱
特点
优点:
✓ 全双工 (同时收发)
✓ 高速 (数十 MHz, 甚至 100MHz+)
✓ 无地址机制 → 无开销
✓ 灵活 (任意帧长度)
缺点:
✗ 线多 (n个从机=n+3根线)
✗ 无标准协议层 (仅定义物理/链路)
✗ 无从机流控 (ACK)
✗ 距离短 (PCB级)
应用: Flash (NOR/NAND), ADC/DAC, 显示屏, 以太网 PHY
三总线对比
| 特性 | UART | I2C | SPI |
| 线数 | 2 (TX+RX) | 2 (SCL+SDA) | 4 (SCK+MOSI+MISO+CS) |
| 通信方式 | 异步 | 同步 | 同步 |
| 双工 | 全双工 | 半双工 | 全双工 |
| 速度 | < 1Mbps | < 3.4Mbps | 数十 Mbps |
| 多从机 | 否 | 是 (地址) | 是 (CSn) |
| 距离 | 长 (rs-232) | PCB/短 | PCB |
| 复杂度 | 最简单 | 中等 | 较简单 |
| 流控 | 无/硬件 | ACK/NACK | 无 |
| 典型用途 | 调试/无线模块 | 传感器 | Flash/显示/高速 |
速查: 何时选什么
传感器读数 (低速, 多设备) → I2C
高速数据传输 (Flash/SD/显示) → SPI
调试信息、无线模块 → UART
多字节寄存器读写 → I2C (地址+数据) 或 SPI
电池供电 (最低功耗) → I2C (静态几乎零功耗)
抗干扰 (长距离差分) → RS-485 (UART 的物理层变体)
关键词: UART, I2C, SPI, 波特率, SCL, SDA, MOSI, MISO, CS, 上拉电阻, ACK