《匠人手记》推荐网上购书渠道:
互动出版网(china-pub)购书入口   >>>
当当网(dangdang)购书入口   >>>
卓越亚马逊网 购书入口   >>>
淘宝网(taobao)购书入口   >>>
更多购书渠道……   >>> 

设为首页加入收藏联系匠人管理入口21IC首页21IC博客21IC社区侃单片机回复的贴参与的贴

天气预报
百宝日历
载入中...

百宝专栏

载入中...
最新货色

载入中...

粉丝评论

载入中...

载入中...



百宝信息

载入中...

百宝流量

(2006-07-01开始)


匠人手记

 匠人观点: 好记性不如烂笔头  
 黑色幽默:三鹿门——后世畅想

《用变址寻址原理突破EEPROM存储器的擦写寿命极限》大话篇
程序匠人 发表于 2005-6-1 23:59:00  阅读全文 | 回复(1) | 引用通告 | 编辑

主题:《用变址寻址原理突破EEPROM存储器的擦写寿命极限》大话篇 返回主题列表

刷新 PAGE 1 / 2 共32篇 首页 前页 后页 尾页 
 
 程序匠人 发表于 2002-1-21 19:52 侃单片机 ←返回版面    

《用变址寻址原理突破EEPROM存储器的擦写寿命极限》大话篇

    时    间:今晚
    地    点:“砍弹片鸡”论坛
    剧    名:《大话篇》第五场
    领衔主演:程序匠人、斑竹
   
    ……

    ——观众们蜂拥而至,纷纷抢占有利地形……

    ——鼓响三声,小匠上场……

    感谢各位对小匠的大话篇的支持。小匠的大话篇,自推出以来,收视率一直居高不下,好评如潮……(斑竹按:此处删除自吹自擂词语200个……)

    但是,也有一些网友提出了批评,说:前面的大话倒是不错,惟独后面的程序太臭,有狗尾续貂之嫌,捆绑销售之意、卖弄才华之疑、哗众取宠之心……

    ——台下,众网友纷纷点头……

    所以,这次,小匠决定不再帖程序了,帖段文字了事吧。

    ——匠人转身下场,斑竹问:“匠人,今天的大话篇完了?”
    ——“对,完了!”
    ——斑竹一把揪住匠人:“好啊,你这个匠人,海报上写得明明白白,是我俩共同领衔主演,我还没上场露脸呢,你倒宣布剧终了!?”

    ——“乒、乒、乓、乓……”的一阵剧响……

    ——小匠鼻青脸肿地刚离开论坛,又被一群MM围住。
    ——“匠人,你上场才2分钟不到,就想开溜,这摆明了是骗取门票收入。哪里走,吃偶们一吨粉拳!!!”

    ——“乒、乒、乓、乓……”的又一阵剧响……

    ——大话篇第五场,匆匆落幕……

    ——导演忙着招呼众群众演员:“大伙快点,把匠人抬到医院去……”
       


    《用变址寻址原理突破EEPROM存储器的擦写寿命极限》

    一般地,EEPROM存储器(如93C46/56/66系列)的擦写次数为10万次,超过这一极限时,该单元就无法再使用了。但在实际应用中,可能有些数据要反复改写。这时,可通过变址寻址的方式来突破EEPROM存储器的擦写寿命极限。

    比如,我们有一个单字节的数据要保存在E2PROM(93C56)中,可按以下方法来做:

    1、将93C56的00H单元定义为地址指针存放单元。
    2、将要寻址的单元地址(假设为01H)放入93C56的00H地址中。
    3、每次要对E2PROM中的数据进行读写时,先读取00H中的数据,并以读出的值为地址,访问其指向的单元。
    4、在每次写完数据后,立即将数据再读出,并与写入的地址做比较。
        A、如果相等,则代表本次写入数据成功。
        B、如果不相等,则代表本次写入数据失败。这时,将00H中的值+1,让其指向后一个新的地址单元,再将数据写入新的地址单元。
   
    93C56共有128个字节单元,按照以上方法,可将数据的擦写次数提升120多倍!达到1200多万次!

    对于24C16/32/64系列的芯片,也可采用这种方法。

    这个方法,小匠使用过多次,证明是可行的。

 

 


* - 本贴最后修改时间:2002-1-22 8:23:52 修改者:程序匠人
* - 修改原因:笔误

 

签名:


如果你的‘芯’是一座作坊,我愿作那不知疲倦的程序匠……
 


 

 

 makesoft 发表于 2002-1-21 21:31 侃单片机 ←返回版面    

