目前使用STM32 F407做一个项目,遇到了内部Flash里的程序有时会意外被擦除的情况,请高手帮忙分析分析情况。
类似的问题在论坛里也有一些人提出来过,不过没有找到对我有帮助的答案。
具体的情况是:
程序用J-Link下载到F407里之后,可以正常运行。但偶然情况下程序就运行不起来了,重新再用J-Link烧录一遍固件,板子就有可以正常工作,一点没问题。所以就怀疑程序运行不起来的时候是程序已经不在Flash里了。后来把出问题的板子里的Flash里的内容通过J-Link往外读,发现确实里面的内容有大概几百个Byte变成了0x00,也就是说Flash里的内容被意外写零了,但不是全部,就是整个程序中间的一部分。
如果正常使用,差不多1,2天就会出现一次这种情况,再重新烧录就又能正常使用1,2天,如果人为将故障复现,可以在电源出迅速上电,断电,就比较容易出现此种情况,所以此种情况似乎和电源不稳定有点儿关系,可为什么又会将Flash意外擦除呢?
再简单描述一下硬件: 很简单,就是标准的F407一块加上一个USB的物理层(因为是2.0高速),整块板由USB的Vbus供电,即Vbus接1117-3.3,然后1117的3.3V给MCU和USB的PHY供电。MCU的两个BOOT都是通过下拉电阻接地。NRST只是接到了J-Link的接口上,因为没有按键复位的需求。按手册上的图,NRST对地应该接个0.1uF的电容,我没有接,不过这应该不是导致Flash被改写的因素。板子整体的耗电量大约是120mA,远小于USB可提供的500mA。
所以目前急切想请教高手:
1. 在什么样的情况下,会导致STM32内部的Flash中的一小部分被意外改写成0。
2.即使硬件设计中存在不合理的地方,F407或STM32的MCU本身有什么防护措施能防止这种情况发生? |