讨论:eeprom的可靠性研究
做工业产品最关键的是可靠。可是总是听到有人说eeprom里的数据会丢失,用上eeprom,很多人就认为不可靠。个人观点:
在上电掉电过程中,eeprom内的数据有可能会丢失
可以通过设置熔丝位BOD,起动延时65ms,就样子就好了。
请大家说说,还有什么情况下eeprom内的数据可能会丢失,如何解决?
此外,比如说eeprom地址0x01,里的数据1,丢了。
0x01地址里的数据是变为0,还是0xff? 自己顶一下 好像变成0XFF。
偶的应用一般要用到EEPROM存储的数据比较少,一般采取反码冗余备份校验的方式,需要存储的数据按照原码和反码存两份,需要读取时分别读取原码和反码,进行校验,若校验不通过,则根据一定的算法恢复数据或者采取缺省值. 这个方法好,谢谢feiyue 如果你的系统有很大的感性负载,在断电的时候会产生一个反向电压,这样EE就有可能会自擦除。
另外,如果你在上电的时候,VCC的斜率如果在某一个范围内,也可能自擦除。
很多做工控的朋友都遇到过上面的问题。
我的建议是用铁电,可以避免上面的问题,我们公司是铁电在国内的代理商,如果大家有兴趣,华东地区的朋友可以找我申请样片,其他地区的朋友可以就近联系北天星在各地的分公司
铁电资料见一下链接
点击此处下载armok01130464.rar
点击此处下载armok01130465.rar 我遇到过的问题,m8里面有写eeprom的程序段,数据已经写入到eeprom了。
不停的开关电,eeprom里的值有可能随机改变,不见得是0x00,0xFF
原因是不是上电时,程序指针跑飞到写eeprom那段,导致往eeprom随机地址写了随机数。
后来,采用isp下载2次程序,最后版本的程序是删除了写eeprom程序段,保留读eeprom段。
这样的话,开关电很多次,里面的eeprom没见有改动。
如果系统实际运行时,需要对eeprom写操作,可考虑存多几次数据,用校验方法来处理数据改变。 多次读写EEPROM中的数据也会导致数据丢失,
用M16作的产品,
EEPROM中放标准值用来比较,
将数据写入后,
如果连续读2-3次,
EEPROM中数据就会丢失,
不知道是何原因? EEPROM掉电丢数据这个特点可不是AVR独有的。很多年前在89C51+24C02的系统里面就遇到过,我不知道铁电有什么比24C02更牛的地方,居然能保证不丢数据。原因很简单,就是掉电过程中,电压降低到MCU无法正常工作的程度,程序跑飞了,单片机引脚状态完全不可控,某次掉电就可能发出错误的写24C02的指令。上电的时候因为RESET处于有效状态,MCU引脚状态完全确定(对于51来说就是全1),是不可能误操作24C02的。解决方案很简单,加一片MAX813L,当电压低于4.6V就锁定89C51,问题彻底解决。这么多年也没见24C02被误改写。
最早的一批AVR内置了EEPROM却没有BOD,所以EEPROM被误改写是家常便饭,ATMEL很快发现了这个问题,新推出的AVR全都含有BOD乐。AVR的情况比较复杂,振荡方式和复位方式都有多种,所以不仅掉电会改写EEPROM(原因同上),上电也会!RESET过程结束前,必须有若干XTAL,MCU内部寄存器(包括软件不可见的)才会清零,如果RESET结束了才来时钟,上电就是程序乱飞,同样有可能改写EEPROM。用RC振荡方式问题不大,有电就能振起来,用石英晶体就会出问题,我测过89C51的,上电后20ms才振起来,如果电源上有大的滤波电容,VCC的上升斜率变小,晶体起振时间会变得更长!有存储示波器的朋友可以自己测一下,对晶振的起振有个感性认识。 你说的意思是AVR的EEPROM更加的不可靠吗?现在还没有用到什么重要的场合,呵呵,不怕!! 我没说过AVR不可靠,只是说需要注意的问题比较多。 谢谢你的详细解释和回答
能不能具体的说下你说的解决方法吗?怎么样做才能是AVR的EEPROM更加的可靠.
聆听DX的教导...... 【4楼】 sunhorse 张家红
看了你发的资料,觉得不错,能否弄点样片试试~! fetish讲的很详细,很受启发 我也遇到过连续开关电程序跑飞,但加使能BOD之后,基本没有了这种情况,avr早期产品这种情况比较多,Mega系列好多了 TO:kimiyang 四叶草
你发邮件给我吧,我需要下面信息
1:公司信息、个人信息(地址 名称,姓名,电话)
2:项目信息 好帖,今天在Attiny13上试过也是上电掉电丢数据,数据变为一个随机数,烧熔丝时BOD设为1.8伏就不会了,到现在没有再丢失过数据了。 wind_cloud
我遇到过的问题,m8里面有写eeprom的程序段,数据已经写入到eeprom了。
不停的开关电,eeprom里的值有可能随机改变,不见得是0x00,0xFF
我也是一样BOD使能就OK了 不过我还是不放心,我用两份数据,最后加校验,启动的时候读eeprom数据如果有异常 检测出错误数据组,然后用正确的恢复。如果两组数据均遭毒手,用flash里面的默认数据覆盖。 这个帖子讨论得不错,COOL! 一般我在eeprom里间三分拷贝,位置隔的比较远 又学习到新知识了 我用eeprom可从没遇到什么问题,书上说不能用0x01空间,我试了,也没事。 不错,长见识了,看来还是要做校验 有次居然连熔丝也乱了,但这么些年就一次,随即ISP改回去了,也没深查原因. 值得收藏的好贴!
支持一下! fetish讲的很详细,很受启发
我目前用的M16也有同样的问题,有的芯片很好,有的有问题
目前解决方法:全部资料写入FLASH中
请问各位大侠有没有更好的方法解决,多谢! 请问各位大侠:
如果系统有很大的感性负载,在断电/开电/运行的时候会产生一个反向电压,这样EE就有可能会自擦除。 是不是真的有可能会自擦除??? 很受启发,感谢大家.不断学习 我用M16的EEPROM没遇到过问题,以前用89S51+24C01试过,解决方法是在写EEPROM的程序里多加几个陷阱.STC的文档里有描述 多谢fetish 上电掉电程序跑飞误写的概率其实不高,最大的可能是程序正在写eeprom时突然掉电 很常见的问题,掉电丢比上电丢更麻烦 老帖,还是不敢用内部EEPROM “加一片MAX813L,当电压低于4.6V就锁定89C51”。
请问mega16如何锁定呢? 用avr的内部eeprom是没有什么问题的。当然,如果有问题,那也是eeprom的通病。
还是要排除软件逻辑上的问题。 这个帖子好像恢复得不全啊,我记得我当时得测试是发这里的。 回复【5楼】wind_cloud
我遇到过的问题,m8里面有写eeprom的程序段,数据已经写入到eeprom了。
不停的开关电,eeprom里的值有可能随机改变,不见得是0x00,0xff
原因是不是上电时,程序指针跑飞到写eeprom那段,导致往eeprom随机地址写了随机数。
后来,采用isp下载2次程序,最后版本的程序是删除了写eeprom程序段,保留读eeprom段。
这样的话,开关电很多次,里面的eeprom没见有改动。
如果系统实际运行时,需要对eeprom写操作,可考虑存多几次数据,用校验方法来处理数据改变。
-----------------------------------------------------------------------
我也遇到和你一样的问题
用M16L 3V供电 开了2.7VBOD 每次都变数据 变成 3 5 次掉电就变数据 而且变的数据都写数据的其中两个
下周找原因看 写过程需关中断 数据改变少了
但还是会变 不一定是那个数据 无解中只有多备份两个数据了 标记学习 学习了受教了。谢谢大家! 买了30多片M8,
发现其中有2片出现类似问题,存在很严重的eeprom的数据很容易丢失,而且是空间中所有数据全被改写
丢失过程是
只是拔插电源十次,就会丢一次,太频繁了,其它的片子却不会,就那两片会
设什么掉电熔丝位BOD,还有64ms延时熔丝配置等都没作用,再丢不误
最后试出来,只要在程序的开头加上250ms的延时就不会再丢了
把延时改小点150ms,依然还是会丢,但次数就少很多了,最后直接上300ms延时,
不管怎么快速拔插100多次都没再丢过。。。
只有这两片需要这样,其它片都正常,
往后所有程序一上电都给它200ms的延时算了。。 5年后的mark mark 好帖。受教了 好贴。。。 MAX813的输出脚接MCU的RST脚,电压低于监测点的时候,RST会置有效,从而锁死MCU,也就在不稳定的电压范围不做任何操作了。
不管内部是否带有BROWNOUT DETECTOR,外部都不能省这个东西,为了产品的可靠性。
另外静电、电源EFT都是造成数据丢失的原因,不可不察。上电瞬间EFT是存在的,对电源做EMI滤波也是必要的。 我看手册,M8的eeprom和flash擦写寿命为100000和10000,貌似比pic少了一个数量级 mark mark 关注!!! 【45楼】 zwdxsky
AVR给的是最小值,PIC给的是典型值。
PIC的小最值跟典型值差10倍很正常。 mark mark!! fetish讲的很详细,很受启发 COOL! e2rom本身质量问题的很少,问题多出于时序问题,以及误写,或者是操作不完整等 COOL 我个人的处理是:
一、外挂了3.7V充电电池,检测外部断电,电池是供电的,写eep数据。最后自动断电。上电延时,电池检测。
二、外挂了自动复位电路。
三、数据FLASH备份一次
只要第一次在200ms后系统正常运行了,随便断电,上电,eep数据没有错过一次。 mark 终极及解决办法:
要想产品eeprom不丢失数据使用三份eeprom数据,每份中带有crc校验,复位后,首先校验第一份数据,第一份数据正确就使用第一份数据,第一份数据不正确,读取第二份数据进行重新校验,第二份数据正确,就是用第二份数据,并将第一份数据覆盖,如果第二份数据错误,同样校验第三份数据,第三份数据正确,就使用第三份数据,并将第一份第二份数据覆盖,如果第三份数据也错误,那只好用默认参数覆盖。
没碰到过eeprom丢失的飘过 mark 这个需要注意下 回复【58楼】zhangjinxing
终极及解决办法:
要想产品eeprom不丢失数据使用三份eeprom数据,每份中带有crc校验,复位后,首先校验第一份数据,第一份数据正确就使用第一份数据,第一份数据不正确,读取第二份数据进行重新校验,第二份数据正确,就是用第二份数据,并将第一份数据覆盖,如果第二份数据错误,同样校验第三份数据,第三份数据正确,就使用第三份数据,并将第一份第二份数据覆盖,如果第三份数据也错误,那只好用默认参数覆盖。
没碰到过eeprom丢失的飘过
-----------------------------------------------------------------------
整个E2PROM都有被冲掉的可能。外部干扰,读写是操作不当,电源问题,都有可能的。 综合了一下,大致解决方法如下:
1.开内部BOD或外部复位芯片如MAX813之类
2.上电后延时启动(如200ms)
3.多数据存储备份
我前2个都用了,目前没碰到过丢数据 稳定电源,增强抗干扰能力,开机等MCU稳定后再对E2进行读写,E2数据备份,做校验, 各种的MARK! MARK mark EEPROM可靠性,MARK! 没注意过这种情况,MARK下 mark .
正在试Atmega168PA的。。写进EEPROM了。。读出来都对了,结果掉电上电又没了。。还在调试。 最近用了ATmega162,个人觉得设置熔丝位BOD,起动延时65ms。其他暂未发现别的。 mark 有些单片机对对于EEPORM的操作需要密匙,操作完后输入错误的密匙又会锁定EEPORM。
我想这样的话应该有一定概率可以防止EEPORM被误擦除,另外在写入密匙之前,先判断外部的一个令牌变量
令牌变量正确的话(正常进入写EEPROM函数的时候会设置正确的令牌)才会允许写入密匙,然后对EEPORM进行操作
这样的话EEPORM被误操作的概率直线下降了,不过令牌抗干扰的技术我都没用过呢,只能YY了 make,nnnnnnnnnn 原来eep还有这么多问题啊
eeprom可靠性研究,mark 好贴好贴 好老的帖子,mark备用 fetish 发表于 2006-9-29 18:46 static/image/common/back.gif
EEPROM掉电丢数据这个特点可不是AVR独有的。很多年前在89C51+24C02的系统里面就遇到过,我不知道铁电有什么 ...
赞一个................................................................. 我现在做这个好像就是,eeprom中的数据会乱额!
好老的帖子,mark备用 :
这两天调试程序也遇到EEPROM里数据自己乱改的情况,在没有写数据的区隔几十个字节会出现一个随机数。还猜测是不是买到了旧芯片,又被我用了几年写得更“老”了,到寿命了呢。 看了这么多人说的几乎上都是因为上电或掉电时操作E2P的问题,但我遇到的是正在运行过程中的数据的被篡改,哪位能列测试方法,保证AVR被篡改率比较高的方法,我好拿来测试,免得去测试时数据又不变了 fetish 发表于 2006-9-29 18:46 static/image/common/back.gif
EEPROM掉电丢数据这个特点可不是AVR独有的。很多年前在89C51+24C02的系统里面就遇到过,我不知道铁电有什么 ...
你好,我用EEPROM存数据,数据也会经常改变,为什么有的不会改变呢? aydali 发表于 2012-11-1 21:21 static/image/common/back.gif
:
这两天调试程序也遇到EEPROM里数据自己乱改的情况,在没有写数据的区隔几十个字节会出现一个随机数 ...
我也是,eeprom的数据也会改变,有的时候会,有的时候又不会,这很蛋疼哇,我在读eeprom中的数据,要是被中断了会不会有影响哇? 我是用TOP2004编程器读写EE的,用单片机运行起来的程序在EE里做好标记,感觉确实比较混乱,明明没有往那个地址里写过东西,里面确有不固定的内容。一直怀疑是编程器有问题,现在终于知道了真相,谢谢各位。 118139 发表于 2010-11-24 20:41 static/image/common/back.gif
买了30多片M8,
发现其中有2片出现类似问题,存在很严重的eeprom的数据很容易丢失,而且是空间中所有数据全 ...
你的意思是,程序一开始初始化的时候先让他不干活儿,空转等待300ms再开始工作。 zhangjinxing 发表于 2011-4-19 07:48 static/image/common/back.gif
终极及解决办法:
要想产品eeprom不丢失数据使用三份eeprom数据,每份中带有crc校验,复位后,首先校验第 ...
三重保险,哈哈,EE不要钱啊 没用的。 再次mark 学习了!标记一下!
古董挖出来看看 {:smile:}{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}{:smile:}{:smile:} 风雨过后,用avr的人还很多。大浪淘沙,剩下的是金子还是贝壳呢 学习使用中 10多年后,翻到此贴,受益良多。最近正被EEPROM折磨。现象是开机2%机率死机。看大家讨论。打算试试如下方案:
1. 试试开头加延时。
2. BOD已经开启,可以测试下是否有复位现象。 顶一下,学习学习!
数据为什么不直接保存在flash里面??
页:
[1]