我们使用的是 MPC5647 设备。
我们使用Trace32,将一个应用程序编程写入了内部闪存区域。编程过程刚开始(或刚一完成),目标硬件的电源就被切断了。
此事件发生后,便无法再访问应用区域中的闪存。通过Trace32访问Flash时,内存内容显示为"????????" ,或者"FFFFFFFF" 。我们怀疑是在Flash编程操作尚未完全结束之前就切断了电源。
在此情况下,应用闪存区域将无法使用,且只能通过执行 AN4521_MPC56xx C90FL Flash Recovery.pdf 中所述的出厂恢复程序来恢复闪存。执行恢复操作后,闪存即可再次使用。
我们希望了解以下内容:
是什么原因导致了这种现象?
为什么在闪存编程过程中发生意外断电会导致无法访问该闪存块?
为什么不能直接对闪存进行重新编程呢?
为什么在重新对闪存进行编程之前,必须先执行恢复/出厂初始化操作?
这是否与无效的 ECC 状态、不完整的擦除操作,还是其他闪存控制器内部状况有关?
如果能对Flash的内部工作原理进行详细说明,我们将不胜感激。
你好
此事件发生后,便无法再访问应用区域中的闪存。通过Trace32访问Flash时,内存内容显示为"????????" ,或者"FFFFFFFF" 。我们怀疑是在Flash编程操作尚未完全结束之前就切断了电源。
这表明闪存可能已损坏。
在此情况下,应用闪存区域将无法使用,且只能通过执行 AN4521_MPC56xx C90FL Flash Recovery.pdf 中所述的出厂恢复程序来恢复闪存。执行恢复操作后,闪存即可再次使用。
这肯定是编程过程中因断电导致的闪存损坏。闪存中存在大量ECC错误,这就是为什么你在跟踪信息中看到“?????”的原因。
为什么在闪存编程过程中发生意外断电会导致无法访问该闪存块?
简而言之,如果您未完成编程或进行了擦除,闪存数据将出现不匹配,并伴随ECC症状。
为什么在重新对闪存进行编程之前,必须先执行恢复/出厂初始化操作?
标准程序命令期望获得一个已彻底擦除的块
中断后:
控制器检测到无效状态 → 拒绝命令
因此:
擦除/编程序列始终无法正确启动
访问可能被阻止或返回虚假数据
这是否与无效的 ECC 状态、不完整的擦除操作,还是其他闪存控制器内部状况有关?
因电源中断而进入ECC状态。
顺祝商祺!
Peter