资源预览内容
第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
亲,该文档总共4页全部预览完了,如果喜欢就下载吧!
资源描述
EEPROM(Electrically Erasable Programmable Read一 Only Memory)即电子擦除式只读存储器, 它是一种非挥发性存储器,与擦除式只读存储器(EPROM)类似,电源消失后,储存的数据依然 存在,要消除储存在其中的内容,不是用紫外线照射方式,而是以电子信号直接消除即可。正是由于EEPROM具有以上特点,该器件可广泛应用于对数据存储安全性及可靠性要 求高的应用场合,如门禁考勤系统,测量和医疗仪表,非接触式智能卡,税控收款机,预付费电度 表或复费率电度表、水表、煤气表以及家电遥控器等应用场合。该类型存储器在可靠数据存 储领域会获得越来越广泛的应用。但是,EEPROM有固定的使用寿命,这是指某一位由1写为O或由O写为1的次数。不 同厂家的产品,相同厂家不同型号、系列的产品,它们的寿命也不尽相同,100万次为常见主流 产品。假若某EEPROM寿命为100万次,每秒擦写一次,则其使用时间为1000000 / (3600x24)=12天。这对于需要较长时间保存数据的应用场合,显然不满足要求。1延长EEPROM寿命的方法一般应用中,要存储的数据比较单一,EEPROM空间与要存储的数据相比要大得多。为此, 可采用一种利用存储器空间延长EEPROM工作寿命的方法。方法l:不固定数据存放的地址,而是用一个固定的基地址加上EEPROM内的一个单元 的内容(即偏移地址)作为真正的地址;若发现存储单元已坏(写入和读出的内容不同),则偏移 地址加1,重新写入。如果采用100倍的存储器空间冗余,可将EEPROM的实际寿命延长100 倍。方法2:从第一个存储单元开始存储数据N次,然后转到下一个单元再存N次,依次类推, 当最后一个单元存放N次之后,再转到第一个单元重新开始。本文推荐采用该法,因为上一种 方法存在一个致命缺陷:当某一个EEPROM单元写坏再用下一个单元时,原先存储的数据就 读不出来了。本文后面的内容也依此作根据进行阐释。2 EEPROM数据储存地址的确认嵌入式系统中的EEPROM电源消失后,储存的数据依然存在。确认数据所存地址是能够 正确将所存数据读出的基本条件,但是掉电后再上电时如何确认数据的地址指针呢?可以采 用以下的方法。2. 1找最大数据法查找EEPROM中的最大数据,就是掉电前最后一次存储的数据。该法对于单片机来讲, 编程时程序量较大,可采用折半查找法或分块查找法降低程序代码量。2. 2用后还原法循环将当前数据写入EEPROM后,立即将前面的EEPROM空间都清0再上电,查找数据 非0的EEPROM空间即可。有的单片机要求在写入数据之前,必须将所有空间都恢复为OxFF, 这样查找非0xFF的数据空间即可。2. 3地址指针法为每一个数据在EEPROM中设一个地址指针EEADRi,这样只要确认EEADRi数值 即可找到相应数据。对于地址指针法有下述一些技巧。 一个地址指针对应一个数据。该方法思路简单,假设EEPROM空间可以存放50组数 据和50个地址ADRi,一组数据占用4个字节,一个地址占用1个字节,共250字节,在储存数 据时,使50个地址指向50组数据的首地址,且使小于变量i的ADRi都清零,或重新赋值为 0xFF。查找数据时,找到非O或非0xFF的ADRi,然后根据ADRi的值来确定数据的储存 地址即可。 用两个变量来记录数据储存的地址,ADDR 一 0LD和ADDILNEW分别标志当前数据 读出时的地址和新采集来的数据下一次要存储的地址。用一个字节的EEPROM空间作为地址指针。此时,地址指针的数值总是和数据储存的 地址值相等,此种情况最具有技巧性,因为此时可以使用最少的地址指针,因而可以最大量的 节省。EEPROM空间,从而延长EEP-ROM寿命。此方法的思路是:假设第O字节作为地 址指针,当该指针值为1时,数据从第一个地址开始储存;为2时,数据从第二个地址开始储存, 依此类推。3应用实例本人在设计智能流量仪表时,使用美国Microchip公司的PIC16F877单片机。该单片机本 身自带有256字节的EEPROM,其擦写次数典型值为100万次,主要用其储存累计流量和仪表 系数。其中,第201255字节用于存储仪表系数,因其不需要经常操作,所以对这些数据不再 采用变地址动态存储。第0字节储存数据的地址指针,第1200字节用来储存累计量。对于累计量,可以采用浮点数储存,只占用34个字节,目的在于用固定的字节长度可以 保证相同的相对精度。智能流量仪表常年不停地工作,短时间内的流量相对总的流量而言,可以忽略不计。因此, 为了使单片机的EEPROM寿命更长,过一个时间片段(例如10s)储存一次累计量也可以满足 精度要求。假若出现停电事故,累计量只有10s的流量误差,相对总量可以满足精度要求。该 策略可使EEPROM延长10倍寿命。因本例采用O字节来记录数据的存储地址,若数据每存储一次就换一个地址,则200字节 可以存200 / 4=50个位置,相当于储存数据的EEPROM空间擦写一次,第O字节就擦写50次, 因此,第O字节的寿命是其他的1/50,这显然不可行。故可以采用如下方式:在第一个地址 储存50次以后再换下一个地址储存,到最后一个地址也储存50次再转到第一个地址储存时, 这样所有的EEPROM空间使用次数都相等。储存累计量流程图如图1所示。pass :数据存储之前程序循环的次数,它表征多长时间储存一次数据。save_adr:数据在EEPROM中的存储地址。save_time :某数据在同一地址存储的次数。eeprom_write(eeadr,value): EEPROM 写函数。下面是该流程对应的程序(采用澳大利亚HI-TECH公司的PICC demo编译器)。uchar save_time,pass_time,save_adr,i, * pl,x4 ,y4;bankl float Q, * p2; /Q 为累计量pl = (uchar *)&Q;x0= * pl; 将浮点数Q变为4个字节rl = x0;pl + +;xl= * pl;r2 = xl;pl + + ;x2= * pl;r3 = x2;pl + + ;x3= * pl;r4 = x3;pass_time+ = 1 ;if(pass 10)/10 s 到 了吗?(pass =0 ;save_time+ = 1 ;if(save_time50)/存 50 次后移一位 EEPROM 地址save_time=0;clrwdt();save_adr+=4;/累计量用4个字节储存if(save_adr197)/只用 1200 字节存储累计量save_adr=1;eeprom_write(0,save-adr);/save-adr 为所存累计量地址首字节eeprom_write(savcl_adr,xO);eeprom_write(save_adr+1,x1);eeprom_write(save_adr+2,x2);eeprom_write(save_adr+3,x3);4读出EEPROM中存储的数据系统中的EEPROM掉电后,再上电时从EEPROM读出数据的程序比较简单。void Read_Sum_Q() /读出掉电前的累计量 yO=eeprom_read(save_adr);y1=eeprom_read(1+save_adr);y2_eeprom_read(2+save_adr);y3=eeprom_read(3+save_adr);p2=(float? *)y;Q=*p2;结语采用实例所示的方法,10s存一次可使EEPROM寿命延长10倍,采用50倍的EEPROM 空间冗余,又使其奉命延长50倍,这样具有1000000次寿命的EEPROM可以不间断工作时间 为10x50x1000000/(3600x24x365)=15.85年,基本可以满足各种嵌入式系统的工作要求大 大提高了 EEPROM的使用效率。因此,本文介绍的方法在相关领域具有广泛的借鉴意义和实 用价值。
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号