本页目录

串行总线协议

并行 vs 串行

并行: 多根线同时传多位 (一次传 8/16/32 bit)
      快但线多、时钟偏移 (skew) 限制速度

串行: 一根线按顺序传 bit
      线少、能跑更高频率 → 现代高速接口全是串行

UART (通用异步收发)

基本概念

UART:异步全双工,发送方与接收方波特率必须一致 连接:TX 与 RX 交叉相连(全双工同时收发) MCU_A MCU_B TX → RX RX ← TX 帧格式:一帧数据的时序结构 空闲(高) Start=0 D0 D1 D2 D3 D4 D5 D6 D7 Parity?(可选) Stop=1 波特率(9600 / 115200 / 921600…)必须双方一致,误差需 < ±2%; 异步无独立时钟线,全靠双方按约定波特率对齐每一位。

参数

参数常见值
波特率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)

基本概念

SPI:同步全双工,主机独占时钟与片选控制权(至少4根线) MCU (Master) 外设 (Slave) SCK · 时钟(主→从) MOSI · 主机发,从机收 MISO · 从机发,主机收 CSn · 片选(每从机一根) 多从机怎么接:两种方式 独立 CSn:每从机一根片选线,共享 SCK/MOSI/MISO 菊花链:从机 MISO → 下一从机 MOSI 串联,共用一根 CSn 主机独占时钟与片选控制权;无地址机制,靠 CSn 区分从机。

时钟模式 (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

三总线对比

特性UARTI2CSPI
线数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