SPI和I2C的差别
SPI(Serial Peripheral Interface)和 I2C(Inter-Integrated Circuit)是两种常见的同步串行通信协议,在嵌入式系统和电子设备中广泛应用。以下是它们的核心差别对比:
一、物理层(硬件连接)
信号线数量 | 至少 4 根: - SCK(时钟) - MOSI(主发从收) - MISO(主收从发) - SS/CS(从设备选择,多从设备时必备) | 仅 2 根: - SDA(数据线) - SCL(时钟线) |
拓扑结构 | 星型拓扑:每个从设备独立连接 SS 线,主设备通过 SS 线选择目标从设备。 | 总线拓扑:所有设备共享 SDA 和 SCL 线,通过设备地址区分。 |
驱动方式 | 推挽输出(可主动输出高低电平),无需上拉电阻。 | 开漏 / 开集输出(仅能拉低电平),需外接上拉电阻(通常 4.7kΩ)到 VCC。 |
通信距离 | 短距离(通常 < 1m),高速传输时更短(受信号衰减和干扰影响)。 | 中短距离(通常 < 10m),速率较低时可延长(开漏结构抗干扰能力稍强)。 |
二、协议层(通信规则)
通信方式 | 全双工:主从设备可同时收发数据(通过 MOSI 和 MISO 双线传输)。 | 半双工:同一时刻只能单向传输(主→从或从→主),通过 SDA 线分时复用。 |
寻址机制 | 无地址概念,通过硬件 SS 线直接选择从设备(低电平有效)。 | 有 7 位或 10 位设备地址,主设备通过发送地址帧选择从设备。 |
时序模式 | 4 种模式(由 CPOL 和 CPHA 定义时钟极性和相位),需主从设备匹配。 | 固定时序:起始信号(SCL 高时 SDA 下降沿)、停止信号(SCL 高时 SDA 上升沿)。 |
数据单位 | 灵活,可自定义位数(通常 8 位 / 字节)。 | 固定 8 位 / 字节,每个字节后需跟随 1 位 ACK/NACK(应答位)。 |
错误检测 | 无内置机制,需软件实现校验(如 CRC)。 | 有 ACK/NACK 应答机制,接收方通过拉低 SDA 表示确认。 |
三、性能与应用场景
传输速率 | 高速:通常可达 10~100MHz(取决于芯片能力),适合大数据量高速传输(如 SD 卡、显示屏)。 | 中低速:标准模式 100kHz,快速模式 400kHz,高速模式 3.4MHz,适合传感器、EEPROM 等。 |
多设备支持 | 支持多从设备,但需额外 SS 线(每个从设备 1 根),硬件成本较高。 | 支持多设备(理论上 2^7=128 个 7 位地址设备),仅需 2 根线,硬件成本低。 |
主从关系 | 严格主从:从设备不能主动发起通信,必须由主设备控制。 | 支持多主模式:总线上可存在多个主设备,通过仲裁机制避免冲突。 |
典型应用 | 高速外设: - SD 卡、SPI Flash - OLED/LCD 显示屏 - 高速传感器(如摄像头) | 低速多设备互联: - 温湿度传感器(SHT30) - 加速度计(MPU6050) - EEPROM 存储器 |
四、优缺点总结
SPI | 1. 高速全双工,适合大数据量传输 2. 协议简单,无复杂寻址和应答机制 3. 时序灵活(4 种模式) | 1. 信号线多,硬件成本高 2. 不支持远距离通信 3. 无硬件错误检测机制,需软件实现校验 |
I2C | 1. 仅需 2 根线,支持多设备,硬件成本低 2. 有应答机制,可靠性较高 3. 支持多主模式 | 1. 半双工,速率受限 2. 地址空间有限(7 位地址仅 128 个) 3. 开漏结构需上拉电阻,功耗稍高 |
五、选择建议
- 选 SPI:当需要高速传输、全双工通信或简单直接的控制(如与 SD 卡、显示屏通信)时。
- 选 I2C:当需要多设备共享总线、中低速通信或减少布线复杂度(如连接多个传感器)时。
例如:
- 微控制器与 WiFi 模块通信(大数据量)→ SPI
- 微控制器同时连接温度传感器、压力传感器和 EEPROM → I2C
更多内容全在下方专栏
全网最受欢迎的嵌入式笔试专栏
笔试专栏包含全部最新的笔试必考考点,非常适合在找工作面经薄弱的同学
3000+订阅还会涨价,提前订阅提前享受,持续更新中。
专栏链接:https://www.nowcoder.com/creation/manager/columnDetail/mPZ4kk
#嵌入式秋招##嵌入式#