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 多路复用器。
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 综合选型决策树
以下决策流程可帮助你在项目初期快速确定总线类型:
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 时预留两种接口的焊盘,可在调试阶段灵活切换。