|
用 STM32H750 通过 QSPI 挂载外扩 NOR FLASH、开内存映射模式跑程序,大概率会碰到一个超级隐蔽的坑:常温正常运行,大约 2 小时后必然死机,且死机位置不固定,有时死在定时器入口,有时死在中断赋值语句,怎么查都找不到原因。 这篇 LAT1151 是 ST 官方给出的标准答案,告诉你这不是硬件问题、不是电源问题,而是H750 勘误 + Cache 预取 + QSPI 内存映射共同引发的 BUG。 资料获取:【应用笔记】LAT1151 程序运行在 STM32H750 的外扩 FLASH 上两小时后死机1. 典型故障现象(完全一致就是同款问题)
2. 真正根因:H750 勘误 + Cortex-M7 预取机制LAT1151 明确指出:这是 STM32H750xB/H753xI 官方勘误(ES0396 2.4.4) 问题:QSPI 内存映射模式下,读取 FSIZE 配置区域的最后一个字节,会导致 AXI 总线挂死(stall),CPU 直接卡死。 再加上 Cortex‑M7 指令预取 & 分支预测:即使你的代码没到 FLASH 末尾,CPU 也会提前预读后面的地址,最终触发 “最后一字节读取”,导致总线死锁。 时间随机 = 预取随机 → 2 小时左右命中一次。 3. 官方唯一正确解决方案(直接照做)3.1 QSPI Flash Size 配置 “放大一倍”不要配置实际大小,故意设大,留出安全裕量,避开最后一字节。 例:4MB FLASH → 配置成 8MB
3.2 配置 MPU 保护把实际不存在的空间设为 “禁止访问”,防止 CPU 乱读。 MPU 规则:
3.3 保持 Cache 开启不用关 Cache,性能不受影响。 4. 为什么关 Cache 能临时解决?因为关闭 Cache 后,M7 不再预取指令,不会触发 “读取最后一字节” 动作。 但关 Cache 会让性能暴跌,不能用于量产。 5. 最简总结(工程师记这 3 条)
STM32H750 外扩 QSPI FLASH 长时间死机,是勘误导致的读最后一字节 AXI 挂死。通过放大 FlashSize + MPU 保护,即可彻底根治,不需要关 Cache,不影响性能。 |
STM32 硬核调试技巧:用 DWT 硬件监控内存读写与函数调用
SPI 高温读错最后一位?STM32F42xx 官方根治方案
一步到位!STM32CubeIDE 搭建 ClassB 功能安全工程
STM32H723 多通道序列 ADC 启动不了?寄存器操作必须等 ADRDY 就绪
NUCLEO-G474RE 扩展 LSM6DSO 传感器数据融合实操演示全解析
STM32F745 USART1 Bootloader启动失败排查与解决的流程分析
经验分享 | STM32G474 高精度定时器同步功能全解析 从内部互联到多芯片协同的实现方案
STM32L4R9 QuadSPI Flash通讯速率优化解析 32位总线的DMA传输适配核心方案
吃透:STM32WB 上 Zigbee 睡眠终端设备开发攻略
STM32 无线 MCU HSE 频率与启动时间精确调谐实战指南
微信公众号
手机版