遇到了eeprom被改写的问题,我的eeprom平常没有写操作,但是还是被改写了。
整理了网上的资料,总结一下。
下面是网友们遇到的问题:
治标治本,彻底解决AVR单片机EEPROM 数据丢失问题
http://www.amobbs.com/thread-1440595-1-1.html
请教马老师一个mega64的EEPROM中某个数据偶尔被改写的问题,谢谢
http://www.amobbs.com/thread-3249397-1-1.html
STM8的eeprom在什么情况下会被改写?
http://bbS.21ic.com/icview-450062-1-1.html
STC单片机自带的eeprom数据丢失
http://bbS.youkuaiyun.com/topics/350108862
EEPROM被改写问题
http://Blog.chinaunix.net/uid-20589269-id-1622153.html
详解AVR单片机EEPROM被改写问题
http://(www.chinadmd.com/file/sutvp3ocr6iwsoxro3a6czpz_1.html
EEPROM稳定问题
http://(www.dzsc.com/dzbbs/20050513/200765193848843231.html
(去掉网址中的括号)
EEPROM被误改写的现象一般都是发生在上掉电过程中,如果没有内部上掉电复位或外部上掉电复位芯片,在不足芯片工作电压时,单片机并不是不工作,但它工作是否正常?在跑什么代码就只有天知道,所以设计一定要避开这个危险区域。方法:烧写芯片时选启动内部BOD,或者象张工说的加外部Reset芯片。如果这还不行,再在软件上做考虑,比如:对大循环里的每一步设定顺序号,如开始是00,第一个子程序是01,只有当调用EEPROM写时顺序号是0X才真正启动EEPROM,否则报错退出。如果怀疑RAM内容错,考虑将重要数据多地址备份。
解决办法:
大家的方法整体来说就是做好复位电路,增加BOD;数据冗余加校验。
见以下我收集的普通独立EEPROM应用笔记,希望有帮助(转自http://(www.dzsc.com/dzbbs/20050513/200765193848843231.html)
*应用笔记:
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、EEPROM空间富余时考虑双备份或多备份数据,每份数据都有校验和。
选用比MCU的电源范围宽并有WP引脚的EEPROM芯片的原因:
1、EEPROM的芯片本身有一定的保护时序;
2、电源低于MCU工作电源高于EEPROM芯片的最低工作电源时,EEPROM芯片会处于稳定状态,不会丢失数据。
3、当电源较长时间低于EEPROM芯片的最低工作电压时非常容易丢失全部数据。否则MCU还能工作,但EEPROM芯片已不能工作时,EEPROM中的数据会全部丢失。
4、用I/O口线给EEPROM供电,只在读写EEPROM时才给器件供电,不仅能提高可靠性,而且能省电。
但有两点要注意:一是一些单片机复位时所有I/O都是高电平,会使EEPROM芯片进入工作;
二是EEPROM芯片给电后需要有大于写周期的延时才能读写。
--以上是在“侃单片机”论坛里,很久前收集的对独立EEPROM的注意点,好像是“修哥”写的,我整理了一下。
另外就是数据保存多份并且进行校验。