|
用 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,不影响性能。 |
4-开发生态篇:TouchGFX+STM32Cube 一站式 GUI 落地流程
2-架构革新篇:STM32单芯片嵌入式GUI核心技术原理与性能优势
【福利三:逢7发帖赢大礼】使用MPU6050模块、img_dsc、img_btn机制实现一些简单有趣的动画效果
【福利三:逢7发帖赢大礼】使用arc弧形拉条控件控制PWM舵机及使用SPI3接口操作NRF24L01模块进行无线通信
1-趋势痛点篇:嵌入式 GUI 爆发,传统外挂存储架构的多重工程瓶颈
【福利三:逢7发帖赢大礼】调试nucleo-WBA65RI工程测试样板的一些心得
【福利三:逢7发帖赢大礼】lv_timer和BME680实现温度、湿度、气压数据读取
【福利三:逢7发帖赢大礼】成功利用STM32H743VI片内SRAM12和DTCM空间(完全胜利)
【福利三:逢7发帖赢大礼】想要充分利用STM32H743VI片内的RAM空间(但并不顺利)
【福利三:逢7发帖赢大礼】使用惠勤致远STM32H743VI开发板+ST7796并口彩屏移植LVGL9.5并分享一些额外内容
微信公众号
手机版