那么00H单元的擦写寿命最少应该为120*100000次

 

 

 

 stevenxu 发表于 2002-1-21 21:46 侃单片机 ←返回版面    

makesoft,你错了

00H单元只改写了128次

 

 

 

 soho 发表于 2002-1-21 22:16 侃单片机 ←返回版面    

补充二点

1. EEPROM单元坏与不坏界线很是模糊. EEPROM单元能写入信息是因为它的浮栅能俘获电子并将其困在其中. 但随着时间的推移电子由于热运动或外界给予能量会逐渐逃逸, 所以说EEPROM保持信息是有一定年限的(比如100年). 写入与擦除信息即是向浮栅注入和释放电子,电子能量比较高,可能改变周围的晶格结构,导致浮栅俘获电子能力的下降,也就是表现为保存信息的时间变短, 所以才会有一个保守的写入次数限制(这里说保守是因为半导体的离散性大,实际的次数大得多). 到了规定写入次数并不是说该单元就坏了, 而是说该单元保持信息的时间已不可信赖(而实际上它可能还能保存相当长时间甚至几十上百年),所以实际上短时间很难判定某个单元是否可用(坏了). 如匠人的方法检测, 写入时测试好好的, 可能几秒钟之后该单元的数就逃了.

2. 写坏一个单元是很费时间的, "这个方法,小匠使用过多次,证明是可行的。", 不知匠人在使用过程中是否碰到过有写坏的情况?

个人意见请朋友们扔....

 

 

 

 scchenyong 发表于 2002-1-21 23:15 侃单片机 ←返回版面    

同意soho兄。

 

 

 

 jw5th 发表于 2002-1-22 01:29 侃单片机 ←返回版面    

智者千虑,必有一失,(我说的是匠人)

不懂可以,装懂就不好了。这样的话题本人以前提过,被人笑的脸红耳赤,很大的教训哪!

 

 

 

 云起 发表于 2002-1-22 05:01 侃单片机 ←返回版面    

可以改进

00H存放地址,01H 02H存放次数,每次读写次数+1,达到65535次(FFH),地址指针+1,轮流写过去。

 

 

 

 telesoft 发表于 2002-1-22 07:23 侃单片机 ←返回版面    

我以为:“在每次写完数据后,立即将数据再读出”这种操作不妥

在EEPROM写操作时,先把内容存在缓冲区中,几毫秒后才能写入EEPROM,所以在这几毫秒内,最好不要对它操作,我说的是24CXX系列。
我认为EEPROM的寿命与产品关系不大。

 

 

 

 程序匠人 发表于 2002-1-22 09:26 侃单片机 ←返回版面    

答复各位

谢谢大家的提醒……
——匠人三鞠躬……

1、SOHO的分析真是深刻,你提出“写入时测试好好的, 可能几秒钟之后该单元的数就逃了.”我想,如果用亢余技术来处理的话,也许能回避你所说的问题。

2、TO 云起:你的方法是不可行的,如果按你的方法,数据改写10万次, 01H 02H单元的次数也改写了10万次,那不是也坏了吗?

3、TO telesoft :你的担心是多余的,时序的问题,小匠当然考虑到了。;--)

4、TO jw5th:被你称为“智者”,小匠真是脸红……
——斑竹在旁打量着匠人:“你好象没有脸红嘛……”

不过,小匠也是抛砖引玉,希望和大家一同探讨,如何完善这种方法。

 

 


签名:


如果你的‘芯’是一座作坊,我愿作那不知疲倦的程序匠……
 


 

 

 虚拟人 发表于 2002-1-22 12:01 侃单片机 ←返回版面    

是个不错的创意!

 

 

 

 zh_liqi 发表于 2002-1-22 14:12 侃单片机 ←返回版面    

俺做的电视搜台,台号变换用的就是这种方法

俺做的电视搜台,台号变换用的就是这种方法。曾经试过24cXX可连续读写180万次(用了我一下午的时间啊)。

 

 

 

 panny 发表于 2002-1-22 17:36 侃单片机 ←返回版面    

我有一问题!!

我用89c52写了一程序,通过超级终端运行,发现偶尔出现
光标移位的现象。在有的电脑上却不会出现,为什么呢?
是我的程序有问题还是跟电脑有关?

 

 

 

 soho 发表于 2002-1-22 20:22 侃单片机 ←返回版面    

匠人提供了一个好思路, 方法稍作修改如何

为了保证EEPROM内的数据可以长久保存, 每个单元的写入次数不能超过规定的限值, 借用匠人和云起的思路,本人提出改进方案:

