4. SPI 与 I2C 对比:关键差异速查表

在驱动小尺寸 LCD 显示屏时,选择 SPI 还是 I2C 总线,直接影响显示刷新率、引脚占用、布线复杂度和系统功耗。下表从 速度、引脚数、通信距离、多设备支持 和 功耗 五个核心维度进行对比,帮助你在项目初期做出正确决策。

对比维度 SPI(串行外设接口) I2C(内部集成电路)
通信速度 典型 10~80 MHz,最高可达 100+ MHz;适合高帧率 LCD 刷新 标准模式 100 kHz,快速模式 400 kHz,高速模式 3.4 MHz;远低于 SPI
引脚数量 4 线(SCLK、MOSI、MISO、CS)或 3 线(半双工);每增加一个从设备需额外 CS 引脚 2 线(SCL、SDA);所有从设备共享总线,无需额外片选
通信距离 板级 10~30 cm;超过 50 cm 需降低速率或加驱动芯片 板级 10~50 cm;受限于总线电容,长距离易导致信号畸变
多设备支持 点对点或星型拓扑;每个从设备独占 CS 线,设备数受限于 GPIO 数量 总线型拓扑;7 位地址最多 127 个设备,10 位地址最多 1023 个设备
功耗 静态时 CS 高电平、时钟停止,功耗较低;高速运行时动态功耗随频率线性上升 总线空闲时 SCL/SDA 上拉电阻持续消耗微安级电流;整体功耗通常低于同速率 SPI
硬件复杂度 全双工,无需地址解析;从设备逻辑简单 半双工,需地址仲裁和 ACK/NACK 机制;从设备需实现状态机
典型 LCD 应用 TFT 彩屏、高刷新率 OLED(如 320×240 以上) 单色段码屏、低分辨率 OLED(如 128×64)
选型速记: 需要高帧率动画或全彩显示 → 选 SPI;引脚紧张或只需显示静态文本/图标 → 选 I2C。

4.1 速度与引脚数:最核心的取舍

SPI 以 更多引脚 换取 更高速度,I2C 以 更少引脚 换取 更低速度。对于小尺寸 LCD:

  • SPI 优势: 时钟频率可达 40~80 MHz,配合 4 线模式,刷新 320×240 TFT 屏可达 30~60 fps,无闪烁。
  • I2C 优势: 仅需 2 根线(SCL + SDA),在引脚受限的 MCU(如 8 脚封装)上仍可驱动 128×64 OLED,但帧率通常低于 10 fps。
实测参考: 使用 STM32F103 驱动 1.3 寸 240×240 TFT:SPI(40 MHz)全屏填充耗时约 8 ms;I2C(400 kHz)相同操作耗时约 120 ms,差距达 15 倍。

4.2 多设备支持:总线拓扑 vs 点对点

当系统需要同时挂载 LCD、传感器、EEPROM 等多个外设时,两种总线的扩展方式截然不同:

  • I2C: 所有设备挂在同一条 SCL/SDA 总线上,通过 7 位或 10 位地址区分。添加新设备只需分配唯一地址,无需额外引脚。
  • SPI: 每个从设备需要独立的 CS 引脚。若 MCU 引脚充足,可挂载任意数量设备;若引脚紧张,则需使用 GPIO 扩展器或 SPI 多路复用器。
SPI 点对点拓扑 vs I2C 总线拓扑 SPI(独立 CS 线) 主控 MCU LCD (CS1) 传感器 (CS2) EEPROM (CS3) SCLK + MOSI + MISO 共享 CS1/CS2/CS3 独立 I2C(共享总线) 主控 MCU LCD (0x3C) 传感器 (0x48) EEPROM (0x50) SCL + SDA 两根线共享 通过 7 位地址区分设备

4.3 通信距离与信号完整性

两种总线都设计为 板级通信,但距离限制不同:

  • SPI: 高速时钟(>10 MHz)在超过 20 cm 的排线或 FPC 上会产生反射和串扰。建议使用屏蔽线或降低时钟至 5 MHz 以下。
  • I2C: 总线电容限制是主要瓶颈。400 kHz 模式下总线电容应 < 400 pF;超过 50 cm 时需使用缓冲器或降低速率至 100 kHz。
布线警告: 驱动 LCD 时,SPI 的 SCLK 和 MOSI 应远离电源纹波和晶振信号;I2C 的 SCL/SDA 上拉电阻推荐 4.7 kΩ(100 kHz)或 2.2 kΩ(400 kHz),具体值需根据总线电容计算。

4.4 功耗对比:静态与动态

对于电池供电的便携设备,功耗差异可能决定产品续航:

工作状态 SPI 典型功耗 I2C 典型功耗 说明
空闲(总线静止) ~1 µA(CS 高电平,时钟停止) ~5 µA(上拉电阻持续耗电) I2C 上拉电阻无法完全关断
低速通信(100 kHz) ~0.5 mA ~0.3 mA I2C 半双工,驱动电流较小
高速通信(10 MHz+) ~5~15 mA 不适用(I2C 最高 3.4 MHz) SPI 动态功耗随频率线性上升
低功耗策略: 若 LCD 大部分时间处于休眠,仅偶尔刷新静态画面,I2C 的 2 线制可节省 GPIO 功耗;若需要持续动画显示,SPI 能以更短时间完成传输,让 MCU 更快进入睡眠模式,整体功耗反而更低。

4.5 综合选型决策树

以下决策流程可帮助你在项目初期快速确定总线类型:

SPI vs I2C 选型决策树 LCD 驱动总线选择 引脚紧张(≤ 4 个空闲 GPIO) 性能优先(高帧率/全彩) I2C 2 线制 适用:128×64 OLED、段码屏 SPI 4 线制 适用:240×240 TFT、高刷 OLED 若引脚充足且需要多设备共享总线,可考虑 SPI + 独立 CS 或 I2C 多主模式 若功耗敏感且刷新率 < 5 fps,I2C 是更优选择

4.6 总结:何时选 SPI,何时选 I2C

场景 推荐总线 理由
全彩 TFT 屏,分辨率 > 160×128 SPI 需要 > 10 MHz 时钟才能达到可接受帧率
单色 OLED,分辨率 ≤ 128×64 I2C 2 线制节省引脚,数据量小,I2C 速率足够
电池供电,大部分时间休眠 I2C 空闲功耗略低,且无需额外 CS 引脚控制
需要同时挂载 LCD + 多个传感器 I2C 总线拓扑,地址区分,无需额外引脚
需要高速刷新的动画或视频播放 SPI I2C 速率上限 3.4 MHz,无法满足高帧率
MCU 引脚极度受限(如 8 脚封装) I2C 仅需 2 根线,SPI 至少需要 3~4 根
进阶提示: 部分 LCD 驱动 IC(如 SSD1306、ST7735)同时支持 SPI 和 I2C 接口,通过硬件引脚(如 BS0/BS1)选择模式。设计 PCB 时预留两种接口的焊盘,可在调试阶段灵活切换。