搜索
bottom↓
回复: 41

EEPROM数据丢失,怎么防止?

[复制链接]

出0入0汤圆

发表于 2012-7-27 09:40:31 | 显示全部楼层 |阅读模式
原来打算对存入eeprom的这段数据进行crc校验,即读时 对crc进行一次验证,正确才取结果。 结果发现还是存在一些问题。

详细很多人用eeprom存数据,有什么好办法减少数据丢失?

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2012-7-27 10:01:18 | 显示全部楼层
另外:用全局变量来保存程序中的标识位,掉电时对这些数据写入eeprom;开机时读取eeprom的数据。

咨询:单片机掉电时,能对eeprom写多少字节呢? 掉电监测的中断使能如何开启。

出0入0汤圆

 楼主| 发表于 2012-7-27 10:03:10 | 显示全部楼层
我用的是 atmega16,掉电保护还需另外附加硬件吗?

出0入0汤圆

 楼主| 发表于 2012-7-27 10:06:23 | 显示全部楼层
查到的:


我的经验你可以参考: 用int0的端子当掉电检查,当int0进入中断的时候 你要停掉一切的工作,让后把EEPROM的所有要保存的byte 写入,电容用金电容,0.22uF 够你写150bytes

,参考一下了:)

出0入0汤圆

 楼主| 发表于 2012-7-27 10:09:47 | 显示全部楼层
atmega16,掉电保护的熔丝 有什么作用?

出0入0汤圆

 楼主| 发表于 2012-7-27 10:24:11 | 显示全部楼层

作为一个正式的系统或产品,当系统基本功能调试完成后,一旦进行现场测试阶段,请注意马上改写熔丝位的配置,启用AVR的电源检测(BOD)功能。



对于5V系统,设置BOD电平为4.0V;对于3V系统,设置BOD电平为2.7V。然后允许BOD检测。



这样,一旦AVR的供电电压低于BOD电平,AVR进入RESET(不执行程序了)。而当电源恢复到BOD电平以上,AVR才正式开始从头执行程序。保证了系统的可靠性!



原因分析如下:

AVR是宽电压工作的芯片,当电压跌至2.5V,系统程序还能工作。这是有2个可怕的现象可能出现,

1。外围芯片工作已经混乱,AVR读到的东西不正确,造成程序的执行发生逻辑错误(不是AVR本身的原因)。

2。当电源低到临界点,如2.4V时,并且在此互上互下的,AVR本身的程序执行也不正常,取指令、读数据都可能发生错误,或程序乱飞、不稳定(AVR本身的原因,实际任何的单片机都是这样的),非常容易造成EEPROM、FALSH的破坏。有人问51怎么不会?实际上51也是这样,只是51内部没有直接写EEPROM、FLASH的指令,它的程序乱飞留不下痕迹。还有人有疑问:外挂EEPROM,掉电时怎么不会改写?实际是外挂EEPROM,当电压低于4V(2.7V)时,它已经不工作了,程序去改内容也改不了。而AVR内部的东西在临界电压时都能工作,但非常不稳定。



AVR的BOD功能必须要使用,我早期使用51时,凡是产品外部都要使用电源监测芯片,现在AVR自己本身就有该功能,一定要使用。



这些教课书上是没有的。
本主题由 machao 于 2012-4-3 11:18 添加图章 精华

出0入0汤圆

 楼主| 发表于 2012-7-27 10:25:42 | 显示全部楼层
看来bod是用于复位的。

要另外加电路来实现掉电保护。

谁有掉电保护电路?  是否是在电源供电下拉一个 金电容?

出0入0汤圆

 楼主| 发表于 2012-7-27 10:30:35 | 显示全部楼层
发表于 2005-11-17 17:56:48 |只看该作者
关机再开机后eeprom中的数据仍然丢失的情况,我极少遇到,我采取了三重备份的方式进行自动纠错。

我也是3备份加CRC校验。目前没有发现丢数据的,不过都是用在干扰不强的地方。
---------------------------------这个人狠。。

出0入0汤圆

发表于 2012-7-27 11:27:09 | 显示全部楼层
只能备份一份,万一丢失可以恢复一下

出0入4汤圆

