Bootstrap

SPI 接口:一文读懂,不再踩坑!

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种模式:

模式CPOLCPHA空闲时钟状态采样时间
Mode 000低电平下降沿采样
Mode 101低电平上升沿采样
Mode 210高电平上升沿采样
Mode 311高电平下降沿采样

不同的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设置
;