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数据丢失的原因与对策1、环境因素★原因:高温、高湿、辐射、静电、强电磁场均可能使EEPROM存储单元造成数据丢失或数据保存时间缩短。●对策:①不要在高温、高湿、辐射、静电、强电磁场环境中存放EEPROM器,如果法避免,应采取适当的防护措施。②在高温环境中使用EEPROM器件,须确认存储内容的更新时间和器件使用期限③工作环境湿度较大时可考虑线路板灌胶防潮,防水胶要选用吸水率低的④在辐射、静电、强电磁场环境中工作要做好屏蔽。2、设计因素★原因:器件在读写时系统状态不定。●对策:①增加上电复位电路,确保在上、掉电期间系统处于确定的状态。复位门槛电压应不小于MCU最低工作电压,EEPROM器件的工作电压范围应不小于MCU。注意:某些MCU内置的POR电路在电源上升缓慢时不能保证可靠复位②增加电源电压检测电路,确保在电源电压稳定正常后MCU才开始运而在电源状态不定时不访问EEPROM。启用MCU内的BOD电路不足以防止EEPROM读写错误。③利用器件的“写保护”引脚,可以减小EEPROM被意外改写的几率★原因:器件在读写时被异常中断。●对策:①确认电源电压从正常值跌落至MCU复位门槛电压的时间足够保持EEPROM读写操作完成。根据需要增加电源储能电容或者使用备份电源。②在检测到电源电压跌落时立即关闭所有无关外设,在访问EEPROM期间禁止MCU中断,或者设置EEPROM读写中断为最高优先级。③使用“写入查询”加快写入过程。★原因:模拟总线时序不够严格规范。●对策:①总线上拉电阻太大,使SDA、SCL边沿上升时间太长。对400kHz快速模式,当总线电容小于100pF时上拉电阻推荐值为2.7kΩ。②MCU操作速度太快或延时不够,不满足总线信号的建立、保持时间查阅《I2C总线技术精要》,按示例规范时序编程。③总线过长,使信号边沿不能满足要求。应缩短总线长度。④总线电容超过400pF。应减少总线上所连接的器件。★原因:器件在读写时总线受到干扰。●对策:①如应用板干扰较大,应重新设计电路或改变PCB布局布线,敷铜或多层板改善EMC。如环境干扰较大,应采取相应的屏蔽措施。②使用数据编码和校验增加数据的可信性,或写入特定标志来识别数据完整性,如有可能,在每次写入完成后立即读出校验。★原因:地线不合理或电源噪声干扰。●对策:①重新布置地线,注意区分模拟地、数字地、信号地、功率地、屏蔽地,安全地②使用带屏蔽的隔离电源;在电源线上增加LC滤波器;IC器件的电源引脚加0.1uF瓷介退耦电容。别忘了三个基本电路元件之一的电感器,抑制电源噪声干扰,电感器通常有立竿见影的作用。必要时,加磁珠抑制高频噪声干扰。3、生产因素★原因:焊接和装配过程中的高温、静电可能造成EEPROM器件数据丢失或保存时间缩短。●对策:①改进生产工艺,控制加工过程,加强防静电措施。②如有可能,在线路板生产完成后再写入EEPROM数据。4、器件因素★原因:器件擦写次数已接近循环寿命。●对策:更换器件。如果器件有剩余空间,软件通过更改每次写入的地址单元可延长器件使用寿命。★原因:器件质量问题。●对策:更换不同厂家或批号的器件;控制采购过程。只是单片机在掉电时,电压低过一定的值。执行程序代码出错或是程序指针跑飞。刚好执行EEPORM写入操作,才会出现所说的EEPROM数据丢失!就算是外置EEPROM在低于正常工作电压,进行写入操作,也会出现这种情况!BOD的功能是低压复位。当电压低过一定的值,就会让单片机复位。不能继续程序代码,就没有出现所说的丢失数据!EEPORM进行数据备份,并在每份数据后里加入校验机制(如RCR)。我是这么做的,读取EEPROM的数据组并进行校验检测。如果通不过,这组数据就不要。继续下一组数据检测,当所有的数据组都不能通过检测时,并加载默认的设置参数!在更新数据时,刷新所有的数据组。并给每组加入校验机制!但最好不要在掉电时对EEPROM进行任务的操作!这样出错的机率很低!