SPI(Serial Peripheral Interface) 接口根据时钟极性(CPOL)和时钟相位(CPHA)的不同组合,共有 4种工作模式。这些模式决定了数据采样和传输的时序关系,是SPI通信中必须正确配置的关键参数。以下是详细解析:


1. SPI的4种工作模式

SPI模式由两个参数定义:

  • CPOL(Clock Polarity):时钟空闲时的电平状态。
    • CPOL=0:空闲时为低电平。
    • CPOL=1:空闲时为高电平。
  • CPHA(Clock Phase):数据采样的时钟边沿。
    • CPHA=0:在时钟的第一个边沿(上升沿或下降沿)采样数据。
    • CPHA=1:在时钟的第二个边沿采样数据。

组合后形成4种模式:

模式 CPOL CPHA 空闲时钟 数据采样边沿 数据切换边沿
Mode 0 0 0 低电平 第一个上升沿(SCK从低→高) 下降沿(SCK从高→低)
Mode 1 0 1 低电平 第一个下降沿(SCK从高→低) 上升沿(SCK从低→高)
Mode 2 1 0 高电平 第一个下降沿(SCK从高→低) 上升沿(SCK从低→高)
Mode 3 1 1 高电平 第一个上升沿(SCK从低→高) 下降沿(SCK从高→低)

2. 模式对比与波形示例

Mode 0(最常用)
  • 波形特点
    • 空闲时SCK为低电平。
    • 数据在SCK上升沿被采样,下降沿切换。
  • 典型应用:多数传感器(如BME280)、FLASH芯片(如W25Q64)。
Mode 1
  • 波形特点
    • 空闲时SCK为低电平。
    • 数据在SCK下降沿被采样,上升沿切换。
  • 典型应用:部分ADC芯片(如MCP3008)。
Mode 2
  • 波形特点
    • 空闲时SCK为高电平。
    • 数据在SCK下降沿被采样,上升沿切换。
  • 典型应用:较少见,某些特定射频模块。
Mode 3
  • 波形特点
    • 空闲时SCK为高电平。
    • 数据在SCK上升沿被采样,下降沿切换。
  • 典型应用:部分EEPROM(如AT25系列)。

3. 如何选择SPI模式?

  1. 查阅器件手册:从设备的SPI模式是固定的,必须与主设备匹配。
    • 例如:BMP280传感器默认Mode 0,而ADXL345支持Mode 0和Mode 3。
  2. 观察时序图
    • 确认数据采样边沿与时钟极性/相位的对应关系。
  3. 实验调试
    • 若通信失败,可尝试切换模式(常见错误:Mode 0与Mode 3混淆)。

4. SPI的其他关键配置

除了模式,还需配置以下参数:

  • 时钟频率(SCK):从设备支持的最大频率(如10 MHz)。
  • 数据位顺序(MSB/LSB First):通常MSB优先。
  • 片选信号(CS):高电平有效或低电平有效。

5. 代码示例(STM32配置SPI Mode 0)

// STM32 HAL库配置SPI Mode 0
SPI_HandleTypeDef hspi;
hspi.Instance = SPI1;
hspi.Init.Mode = SPI_MODE_MASTER;
hspi.Init.Direction = SPI_DIRECTION_2LINES;
hspi.Init.DataSize = SPI_DATASIZE_8BIT;
hspi.Init.CLKPolarity = SPI_POLARITY_LOW;   // CPOL=0
hspi.Init.CLKPhase = SPI_PHASE_1EDGE;       // CPHA=0
hspi.Init.NSS = SPI_NSS_SOFT;
hspi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32;
HAL_SPI_Init(&hspi);

6. 常见问题

  • 模式不匹配:主从设备模式不一致导致数据读取错误。
  • 时钟频率过高:从设备无法响应,表现为数据丢失。
  • 片选信号未控制:未拉低CS导致通信无响应。

总结

SPI的4种模式通过CPOL和CPHA组合定义,需严格匹配从设备要求。Mode 0和Mode 3最为常见,Mode 1和Mode 2多用于特定器件。配置时务必结合时序图和手册验证!

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