数据以块为单位存放, 每块可取4个字节, 前三个字节记录写入次数,第四个字节为要保存的数. 每次作写入操作时, 把次数+1连同数据一超写入EEPROM.
EEPROM前面开辟一个索引指针区(可供N个数据保存用), 存放数据块的地址由指针计算所得, 计算方法是:基址+指针值*数据块长度. 当某块区域的写入次数到达时, 调整指针指向下一个可用的数据区域.

这样,EEPROM的空间利用率<<25%, 用来换取写入次数>>写入寿命, 方法是否可取, 请诸位拍转.

 

 

 

 程序匠人 发表于 2002-1-23 08:29 侃单片机 ←返回版面    

也可用数据亢余技术来做。

soho兄:你的方法是可行的。
另外,我的一个思路是,将数据在EEPROM中保存在3个单元,每次读数据时,将3个数据同时读出,用表决的方式判断取出一个有效的值,如果发现哪个单元的数据与其他两个单元的数据不符,则认为该单元坏了。重新换一个。当然,这基于一个假设,即3个单元不可能同时坏掉。
用这种方法,EEPROM的空间利用率可达到33%。

欢迎大家继续讨论……

 

 


签名:


如果你的‘芯’是一座作坊,我愿作那不知疲倦的程序匠……
 


 

 

 插翅能飞 发表于 2002-1-23 16:11 侃单片机 ←返回版面    

听说现在有一些新型的存储器,可改写次数达到上亿次……

不知是真是假?

 

 

 

 程序匠人 发表于 2002-1-23 21:54 侃单片机 ←返回版面    

小匠好象也听说过,不过也不太熟悉

 


签名:


如果你的‘芯’是一座作坊,我愿作那不知疲倦的程序匠……
 


 

 

 虚拟人 发表于 2002-1-25 14:45 侃单片机 ←返回版面    

方法不错,就是空间利用率太低了

soho和匠人的方法都不错,就是空间利用率太低了,
有没有更有效的办法呢?

 

 

 

 晓奇 发表于 2002-1-25 18:46 侃单片机 ←返回版面    

是个好办法,我的做法

我的做法是:在一个储存数据区的前面加一个特殊的字节例如:'55',用他表示这个区正在使用,每次写入更换一个区,同时对上一次为'55'的标志字节写入'aa',如果每次写入的数据有5字节则以6字节位一组,整个eeprom内轮流循环写。读数据的时候首先按照n*6做地址搜索'55',要死一起死.


* - 本贴最后修改时间:2002-1-25 19:08:27 修改者:晓奇
* - 修改原因:xx

 

签名:


 
晓奇工作室

 

 

 xspartan 发表于 2002-1-25 23:22 侃单片机 ←返回版面    

除了佩服还是佩服 唉 ,公司该给你们发奖金阿

 

 

 

 程序匠人 发表于 2002-1-25 23:36 侃单片机 ←返回版面    

妙啊!

晓奇的方法很好!

优点是明显的:
EEPROM的空间利用率大为提高,尤其是当要保存的数据为多字节时。

当然,还有一些需要改进的地方:
1、每次读写数据时都要去找当前的活动区,未免太让CPU操劳了。
2、万一EEPROM中有一个单元的革命意志不坚定,提前退休了,那整片芯片也就完蛋了(这就是所谓的水桶效应——水桶的容量取决于最短的那块板)
3、如果每次要改写的只是个别数据,那怎么办呢?

不管怎么样,这个思路不错,如果再完善一下,一定是个好方法。

 

 

签名:


如果你的‘芯’是一座作坊,
我愿做那不知疲倦的程序匠……


 
想和匠人对话吗?请点击这里^

 
 
  专业源自专心 串口专家
加入21IC人才库 创造美好新生活
 
 
主题:《用变址寻址原理突破EEPROM存储器的擦写寿命极限》大话篇 返回主题列表

刷新 PAGE 2 / 2 共32篇 首页 前页 后页 尾页 
 
 zxcasd 发表于 2002-1-26 03:27 侃单片机 ←返回版面    

看来晓奇的"要死一起死"的办法最好了

 

 

 

 xgdzd 发表于 2002-1-27 23:32 侃单片机 ←返回版面    

晓奇的方法很好!但是……

“同时对上一次为'55'的标志字节写入'aa'”,则作为标志的字节其写入次数是数据区的2倍,恐怕要提前“壮烈牺牲”了,难以做到“要死一起死”。若能解决则不失为“妙法”!!!

 

 

 

 xiaohh2000 发表于 2002-1-28 10:35 侃单片机 ←返回版面    

