AVR单片机丢固件原因分析和解决方案
一。硬件方面
除了下面列举的方面,还需要评估下其他措施。
1.电源因素,禁干扰。
只要用廉价劣质的开关电源,不管哪个单片机,都存在EEPROM丢数据和单片机程序丢失的情况。
1.转接板走线,直接接到了单片机IO,静电会直接传导到单片机。应该设计放静电电路。可以到专门实验室做打静电测试验证是否会导致丢程序。
2.对于所有包含有Flash写/擦除子程序的系统,当CPU工作在规定的VDD、温度、系统时钟频率范围之外时,对Flash进行写/擦除操作,都有可能出现Flash数据错误的现象。
系统在单片机的工作电压没有稳定时就已经完成复位,由于系统复位时需要从Flash读出代码数据,Flash电压不稳定会出现不可预测的错误。
① 在RST引脚安装VDD监测电路,并将VDD监视设置为一个复位源。这样如果系统电压不稳定,系统将自动复位,从而避免在电压不稳时访问Flash。
③ 外部晶振信号线应尽量靠近单片机的输入端,同时晶振外壳接地。
④ 对于使用外部晶振作时钟源的系统,应尽量增强晶振的驱动能力,这样也能在一定程度上预防程序丢失。
二.从软件方面预防程序丢失
程序丢失的主要原因是程序设计的缺陷,所以合理的程序代码设计能极大地预防该问题的出现。在代码中可以用多种方法来预防Flash数据丢失:
关中断。
在初始化单片机时,使能VDD检测,并设置VDD和时钟丢失为复位源。如果程序中有写/擦除Flash的代码,则在写/擦除操作前切换系统时钟,将系统时钟切到内部时钟或对外部时钟2分频;写/擦除操作完成之后,再恢复系统时钟,通过增加Flash修改操作时的时间开销来实现系统的稳定 。
是在平时正常使用的时候出现丢固件,还是本来可以正常使用,只是执行升级这个动作失败,导致的丢固件??无从考证,所以需要检查下升级本身代码有没有风险。
目前从bootloader入手,先检查下代码。
最新文章
- WinCE项目应用汇总
- FineUI小技巧(5)向子窗口传值,向父窗口传值
- spring mvc异常统一处理(ControllerAdvice注解)
- Java中MVC详解以及优缺点总结
- 玩转Windows Azure存储服务——高级存储
- selenium webdriver学习(一)
- 使用ocr的自动备份还原ocr
- The type R is already defined 错误解决办法
- Error creating bean with name 'signController': Injection of autowired dependencies failed
- C#操作Excel知识点
- linux的基本操作命令
- selenium 设置代理的话,可以使用这种方式,代码是我刚才测试过的,亲测可用
- React Native入门教程 1 -- 开发环境搭建
- oracle EM 如何调整界面显示的语言
- docker上配置mysql主从复制
- java 生成微信的二维码 工具类
- SVN用户切换
- day5-json和pickle序列化
- 第一次软件工程作业(One who wants to wear the crown, Bears the crown.)
- 非极大值抑制(NMS)
热门文章
- K8S集群入门:运行一个应用程序究竟需要多少集群?
- leaflet结合geoserver利用WFS服务实现图层新增功能(附源码下载)
- 关于Redis缓存预热的思考
- 《自拍教程25》在Linux上配置环境变量
- MySql概述及入门(五)
- C# 截取屏幕
- Android_小账本_筛选功能的实现
- Python 3.8 已发布,现在是切换至新版本的好时机吗?
- 聊聊智能指针 auto_ptr、shared_ptr、weak_ptr和unique_ptr
- JavaScirpt 一些基本知识