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

FLEXSPI_Init 硬件故障问题

        使用官方例程发现FLEXSPI_Init会引起硬件故障,查阅相关帖子发现主要有两个可能:

1、外部闪存配置差异

  • 修改 LUT(查找表)命令:示例中擦除扇区命令为 0xD7,写状态寄存器命令为 0x01,需分别改为 闪存对应的 0x20 和 0x31;
  • 调整 QE 位配置:将头文件中 FLASH_QUAD_ENABLE 的定义从 0x40 修改为 0x02,适配目标闪存的 QE 位设置;
  • 检查硬件引脚:确认 DQS 引脚(GPIO_SD_B1_05)处于浮动状态,避免影响 flexSPI 频率。若无法保证浮动,可将 flexSPI 频率降至 60MHz,并设置 FlexSPIn_MCR0 [RXCLKSRC] = 0x0,使用控制器内部环回的虚拟读取选通。

完成上述修改后, 配置从 RAM 运行程序(确保代码加载到 RAM 中测试,排除 Flash 启动相关问题),发现 SDK 示例程序能正常实现外部闪存的擦除、读写操作,但硬故障依然存在。

2. 中断干扰:PIT 模块

        既然硬件配置和基础代码逻辑没问题,发现项目中启用了 PIT(周期中断定时器)中断,用于实现定时功能。当注释掉 PIT 初始化代码后,FLEXSPI_Init 硬故障消失,外部闪存访问恢复正常。

        进一步验证发现:在进行 flexSPI 操作(尤其是初始化阶段的 SoftwareReset)时,若 PIT 中断触发,会打断 flexSPI 的正常时序流程,导致控制器进入硬故障状态。这是因为 flexSPI 操作对时序稳定性要求极高,任何外部中断的干扰都可能破坏其初始化过程。

解决方法:

针对 PIT 中断干扰问题,最直接有效的方案是在执行 flexSPI 操作前后进行中断控制

  • 在调用 FLEXSPI_Init 或发起闪存读写、擦除等操作前,通过中断屏蔽寄存器禁用 PIT 中断;
  • 待 flexSPI 操作完全完成后,再重新使能 PIT 中断,恢复定时功能。
http://www.dtcms.com/a/382578.html

相关文章:

  • Linux进程概念(下):进程地址空间
  • C++11_3(智能指针篇)
  • 从理论到实践:构建高效AI智能体系统的架构演进
  • 如何运用好DeepSeek为自己服务:智能增强的范式革命 | 1.3 人机认知耦合协议
  • 什么是PV操作?
  • 详解数据仓库和数据集市:ODS、DW、DWD、DWM、DWS、ADS
  • C++ `std::unique_lock` 深度解析:掌控并发资源的智能管家
  • 人员主数据的系统集成
  • C++(静态函数)
  • SonarQube代码质量管理平台本地化搭建和使用
  • Redis 线上问题排查完整手册
  • 异常数据处理全攻略:原理、方法与Python实战
  • Python 进阶:从基础到实战的核心技能提升
  • Scikit-learn:从零开始构建你的第一个机器学习模型
  • 如何快速获取全机硬件详细参数?
  • 嵌入式ARM架构学习7——时钟、定时器
  • 【C++练习】17.C++求两个整数的最大公约数(GCD)
  • SQL-字符串函数、数值函数、日期函数
  • Redis内存回收:过期策略与淘汰策略
  • 【css学习笔记9】品优购项目
  • 动态规划解决网格路径问题
  • 金融科技:企业和机构银行
  • C++ 异常
  • One-hot encoding|独热编码
  • AI论文速读 | VisionTS++:基于持续预训练视觉主干网络的跨模态时间序列基础模型
  • 如何学习VBA_3.3.9:利用“搭积木”思想,快速有效地完成你的代码
  • 《使用深度学习统一时间相位展开框架》论文总结
  • Windows下使用PerfMon进行性能监控并记录日志
  • 微信小程序开发教程(十二)
  • 【攻防实战】记一次攻防实战全流程