发表于 2012-7-27 12:24:13 | 显示全部楼层
我也是3备份加CRC校验。目前没有发现丢数据的,不过都是用在干扰不强的地方。 电能表上的电能计量数据基本这个以上

出0入0汤圆

 楼主| 发表于 2012-7-28 12:21:42 | 显示全部楼层
谢谢大家。

我的思路是 用全局变量记录需要备份的数据,根据需要定期对数据写入eeprom。 主要担心对eeprom操作次数过大。

另外:掉电如何检测?因为有人说用金电容,可在掉电瞬间向eeprom写150字节。

出0入0汤圆

发表于 2012-7-28 16:53:48 | 显示全部楼层
我们用仪器做强干扰,E2数据会丢,真的想找一个可以预防的方法。。。。。。。我认为那个CRC还是起不到太大的作用。因为干扰一般都是由于电压骤降或者是CPU直接无法工作等产生。我现在做了好长时间的测试。。。。

出0入0汤圆

 楼主| 发表于 2012-7-28 16:55:49 | 显示全部楼层
qxwan250 发表于 2012-7-28 16:53
我们用仪器做强干扰,E2数据会丢,真的想找一个可以预防的方法。。。。。。。我认为那个CRC还是起不到太大 ...

是啊,如果数据丢失了,系统会跑错的。

打算用掉电保护 来 控制。

出0入0汤圆

发表于 2012-7-28 20:45:19 | 显示全部楼层
重要的还是电源问题!只要把电源这一关做好EEPROM的数据就不会丢

出0入0汤圆

 楼主| 发表于 2012-7-28 22:39:57 | 显示全部楼层
shenarlon 发表于 2012-7-28 20:45
重要的还是电源问题!只要把电源这一关做好EEPROM的数据就不会丢

谢谢。

我的是电瓶供电,还是发生过2次eeprom数据丢失现象。

出0入0汤圆

发表于 2012-7-29 21:05:53 | 显示全部楼层
jazsmile 发表于 2012-7-28 16:55
是啊,如果数据丢失了,系统会跑错的。

打算用掉电保护 来 控制。

这个也只是解决的一方面。。。。我认为主要的还是做好产品原理图设计,器件选型,最重要的是PCB板的布局,,,,,非常重要,我的经验

出0入0汤圆

发表于 2012-7-29 21:07:56 | 显示全部楼层
jazsmile 发表于 2012-7-28 22:39
谢谢。

我的是电瓶供电,还是发生过2次eeprom数据丢失现象。

我认为电源这一个方面,需要从两个方面考虑。。。。。。你是由辅助电源带来的干扰还是电炉内部(电源)产生的,这个非常重要。。。。。这样才能根据具体问题解决具体问题。

出0入0汤圆

 楼主| 发表于 2012-7-29 22:25:58 | 显示全部楼层
qxwan250 发表于 2012-7-29 21:07
我认为电源这一个方面,需要从两个方面考虑。。。。。。你是由辅助电源带来的干扰还是电炉内部(电源)产 ...

谢谢。

原因未知。只能逐步试验了。当然加上 掉电保护更好。

出0入0汤圆

发表于 2012-7-29 23:31:42 | 显示全部楼层
开brownout!

出0入0汤圆

 楼主| 发表于 2012-7-30 17:39:08 | 显示全部楼层
i55x 发表于 2012-7-29 23:31
开brownout!

不懂你的意思。

出0入0汤圆

发表于 2012-8-1 09:56:26 | 显示全部楼层
jazsmile 发表于 2012-7-29 22:25
谢谢。

原因未知。只能逐步试验了。当然加上 掉电保护更好。

可以的,就是去慢慢的做实验

出0入76汤圆

发表于 2012-8-1 10:10:11 | 显示全部楼层
建议楼主,再去好好看看马潮老师的那本书(第17章)。

出0入0汤圆

 楼主| 发表于 2012-8-1 16:26:38 | 显示全部楼层
foxpro2005 发表于 2012-8-1 10:10
建议楼主,再去好好看看马潮老师的那本书(第17章)。

谢谢!!


出0入0汤圆

