闪存损坏,显示为?(问号)
使用STM32CubeIDE开发STM32F429芯片。在使用flash时,有时会出现内部数据损坏的情况,显示为"?"。可能是什么原因导致部分内存显示为"?"?如何在不触发硬错误的情况下识别这个问题?为什么在使用HAL_FLASHEx_Erase_IT后,数据变成了'0'而不是'1'?STM32 的 FLASH 擦除后确实是全 1,不是 0,除非擦除没成功或者写了 0。 出现 ? 通常是读到非法地址或者数据校验失败,你读数据有没有做校验? 用 HAL_FLASHEx_Erase_IT 的时候,中断里有没有等擦除完成再写? 擦除出错可能是电压不稳,FLASH 写擦都对供电有要求。 有可能写入的时候被别的中断打断了,写了一半掉电也会花屏。 STM32 的 FLASH 最小擦除单位是扇区,写的时候要对齐,没对齐会覆盖错地方。 想判断损坏可以给数据加 CRC 或者 magic number,先判头尾标记。 显示 ? 也可能是你用串口或者 LCD 显示时格式化出错,并不一定真是问号。 你有开 ICACHE 或 DCACHE 吗?有时候读到缓存里没刷出来也会假数据。 建议写完后用 HAL_FLASH_Program 再读一遍核对,别直接假定写成功了。
页:
[1]