本帖最后由 双龙 于 2009-12-18 10:08 编辑
AVR那么多年了,已经很成熟了。
关于EEPROM问题,不单是AVR,就是独立EEPROM,或者其他内置EEPROM的单片机,都会有丢EEPROM的现象。
以下为以前从网上积累的一些关于EEPROM问题的解答:
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一次,这样的话,我怕EEPROM很快应失效!如果保存到RAM中,再定期保存到EEPROM, 但中途断电怎能么办?
答:VCC加电容,中断脚加断电检测。
在MCU的VCC上加个电解存电(别忘了加个二极管),电容量要**到程序将数据全部保存到EEPROM中之后;中断脚加个电源电压检测电路,也可直接接到电源上(要在二极管前);程序中使用下降沿中断触发中断服务程序将数据保存到EEPROM中。
|