发表于 2012-8-1 17:31:36 | 显示全部楼层
掉电检测电平设为4.0V。(BODLEVEL=0)
使能掉电检测。(BODEN=1)
从来没有发生过EEPROM丢失的问题。不知为何论坛这么多人发生这个问题。
我用EEPROM存储设备的累积使用时间,2年中无一台出现问题。

出0入0汤圆

 楼主| 发表于 2012-8-2 11:17:08 | 显示全部楼层
sunseas 发表于 2012-8-1 17:31
掉电检测电平设为4.0V。(BODLEVEL=0)
使能掉电检测。(BODEN=1)
从来没有发生过EEPROM丢失的问题。不知为 ...

谢谢!

目前我的系统供电是3.3v,主要是SPI通讯的几个芯片是3.3v。

看来要修改电路改成5v了。


请问:你的掉电保护检测电路是怎样设计的,谢谢!!

出0入0汤圆

发表于 2012-8-2 13:15:41 | 显示全部楼层
本帖最后由 sunseas 于 2012-8-2 13:18 编辑
jazsmile 发表于 2012-8-2 11:17
谢谢!

目前我的系统供电是3.3v,主要是SPI通讯的几个芯片是3.3v。


3.3伏供电,掉电电平设为2.7就行了。
我没有掉电检测电路,AVR内部完成的。

更正上面24楼帖子(使能掉电检测。(BODEN=0))

出0入0汤圆

 楼主| 发表于 2012-8-2 13:39:01 | 显示全部楼层
sunseas 发表于 2012-8-2 13:15
3.3伏供电,掉电电平设为2.7就行了。
我没有掉电检测电路,AVR内部完成的。

谢谢!

是不是掉电时 写入eeprom?

我一直认为掉电保护是让系统重启?

对eeprom操作,用全局变量保存需要保存的数据,定期保存数据到eerpom。 如果能检测掉电,则在掉电瞬间才保存数据,其余时间不保存到eeprom。减少对eeprom的操作。

出0入0汤圆

 楼主| 发表于 2012-8-2 14:05:30 | 显示全部楼层
sunseas 发表于 2012-8-2 13:15
3.3伏供电,掉电电平设为2.7就行了。
我没有掉电检测电路,AVR内部完成的。

请问你对 eeprom保存的数据 处理的思路是什么?

谢谢!

出0入0汤圆

发表于 2012-8-2 16:19:36 | 显示全部楼层
本帖最后由 sunseas 于 2012-8-2 16:23 编辑

你得原帖:
“原来打算对存入eeprom的这段数据进行crc校验,即读时 对crc进行一次验证,正确才取结果。 结果发现还是存在一些问题。
详细很多人用eeprom存数据,有什么好办法减少数据丢失?”

eeprom保存的数据处理的思路是什么?我不是很理解你的意思。
eeprom就是存数据的,还要什么思路? IAR或CVAVR都会安全读写EEPROM,哪里有那么复杂?eeprom本身在单片机中就是个成熟的技术,怎么会那么容易丢失数据?可惜我真的没发现。
100来台机器,用EEPROM存储密码,累计时间,2年多也没发现过,没有用什么掉电保护电路!
就是熔丝设定了
掉电检测电平设为4.0V。(BODLEVEL=0)(如果你是3.3V电压就设2.7V)
使能掉电检测。(BODEN=0)

出0入0汤圆

 楼主| 发表于 2012-8-9 22:33:14 | 显示全部楼层
sunseas 发表于 2012-8-2 16:19
你得原帖:
“原来打算对存入eeprom的这段数据进行crc校验,即读时 对crc进行一次验证,正确才取结果。 结 ...

谢谢。
我的意思是 需要保存的数据,变化1次就保存到eeprom吗?

希望通过掉电保护电路,即开机读取eeprom数据,掉电才保存到eerpom,这样减少对eeprom操作的次数。

出0入0汤圆

发表于 2012-8-9 23:21:50 | 显示全部楼层
本帖最后由 118139 于 2012-8-9 23:23 编辑

我以前试了一下,上电读取EPPROM内容 用LED灯来表示 正确与否
然后不断拔插电源8,9次测试
结果是
十个片子,就会有3片会出现EPPROM内容读出错,  再具体检查是EPPROM 区的所有数据全乱。。

