1. SPI通信协议概述
SPI(Serial Peripheral Interface)是一种同步串行通信协议,由摩托罗拉在1980年代提出,现已成为嵌入式系统中最常用的短距离通信标准之一。与I2C、UART等协议相比,SPI以其全双工、高速率、简单硬件实现的特性,在传感器、存储器、显示模块等外设连接中占据重要地位。
我初次接触SPI是在开发一个温湿度监测系统时,需要将STM32与DHT22传感器连接。当时在I2C和SPI之间犹豫,最终选择SPI是因为其10MHz的时钟频率能实现实时数据采集。这个决定让我深刻体会到协议选型对项目成败的影响。
2. SPI核心工作机制解析
2.1 四线制基础架构
SPI采用主从架构,核心包含四条信号线:
- SCLK(Serial Clock):主设备产生的同步时钟
- MOSI(Master Out Slave In):主→从数据线
- MISO(Master In Slave Out):从→主数据线
- SS/CS(Slave Select):片选信号(低电平有效)
关键细节:实际应用中,当存在多个从设备时,通常需要为每个从设备分配独立的SS线。我曾在一个项目中连接了5个SPI设备,由于SS线阻抗不匹配导致通信异常,最终通过增加缓冲器解决。
2.2 时钟极性与相位
SPI的通信时序由CPOL(Clock Polarity)和CPHA(Clock Phase)两个参数决定:
- CPOL=0:时钟空闲状态为低电平
- CPOL=1:时钟空闲状态为高电平
- CPHA=0:数据在时钟第一个边沿采样
- CPHA=1:数据在时钟第二个边沿采样
四种组合模式对应的设备兼容性测试:
| 模式 | CPOL | CPHA | 适用设备示例 |
|---|---|---|---|
| 0 | 0 | 0 | 多数Flash存储器 |
| 1 | 0 | 1 | TI传感器模块 |
| 2 | 1 | 0 | ADI转换器 |
| 3 | 1 | 1 | 部分RFID芯片 |