改良

在晓奇的方法上稍做改进如下:把标志字放在最后,(顺便说一句,标志字最好分析一下系统,取一个系统不可能出现的数字,如果觉得1byte不可靠,可取2byte,另外标志字最好别选A,5之类).查找标志字再写数据(覆盖标志字),然后在所写数据的结尾写标志字.这样可以避免标志字写2遍的问题.至于查找指针的问题,我觉得可以这样:上电时读出写数指针放入RAM中,写了新数后更新指针.

 

 

 

 程序匠人 发表于 2002-1-28 12:29 侃单片机 ←返回版面    

xiaohh2000的方法小匠看不明白……

能否再解释一下?

 


签名:


如果你的‘芯’是一座作坊,
我愿做那不知疲倦的程序匠……


 
想和匠人对话吗?请点击这里^

 

 

 ymc8 发表于 2002-1-28 12:30 侃单片机 ←返回版面    

曾经使用过的方法

EEPROM用X25045:
不常改写的数据共30字节,写入第1~8页。
改写频繁的数据有2字节,保存在20H~1FFH中,以4字节页为单位使用,每页中前2字节作为计数器,后2字节为要保存的数据。
所有计数器第一次使用前先初始化为0FFH。读出数据时先读第一块的计数器,=0,则读下一块的计数器,非0,则直接读出。写入数据时,先读第一块的计数器,=0,则读下一块的计数器,非0,则直接写入,写入后计数器减1,若计数器=0,则同时写入下一块。最后一块写满65535次后,将所有计数器再初始化为0FFH,然后进入下一循环……
分析:
    每页中的四个字节写入次数相同,应该具有接近的寿命;
    共使用120页,理论寿命应是只用固定2个字节的120倍;
    大部分操作为读计数器,速度快,并且程序判定=0比较容易;
    空间利用率一般:50%
适用场合:系统对速度要求不高(若当前块为最后一块,则需读119次计数器);

有几台设备已写入200多万次(估算),目前仍在正常运转。

 

 

 

 程序匠人 发表于 2002-1-28 12:44 侃单片机 ←返回版面    

21ICBBS果然是藏龙卧虎!

 


签名:


如果你的‘芯’是一座作坊,
我愿做那不知疲倦的程序匠……


 
想和匠人对话吗?请点击这里^

 

 

 xiaohh2000 发表于 2002-1-28 13:32 侃单片机 ←返回版面    

对不起,俺没说清楚

设定eeprom的初值0xff.第一次写完数据后,在数据后写标志字.以后的操作:先找标志字,写数时,从标志字开始往后写(必须覆盖标志字),紧接着数据写标志字,读书时,从标志字往前读.  为了防止找标志字太费功夫,可以在系统上电时找到标志字的位置,记录在RAM中,并跟踪变化.  

 

 

 

 lhhmcs51 发表于 2002-1-28 17:25 侃单片机 ←返回版面    

ramtron chip

此系列芯片据资料称可达2亿次写入操作

 

 

 

 程序匠人 发表于 2002-1-29 08:44 侃单片机 ←返回版面    

lhhmcs51兄:能否介绍一下ramtron chip?

 


签名:


如果你的‘芯’是一座作坊,
我愿做那不知疲倦的程序匠……


 
想和匠人对话吗?请点击这里^

 

 

 虚拟人 发表于 2002-1-30 10:23 侃单片机 ←返回版面    

螺蛳壳也能做道场,厉害!

 

 

 

 程序匠人 发表于 2002-2-5 23:06 侃单片机 ←返回版面    

匠人的改进方法

小匠的这篇帖子,引起大伙一些非常深入的讨论。小匠也从中找到了更完善的方法。不敢独吞,再次现丑了。

    首先回顾一下,我原来的方法:
    1、将93C56的00H单元定义为地址指针存放单元。
    2、将要寻址的单元地址(假设为01H)放入93C56的00H地址中。
    3、每次要对E2PROM中的数据进行读写时,先读取00H中的数据,并以读出的值为地址,访问其指向的单元。
    4、在每次写完数据后,立即将数据再读出,并与写入的地址做比较。
        A、如果相等,则代表本次写入数据成功。
        B、如果不相等,则代表本次写入数据失败。这时,将00H中的值+1,让其指向后一个新的地址单元,再将数据写入新的地址单元。


    我分析了一下,我要存入E2PROM中的数据为BCD码,并且它的规律是,每次改写都是递增的。在这种情况下,可以在我原先的方法做一些改进。
    即,每当被改写的数值递增后发生进位时,就将00H的值+1,让其指向后一个新的地址单元,再将数据写入新的地址单元。
    这里借用了晓奇的方法,——“要死一起死”,但是,却省下了大量标志的空间。从理论上来说,空间利用率可接近100%了。
  
      其实,在许多场合下,对于这种频繁改写E2PROM的情况,其改写的值都是有一定规律的,要么递增,要么递减,要么有其它规律,如果对这种规律善加利用,一定可做出最佳的程序。

      上述改进方法,我已用到最近的一个案子中了,尚待验证。当然,实际的程序要更复杂一些。
      各位有高见,请提出……


   

 