可靠一点做法
上电时程序开头延时250ms 后就再也没出错,不管快速拔插多少次。。
有的片子延时200ms以下,还是会出现读出错。。
而有的片子却不会。。。
不尽相同。。


  

出0入0汤圆

 楼主| 发表于 2012-8-10 10:24:54 | 显示全部楼层
118139 发表于 2012-8-9 23:21
我以前试了一下,上电读取EPPROM内容 用LED灯来表示 正确与否
然后不断拔插电源8,9次测试
结果是

谢谢你提供的思路!!

出0入0汤圆

发表于 2012-8-10 11:02:40 | 显示全部楼层
个人建议数据量多,还是用外部存储吧,用i2c的或者spi总线的都不错,而且可靠省事省心
用内部eeprom多是存储个别设置参数,掉了恢复到默认值即可,对系统损伤不大。

出0入0汤圆

 楼主| 发表于 2012-8-10 20:32:31 | 显示全部楼层
leicai05 发表于 2012-8-10 11:02
个人建议数据量多,还是用外部存储吧,用i2c的或者spi总线的都不错,而且可靠省事省心
用内部eeprom多是存 ...

非常感谢。

也打算这样做了。

出0入0汤圆

发表于 2013-10-15 16:07:30 | 显示全部楼层
jazsmile 发表于 2012-7-28 16:55
是啊,如果数据丢失了,系统会跑错的。

打算用掉电保护 来 控制。

只有做好电源了,你还有好的方法。。。。。

出0入0汤圆

发表于 2013-10-15 16:16:54 | 显示全部楼层
真能扯,AVR开了BOD还会丢EEPROM里面的数据?

出0入0汤圆

发表于 2013-10-15 16:17:26 | 显示全部楼层
sunseas 发表于 2012-8-2 16:19
你得原帖:
“原来打算对存入eeprom的这段数据进行crc校验,即读时 对crc进行一次验证,正确才取结果。 结 ...

那只能说明你做的实验比较少,,例如EMC(电快速脉冲群)实验。我们做实验时,AVR内部E2的数据会被修改。。。甚至是超出测量范围而导致产品功能不正常。特别是有通讯且带有客户写功能的产品。受到干扰就会出错。。。

出0入0汤圆

发表于 2013-10-15 16:18:40 | 显示全部楼层
marx 发表于 2013-10-15 16:16
真能扯,AVR开了BOD还会丢EEPROM里面的数据?

有啊,我就遇到过

出0入0汤圆

发表于 2013-10-15 16:20:12 | 显示全部楼层
qxwan250 发表于 2013-10-15 16:18
有啊,我就遇到过

08年以后的事情吧?以前的AVR过EMC很轻松的。

出0入0汤圆

发表于 2013-10-15 16:29:02 | 显示全部楼层
marx 发表于 2013-10-15 16:20
08年以后的事情吧?以前的AVR过EMC很轻松的。

恩恩,去年遇到过,,,那以前的片子和现在的有什么区别。。。还有现在买的168比8的芯片刷写程序慢。。。但是抗干扰很好

出0入0汤圆

发表于 2013-10-15 16:34:23 | 显示全部楼层
qxwan250 发表于 2013-10-15 16:29
恩恩,去年遇到过,,,那以前的片子和现在的有什么区别。。。还有现在买的168比8的芯片刷写程序慢。。。 ...

Atmel在那一年推出了改进工艺版本的A版,以后推出的芯片也按新工艺来做,就是降低die面积来降低成本。当时这个论坛一片哭爹喊娘,本来好用的板子换了尾缀A的板子就不好使了,板子本身设计的烂就靠AVR的强壮挺着,当AVR不强壮了就原形毕露了。

出0入0汤圆

发表于 2013-10-15 16:52:38 | 显示全部楼层
专门做过试验通电9秒断电1秒,大约有上万次吧。
1。BOD必须开启
2。上电延时操作(不开BOD这个没有用,实际有没有效果不知道,反正我是延时了)
3。存储区最前部保留几个字节(实验的时候没有发现这个区被改写过)
4。双备份crc
采用以上四项还是有被改写,但少很多了。
一个问题:读EEPROM时不关中断,能改写EEPROM中的数据么?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 22:39

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表