AVR单片机丢固件原因分析和解决方案

一。硬件方面

除了下面列举的方面,还需要评估下其他措施。

1.电源因素,禁干扰。

只要用廉价劣质的开关电源,不管哪个单片机,都存在EEPROM丢数据和单片机程序丢失的情况。

1.转接板走线,直接接到了单片机IO,静电会直接传导到单片机。应该设计放静电电路。可以到专门实验室做打静电测试验证是否会导致丢程序。

2.对于所有包含有Flash/擦除子程序的系统,当CPU工作在规定的VDD、温度、系统时钟频率范围之外时,对Flash进行写/擦除操作,都有可能出现Flash数据错误的现象。

   系统在单片机的工作电压没有稳定时就已经完成复位,由于系统复位时需要从Flash读出代码数据,Flash电压不稳定会出现不可预测的错误。 

 

① 在RST引脚安装VDD监测电路,并将VDD监视设置为一个复位源。这样如果系统电压不稳定,系统将自动复位,从而避免在电压不稳时访问Flash
  ③ 外部晶振信号线应尽量靠近单片机的输入端,同时晶振外壳接地。
  ④ 对于使用外部晶振作时钟源的系统,应尽量增强晶振的驱动能力,这样也能在一定程度上预防程序丢失。

二.从软件方面预防程序丢失 

程序丢失的主要原因是程序设计的缺陷,所以合理的程序代码设计能极大地预防该问题的出现。在代码中可以用多种方法来预防Flash数据丢失:

 关中断。

 在初始化单片机时,使能VDD检测,并设置VDD和时钟丢失为复位源。如果程序中有写/擦除Flash的代码,则在写/擦除操作前切换系统时钟,将系统时钟切到内部时钟或对外部时钟2分频;写/擦除操作完成之后,再恢复系统时钟,通过增加Flash修改操作时的时间开销来实现系统的稳定 。

 

是在平时正常使用的时候出现丢固件,还是本来可以正常使用,只是执行升级这个动作失败,导致的丢固件??无从考证,所以需要检查下升级本身代码有没有风险。

 

目前从bootloader入手,先检查下代码。

 

posted @ 2020-02-27 17:34  leida_3669  阅读(1658)  评论(0编辑  收藏  举报