* - 本贴最后修改时间:2002-2-5 23:09:00 修改者:程序匠人
* - 修改原因:改

 

签名:


如果你的‘芯’是一座作坊,
我愿做那不知疲倦的程序匠……


 
想和匠人对话吗?请点击这里^

 

 

 makesoft 发表于 2002-2-6 00:46 侃单片机 ←返回版面    

空间换时间,是有代价的。

 

 

 

刷新 PAGE 2 / 2 共32篇

看《匠人手记》,与匠人同行!北航出版,正在热卖!

Re:《用变址寻址原理突破EEPROM存储器的擦写寿命极限》大话篇
点点风(游客)发表评论于2007-7-26 18:48:00  个人主页 | 引用 | 返回 | 删除 | 回复

点点风(游客)干出

看《匠人手记》,与匠人同行!北航出版,正在热卖!

发表评论:
载入中...

芯片专题

器件专题

软件专题

硬件专题

综合专题

项目专题

原创专题

器件检测
LCD LED
按键 触摸键
E2PROM
电池 电机
电阻 电容 电感

指令系统
软件算法
编程规范
滤波算法
串行通讯

PCB设计
I2C PWM
红外遥控
充电技术
中断 ADC 

匠人手记
匠人夜话
网络心路
一周热点串烧
从零开始玩PIC
DIY旋转时钟

广告5号位 [投放]


学习板、开发板、编程器、下载器、仿真器(查看详情……)

广告3号位 [投放]

站内搜索


站外搜索


百度  google
mp3  歌词 
图片  FLASH 
知道  文档
新闻  词典 
地图  mp3 
软件  天网 
雅虎  爱问 
搜狗  讯雷 
网讯  华军 
天空 

21IC器件搜索
百宝箱分站
  • 《匠人的百宝箱》21IC站
  • 《匠人的百宝箱》21IC笔记团队
  • 《匠人手记》21IC书友会
  • 《匠人的百宝箱》MCUBLOG站
  • 《匠人的百宝箱》MCUBLOG笔记团队
  • 《匠人的百宝箱》EDN站
  • 《匠人手记》EDN书友会
  • 《匠人的百宝箱》与非网站
  • 《匠人的百宝箱》新浪站
  • 《匠人的百宝箱》百度站
  • 《匠人的百宝箱》网易126站
  • 《匠人的百宝箱》网易163站
  • 《匠人的百宝箱》互动出版网站
  • 广告4号位 [投放]

     
     

    匠人原创

    往日酷贴

     
     
     

    大千八卦

    友情连接

    新浪新闻:
    新浪财经:
    AK58新闻:
    新浪股票:
    新浪股票:
    证券之星:

     [更多酷站连接]

     

     

    [欢迎交换连接]

    [百宝箱之与非门分舵]

    [电脑圈圈的家当]

    [IC921的博客]

    [柔月阁]

    [八楼的呼吸]

    [hotpower 的水潭]

    [xwj的文君阁]

    [所长的BLOG]

    [阿摆手记]

    [电子伙伴]

    [unaided的笔记]

    [小飞的笔记]

    [单片机开发联盟]

    [网址之家]

    [好东西网址大全]

    [美萍中文精选]

    [数字电视之家]

    [SMARTCODE电子书斋]

    [软件开发之窗]

    [Armoric]

    [我爱研发网]

    [infernal的笔记]

    [雄鹰的空中加油站]

    [SunK]

    [逍遥电子]

    [ningpanda的博客]

    [C-Design]

    [一网见天下]

    [海边淘沙]

    [嵌入式365]

    [水牛的仓库]

    [股剩是怎样炼成的]

    [PIC论坛]

    [ICC AVR开发网]

    [中国高校自动化网]

     

     

     

    MCU博客-中国电子工程师博客网 

    大学生电子网 

     

     

     

     

     

    !!! 《匠人的百宝箱》 !!!