I2C 和 SPI 有什么区别?
更新时间:2026-09-21。问题驱动短答页。具体协议时序见 FPGA UART/SPI/I2C 接口,SPI 模式见 SPI CPOL/CPHA,I2C 见 I2C 主机开漏。
一句话回答
I2C 用两根线(SDA 数据 + SCL 时钟)靠设备地址寻址、支持多主、半双工、走开漏上拉,省引脚但速率较低;SPI 用至少四根线(SCLK/MOSI/MISO/CS)靠独立片选寻址、单主全双工、速率高、协议简单,但设备越多线越多。
对照表
| 维度 | I2C | SPI |
|---|---|---|
| 信号线 | SDA + SCL(2 线) | SCLK+MOSI+MISO+每从机一个 CS(4+N) |
| 寻址 | 设备地址(7/10 bit) | 独立片选 CS |
| 双工 | 半双工 | 全双工 |
| 多主 | 支持(仲裁/时钟拉伸) | 通常单主 |
| 电平 | 开漏 + 上拉,可线与 | 推挽 |
| 典型速率 | 100k/400k/1M/最高几 MHz | 数十 MHz 常见 |
| 协议复杂度 | 较高(起始/停止/ACK) | 低(按时钟移位) |
| 引脚/距离 | 省脚、板内短距 | 线多、板内短距 |
典型器件
- I2C:EEPROM、温度/加速度/气压等低速多传感器、GPIO 扩展器、RTC、小屏配置接口。例见 I2C EEPROM 页写、GPIO 扩展 PCF8574。
- SPI:Flash(XIP 启动,见 SPI Flash 启动)、高速 ADC/DAC、TFT 屏、对吞吐敏感的外设。
怎么选
- 引脚紧张、挂载多个低速器件、要多主:选 I2C。
- 要高带宽、全双工、协议尽量简单、设备少:选 SPI。
- SPI 还要确认 CPOL/CPHA 四种模式与主从采样边沿一致,见 CPOL/CPHA。
常见坑
- I2C 忘了上拉电阻或上拉太弱:开漏总线根本拉不高/上升沿太慢。
- I2C 地址冲突:同总线两个器件相同地址无法共存。
- SPI 多设备共线但 CPHA/CPOL 要求不同:切换设备要重配模式。
- SPI 片选一直不拉低/不释放:从机不收数据或总线被占。
- 以为 I2C 能跑很远:开漏+上拉只适合板内,长线要加中继/换差分总线。
总结
I2C 是两线、地址寻址、开漏上拉、支持多主的半双工总线,省引脚适合挂多个低速传感器和 EEPROM,代价是速率低、协议复杂、依赖上拉;SPI 是四线起步、片选寻址、推挽全双工的单主总线,速率高协议简单适合 Flash、ADC 和显示屏,代价是每个从机多一根 CS、不擅长多主;引脚和器件多优先 I2C,带宽和全双工优先 SPI,同时注意 I2C 上拉与地址、SPI 的 CPOL/CPHA 与片选。