欢迎来到天天文库
浏览记录
ID:57687618
大小:15.00 KB
页数:2页
时间:2020-09-01
《EEPROM数据出错分析.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、EEPROM数据被破坏的主要原因有:1、电源异常使EEPROM的数据彻底丢失;2、复位不好和软件跑飞可能会使EEPROM的数据被改写要防止EEPROM数据被破坏,主要在以下几方面做工作:1、选用比MCU的电源范围宽并有WP引脚的EEPROM芯片;2、做好电源滤波,而且要等电源开机稳定后才去读写EEPROM;3、做好复位电路;4、做好软件跑飞的处理;5、SDA和SCK的上拉最好用I/O口控制,既可省电,也可在一定情况下保护EEPROM;6、WP接MCU的RESET;如WP做软件保护,将写不进数据;接I/O,上电时WP的状态可能不稳定。7、E
2、EPROM空间富余时考虑双备份或多备份数据,每份数据都有校验和。但有两点要注意:一是一些单片机复位时所有I/O都是高电平,会使EEPROM芯片进入工作;二是EEPROM芯片给电后需要有大于写周期的延时才能读写一般上电可以延时一定时间,保证外设准备好,再执行程序。 EEPROM操作时候最好暂停中断。通常需要关断中断 这样才能进行flash的擦写 个人总结,在实际应用过程中有以下问题造成数据读写错误:1.程序受到干扰(或程序存在BUG)造成写入EEPROM的数据本身就是错误的;2.EEPROM写入次数过多(这个问题在频繁写入时会遇到),
3、造成无法写入的;3.再提电压问题:由于电压过低,造成写入的数据实际未写入或写入错误;EEPROM写入错误问题是不可避免的,因此就应有相关的归避措施和恢复措施:从硬件方面来说:加入BOD措施是必要的,同时芯片的电源滤波也有较高要求,芯片的复位电路、晶振(及芯片晶振设置位,指单片机的工作频率,这对EEPROM读写有影响)也应仔细处理,以提高抗干扰;当然,一个设计优良的线路板对抗干扰有很大帮助;从软件方面来说:可以有以下方式进行控制:1.在写入EEPROM前,需对写入的EEPROM数据进行验证措施,若不正常则不写入;2.EEPROM写入后再读出
4、(即较验),写前数据比较,应一致,否则可能为EEPROM无法再写入,这时可能要更换存储区地址;3.数据读出时有验证,并存在恢复措施,以使数据错误降到最低。以下是另一种办法.附源码基本思路:每份写到EEPRM的数据,都做三个备份,每个备份的数据都做CRC16校验,只要系统运行中出错,错误地修改了EEPROM数据,那么根据校验字节就知道哪个备份的数据被修改了,然后用正确的备份覆盖出错的备份,达到数据恢复的目的。1。对EEPROM写操作时,必须保证不被其它中断打断(关闭所有的中断)。尤其是自己编写的对EEPROM写操作低层函数。使用CVAVR可
5、以直接调用他提供的EEPROM读写函数,因为该函数已经关闭了所有的中断。2。对一批写入EEPROM的数据增加效验字节,写入后马上读出,进行效验,不对重写。程序中读EEPROM数据使用时,首先经验效验字节,如果不对,需要放弃,做错误处理。根据你的介绍,运行中不写EEPROM的,而且BOD也已经使用,4V掉电检测,因此应该不会破坏掉EEPROM中的数据。最大的可能是程序本身的问题。我设计的产品很多都是具备掉电保存数据,上电后接掉电时的状态继续运行(不是从头开始)的,保存数据就是使用AVR内部的EEPROM。都没有问题。我主要使用CVAVR,直
6、接用它提供的EEPROM操作函数。Data: 3016bytes(73.6%Full)这个73.6%是一些全局量和静态量。函数内部的局部动态变量没有包含。所以可能出现RAM溢出。其他的我就不会了,呵呵。选用比MCU的电源范围宽并有WP引脚的EEPROM芯片的原因:1、EEPROM的芯片本身有一定的保护时序;2、电源低于MCU工作电源高于EEPROM芯片的最低工作电源时,EEPROM芯片会处于稳定状态,不会丢失数据。3、当电源较长时间低于EEPROM芯片的最低工作电压时非常容易丢失全部数据。否则MCU还能工作,但EEPROM芯片已不能
7、工作时,EEPROM中的数据会全部丢失。4、用I/O口线给EEPROM供电,只在读写EEPROM时才给器件供电,不仅能提高可靠性,而且能省电。
此文档下载收益归作者所有