I2C 和 SPI 是两种常见的串行通信协议,它们的时序图反映了数据传输的规则和信号变化。以下是两者的时序图结构和关键特征的文字描述:
一、I2C 时序图
I2C(Inter-Integrated Circuit)是一种两线制、半双工、主从式的同步通信协议,使用 SDA(数据线) 和 SCL(时钟线)。
其核心时序特征如下:
1. 起始条件(START)和停止条件(STOP)
• 起始条件:
SCL 为高电平时,SDA 从高电平跳变到低电平(类似“拉低”动作)。
• 停止条件:
SCL 为高电平时,SDA 从低电平跳变到高电平(类似“释放”动作)。
2. 数据传输
• 数据位传输:
• SCL 为低电平时,SDA 允许切换电平(准备数据);
• SCL 为高电平时,SDA 必须保持稳定(数据采样)。
• ACK/NACK(确认/非确认):
每传输完 8 位数据后,接收方在第 9 个时钟周期拉低 SDA(ACK),否则保持高电平(NACK)。
3. 完整时序流程
- 主设备发送 START 信号;
- 发送 7/10 位从设备地址 + 读写位(0 写,1 读);
- 从设备回应 ACK;
- 主从设备交替发送/接收数据 + ACK/NACK;
- 主设备发送 STOP 信号结束通信。
二、SPI 时序图
SPI(Serial Peripheral Interface)是一种四线制、全双工、主从式的同步通信协议,使用 SCK(时钟)、MOSI(主出从入)、MISO(主入从出)、SS(片选)。
其核心时序特征如下:
1. 片选信号(SS)
• SS 低电平有效:通信开始时主设备拉低从设备的 SS 线,结束时拉高。
2. 时钟极性(CPOL)和时钟相位(CPHA)
SPI 的时序由 CPOL 和 CPHA 的组合决定,分为四种模式:
• CPOL=0:时钟空闲时为低电平;
• CPOL=1:时钟空闲时为高电平;
• CPHA=0:数据在时钟的第一个边沿(上升沿或下降沿)采样;
• CPHA=1:数据在时钟的第二个边沿采样。
3. 数据传输
• 全双工传输:
• 主设备通过 MOSI 发送数据;
• 从设备通过 MISO 返回数据。
• 数据对齐:
数据在 SCK 的边沿(上升沿或下降沿)被采样,具体由 CPHA 决定。
4. 完整时序流程
- 主设备拉低 SS 信号选中从设备;
- 主设备生成 SCK 时钟;
- 主设备通过 MOSI 发送数据,同时从设备通过 MISO 返回数据;
- 主设备拉高 SS 信号结束通信。
三、I2C 和 SPI 时序对比
特性 | I2C | SPI |
---|---|---|
信号线数量 | 2 线(SDA, SCL) | 4 线(SCK, MOSI, MISO, SS) |
传输模式 | 半双工 | 全双工 |
速度 | 低速(标准模式 100kbps,高速 3.4Mbps) | 高速(可达 100Mbps 以上) |
硬件复杂度 | 简单(需处理起始/停止条件) | 简单(但需多根信号线) |
多从机支持 | 通过地址寻址(无需额外片选线) | 每从机需独立 SS 线 |
四、何时选择 I2C 或 SPI?
• 选择 I2C:
• 设备数量多且引脚资源紧张;
• 速度要求不高(如传感器、EEPROM)。
• 选择 SPI:
• 需要高速传输(如显示屏、Flash 存储器);
• 全双工通信(如同时发送和接收数据)。
通过时序图可以直观理解两种协议的工作流程,建议使用示波器或逻辑分析仪抓取实际信号验证时序。