SPI的起源
SPI接口最早由Motorola(现为NXP)公司提出,用于处理器与外围设备之间的高速数据传输。由于其简单、高效、低资源占用的特点,迅速被广泛采用,成为嵌入式系统中最常见的通信协议之一。
SPI的信号传输模式
SPI采用主从架构(Master-Slave),通常由一个主机(Master)控制一个或多个从机(Slave)。通信方式基于全双工数据传输,主要包含以下信号线:
- SCLK(Serial Clock,串行时钟): 由主机提供的时钟信号,控制数据传输速率。
- MOSI(Master Out Slave In,主输出从输入): 主机发送数据到从机的信号线。
- MISO(Master In Slave Out,主输入从输出): 从机发送数据到主机的信号线。
- CS/SS(Chip Select/Slave Select,片选信号): 低电平使能,从机通过此信号识别是否与主机通信。
三线的SPI模式通常省略CS/SS,在电路上使其一直处于使能状态。
SPI的四种模式(时钟极性和相位)
SPI通信由CPOL(时钟极性)和CPHA(时钟相位)决定,共有4种模式:
模式 | CPOL | CPHA | 空闲时钟状态 | 采样时间 |
---|---|---|---|---|
Mode 0 | 0 | 0 | 低电平 | 下降沿采样 |
Mode 1 | 0 | 1 | 低电平 | 上升沿采样 |
Mode 2 | 1 | 0 | 高电平 | 上升沿采样 |
Mode 3 | 1 | 1 | 高电平 | 下降沿采样 |
不同的SPI设备可能使用不同模式,使用时需匹配主从设备的SPI模式。
SPI的电器参数
SPI的电气特性因设备不同而有所差异,主要关注以下参数:
- 工作电压(Vcc): 通常为3.3V或5V。
- 时钟频率(SCLK): 取决于主机和从机的支持能力,典型范围从几百kHz到几十MHz。
- 逻辑电平: 通常符合CMOS/TTL标准,高低电平阈值应与系统电源电压匹配。
- 上拉/下拉电阻: 片选(CS)引脚通常需要上拉,确保未选中时维持高电平。
SPI的应用设计
典型应用场景
- 传感器接口:如加速度计(MPU6050)、温湿度传感器等。
- 存储设备:如Flash(W25QXX系列)、EEPROM(AT25系列)。
- 显示屏:如OLED、LCD(ST7789、ILI9341)。
- 通信模块:如WiFi、LoRa、RFID等无线通信模块。
常见问题及解决方案
问题 | 可能原因 | 解决方案 |
---|---|---|
无法通信 | 时钟极性/相位不匹配 | 确保主从模式一致 |
传输数据错误 | 信号完整性问题、时钟速率过高 | 降低SCLK频率,检查信号质量 |
片选异常 | 片选信号干扰或未正确拉高/拉低 | 适当添加上拉电阻 |
多从机通信混乱 | CS信号冲突 | 确保仅一个从机CS有效 |
数据错位 | 时钟和数据采样时序不匹配 | 校准CPOL和CPHA设置 |