小库里 发表于 2025-7-19 05:10

闪存损坏,显示为?(问号)

使用STM32CubeIDE开发STM32F429芯片。在使用flash时,有时会出现内部数据损坏的情况,显示为"?"。可能是什么原因导致部分内存显示为"?"?如何在不触发硬错误的情况下识别这个问题?为什么在使用HAL_FLASHEx_Erase_IT后,数据变成了'0'而不是'1'?

公羊子丹 发表于 2025-7-24 07:18

STM32 的 FLASH 擦除后确实是全 1,不是 0,除非擦除没成功或者写了 0。

周半梅 发表于 2025-7-24 07:19

出现 ? 通常是读到非法地址或者数据校验失败,你读数据有没有做校验?

帛灿灿 发表于 2025-7-24 07:20

用 HAL_FLASHEx_Erase_IT 的时候,中断里有没有等擦除完成再写?

童雨竹 发表于 2025-7-24 07:22

擦除出错可能是电压不稳,FLASH 写擦都对供电有要求。

万图 发表于 2025-7-24 07:25

有可能写入的时候被别的中断打断了,写了一半掉电也会花屏。

Wordsworth 发表于 2025-7-24 07:29

STM32 的 FLASH 最小擦除单位是扇区,写的时候要对齐,没对齐会覆盖错地方。

Bblythe 发表于 2025-7-24 07:31

想判断损坏可以给数据加 CRC 或者 magic number,先判头尾标记。

Pulitzer 发表于 2025-7-24 07:32

显示 ? 也可能是你用串口或者 LCD 显示时格式化出错,并不一定真是问号。

Uriah 发表于 2025-7-24 07:33

你有开 ICACHE 或 DCACHE 吗?有时候读到缓存里没刷出来也会假数据。

Clyde011 发表于 2025-7-24 07:34

建议写完后用 HAL_FLASH_Program 再读一遍核对,别直接假定写成功了。
页: [1]
查看完整版本: 闪存损坏,显示为?(问号)