当前位置: 首页 > news >正文

​SPI四种工作模式

以下是 SPI四种模式 的详细对比与配置指南,结合STM32硬件特性,以表格和时序图清晰展示差异:


SPI四种模式核心对比表

模式CPOLCPHA空闲时钟电平数据采样边沿数据切换边沿典型应用场景
Mode 000低电平上升沿(第一个边沿)下降沿(第二个边沿)大多数传感器(如BME280)
Mode 101低电平下降沿(第二个边沿)上升沿(第一个边沿)部分ADC芯片(如MCP3008)
Mode 210高电平下降沿(第一个边沿)上升沿(第二个边沿)少数EEPROM(如93LCxx)
Mode 311高电平上升沿(第二个边沿)下降沿(第一个边沿)SD卡(SPI模式)、RFID

时序图解析

在这里插入图片描述


模式选择与配置要点

1. 如何选择模式?
  • 查阅从设备手册:优先确认从设备支持的SPI模式(如BME280传感器强制要求Mode 0)。
  • 默认推荐:无特殊要求时选择 Mode 0(最通用)或 Mode 3(SD卡常用)。
2. STM32硬件SPI配置示例
// 以Mode 0为例配置SPI1(STM32标准库)
SPI_InitTypeDef SPI_InitStruct = {.SPI_Mode              = SPI_Mode_Master,     // 主模式.SPI_Direction         = SPI_Direction_2Lines_FullDuplex, // 全双工.SPI_DataSize          = SPI_DataSize_8b,     // 8位数据.SPI_CPOL              = SPI_CPOL_Low,        // CPOL=0 (Mode 0/1).SPI_CPHA              = SPI_CPHA_1Edge,      // CPHA=0 (Mode 0).SPI_NSS               = SPI_NSS_Soft,         // 软件控制片选.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8, // 分频系数.SPI_FirstBit          = SPI_FirstBit_MSB     // 高位先行
};
SPI_Init(SPI1, &SPI_InitStruct);
SPI_Cmd(SPI1, ENABLE);
3. 软件模拟SPI的关键差异
// Mode 0 vs Mode 3的GPIO初始化差异(关键部分)
if (mode == 0) {// CLK初始低电平(CPOL=0)GPIO_ResetBits(SPI_CLK_PORT, SPI_CLK_PIN);
} else if (mode == 3) {// CLK初始高电平(CPOL=1)GPIO_SetBits(SPI_CLK_PORT, SPI_CLK_PIN);
}// 数据采样边延选择
if (mode == 0 || mode == 3) {// CPHA=0: 第一个边沿采样 | CPHA=1: 第二个边沿采样
}

各模式下的通信流程

Mode 0 数据收发流程
void SPI_Mode0_SendByte(uint8_t data) {for (uint8_t i = 0; i < 8; i++) {// 下降沿切换数据if (data & 0x80) MOSI_HIGH();else MOSI_LOW();data <<= 1;// 上升沿采样(从设备读取)SCLK_HIGH();delay_ns(50);  // 保持稳定SCLK_LOW();}
}
Mode 3 数据收发流程
void SPI_Mode3_SendByte(uint8_t data) {for (uint8_t i = 0; i < 8; i++) {// 上升沿切换数据SCLK_HIGH();if (data & 0x80) MOSI_HIGH();else MOSI_LOW();data <<= 1;// 下降沿采样(从设备读取)SCLK_LOW();delay_ns(50);}
}

常见问题解答

Q1:如何判断设备使用哪种模式?
  • 方法1:查阅从设备数据手册的"SPI Timing Diagram"部分。
  • 方法2:用逻辑分析仪捕获实际通信波形,观察SCLK空闲电平和采样边沿。
Q2:模式配置错误会怎样?
  • 现象:数据错位、通信失败(如读取的传感器数据全为0xFF或0x00)。
  • 解决方案:检查主从设备的CPOL/CPHA是否匹配。
Q3:为什么SD卡常用Mode 3?
  • 原因:SD卡规范要求SPI模式为CPOL=1, CPHA=1(Mode 3),确保在时钟下降沿切换数据时,上升沿能稳定采样。

总结

  • 模式0模式3是最常用的两种模式,覆盖90%的应用场景。
  • 关键区别在于时钟空闲状态(CPOL)和数据采样时刻(CPHA)。
  • 在STM32中,硬件SPI可通过SPI_CPOLSPI_CPHA参数快速配置,软件模拟SPI需严格遵循时序。
http://www.dtcms.com/a/490496.html

相关文章:

  • 深度学习------YOLOV1和YOLOV2
  • 最小二乘问题详解5:非线性最小二乘求解实例
  • 算法入门数学基础
  • 错误边界:用componentDidCatch筑起React崩溃防火墙
  • 网站备案提交管局原创软文
  • 成都比较好的网站建设公司视频制作和剪辑软件
  • 如何从电脑上卸载安卓应用程序
  • 每日手撕算法--哈希映射/链表存储数求和
  • k8s的pvc和pv
  • RK3562核心板/开发板RT-Linux系统实时性及硬件中断延迟测试
  • node.js把webp,gif格式图片转换成jpg格式图片
  • 不能识别adb/usb口记录
  • SpringBoot-常用注解
  • 支付商城网站制作软件开发报价表
  • wordpress类似的平台快速优化排名公司推荐
  • Git 基础操作指南
  • 网站给部分文字做遮挡代码wordpress主题仿逛丢
  • 【bug】大模型微调bug:OSError: Failed to load tokenizer.| Lora
  • 视频生成的背后机理:Wan2技术报告分析
  • 有什么做衣服的网站吗天津市建筑信息平台
  • HTB BoardLight writeup(enlightenment 0.23.1 exploit)
  • 唐山网站搭建平台制作计划
  • 智能体面试题:ReAct框架 是什么
  • 泰山派rk3566 wifi基础知识
  • 【无标题】大模型-AIGC技术在文本生成与音频生成领域的应用
  • 渗透测试(2):不安全配置、敏感明文传输、未授权访问
  • 有记事本做简易网站深圳网站设计x程序
  • AI教育开启新篇章
  • 使用bert-base-chinese中文预训练模型,使用 lansinuote/ChnSentiCorp 中文网购评价数据集进行情感分类微调和训练。
  • 国内做设计的网站做视频素材哪个网站好