延长EEPROM使用寿命的方法

发布者:zhihua最新更新时间:2006-05-30 来源: 单片机及嵌入式系统应用关键字:字节  储存  单片机 手机看文章 扫描二维码
随时随地手机看文章

   EEPROM(Electrically Erasable Programmable Read一Only Memory)即电子擦除式只读存储器,它是一种非挥发性存储器,与擦除式只读存储器(EPROM)类似,电源消失后,储存的数据依然存在,要消除储存在其中的内容,不是用紫外线照射方式,而是以电子信号直接消除即可。
  正是由于EEPROM具有以上特点,该器件可广泛应用于对数据存储安全性及可靠性要求高的应用场合,如门禁考勤系统,测量和医疗仪表,非接触式智能卡,税控收款机,预付费电度表或复费率电度表、水表、煤气表以及家电遥控器等应用场合。该类型存储器在可靠数据存储领域会获得越来越广泛的应用。
  但是,EEPROM有固定的使用寿命,这是指某一位由1写为O或由O写为1的次数。不同厂家的产品,相同厂家不同型号、系列的产品,它们的寿命也不尽相同,100万次为常见主流产品。假若某EEPROM寿命为100万次,每秒擦写一次,则其使用时间为1000000/(3600×24)=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中设一个地址指针EE—ADR[i],这样只要确认EEADR[i]数值即可找到相应数据。对于地址指针法有下述一些技巧。
  ①一个地址指针对应一个数据。该方法思路简单,假设EEPROM空间可以存放50组数据和50个地址ADR[i],一组数据占用4个字节,一个地址占用1个字节,共250字节,在储存数据时,使50个地址指向50组数据的首地址,且使小于变量i的ADR[i]都清零,或重新赋值为0xFF。查找数据时,找到非O或非0xFF的ADR[i],然后根据ADR[i]的值来确定数据的储存地址即可。
  ②用两个变量来记录数据储存的地址,ADDR一0LD和ADDILNEW分别标志当前数据读出时的地址和新采集来的数据下一次要存储的地址。
  ③用一个字节的EEPROM空间作为地址指针。此时,地址指针的数值总是和数据储存的地址值相等,此种情况最具有技巧性,因为此时可以使用最少的地址指针,因而可以最大量的节省。EEPROM空间,从而延长EEP—ROM寿命。此方法的思路是:假设第O字节作为地址指针,当该指针值为1时,数据从第一个地址开始储存;为2时,数据从第二个地址开始储存,依此类推。

3 应用实例

  本人在设计智能流量仪表时,使用美国Microchip公司的PIC16F877单片机。该单片机本身自带有256字节的EEPROM,其擦写次数典型值为100万次,主要用其储存累计流量和仪表系数。其中,第201~255字节用于存储仪表系数,因其不需要经常操作,所以对这些数据不再采用变地址动态存储。第0字节储存数据的地址指针,第1~200字节用来储存累计量。
  对于累计量,可以采用浮点数储存,只占用3~4个字节,目的在于用固定的字节长度可以保证相同的相对精度。
  智能流量仪表常年不停地工作,短时间内的流量相对总的流量而言,可以忽略不计。因此,为了使单片机的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编译器)。
   
  if(save_time>50)//存50次后移一位EEPROM地址

{save_time=0;clrwdt();

save_adr+=4;//累计量用4个字节储存

if(save_adr>197)//只用1~200字节存储累计量{save_adr=1;}

eeprom_write(0,save-adr);//save-adr为所存累计量地址首字节
}
  eeprom_write(savcl_adr,x[O]);
  eeprom_write(save_adr+1,x[1]);
  eeprom_write(save_adr+2,x[2]);
  eeprom_write(save_adr+3,x[3]);
}
}


4 读出EEPROM中存储的数据
  系统中的EEPROM掉电后,再上电时从EEPROM读出数据的程序比较简单。
  void Read_Sum_Q(){ //读出掉电前的累计量
  y[O]=eeprom_read(save_adr);
  y[1]=eeprom_read(1+save_adr);
  y[2]_eeprom_read(2+save_adr);
  y[3]=eeprom_read(3+save_adr);

  p2=(float? *)y;

  Q=*p2;

}

结语

  采用实例所示的方法,10s存一次可使EEPROM寿命延长10倍,采用50倍的EEPROM空间冗余,又使其奉命延长50倍,这样具有1000000次寿命的EEPROM可以不间断工作时间为10×50×1000000/(3600×24×365)=15.85年,基本可以满足各种嵌入式系统的工作要求,大大提高了EEPROM的使用效率。因此,本文介绍的方法在相关领域具有广泛的借鉴意义和实用价值。

关键字:字节  储存  单片机 引用地址:延长EEPROM使用寿命的方法

上一篇:基于通用接口芯片CH365的财税安全卡设计
下一篇:FPGA与SRAM相结合完成大容量数据存储

推荐阅读最新更新时间:2024-05-13 18:12

基于PIC单片机实现音乐播放的实例程序
PIC单片机实现音乐播放的实例程序 ******************************** * PIC单片机实现音乐播放 * ******************************** 源程序: 以下程序要用二个定时器资源,凡是有二个定时器的PIC单片机均可实现,该范例需要的MCU是MICROCHIP PIC16C62 INCLUDE "D:PICP16XX.EQU" ;该文件在MICROCHIP光盘中可找到 ;************************************************** #define BeepOut RC,4 ;**********************
[单片机]
英飞凌推出新一代AURIX™微控制器,加速汽车的电气化和数字化进程
未来出行的重要趋势是碳中和、 自动驾驶 、互联和信息安全。而微电子技术将在出行方式的转型中发挥核心作用。作为全球车用半导体市场的领导者, 英飞凌 科技股份公司(FSE: IF X / OTCQX: IFNNY)持续以科技创新引领未来出行。该公司近日宣布推出采用28纳米工艺技术生产的新AURIX™ A TC4x系列微控制器( MCU ),进一步增强其AURIX™ 微控制器家族的产品阵容。AURIX™ TC4x系列微控制器可广泛应用于新一代电动汽车、高级驾驶辅助系统( AD AS)、汽车电子/电气(E/E)架构以及人工智能( AI )应用等。 英飞凌科技汽车 电子 事业部总裁Peter Schiefer表示:“我们推出新一代AU
[汽车电子]
英飞凌推出新一代AURIX™<font color='red'>微控制器</font>,加速汽车的电气化和数字化进程
一款多点测温及温度控制系统的设计应用
  随着生活水平的提高,人们对家居需求由面积需求变为舒适需求。地板采暖采用辐射方式供暖,符合人体生理需求曲线,如果控制系统选取得当,不仅可以提高房间舒适度,更可以使系统运行费用降低许多。如今一般是在典型位置安装一个温控装置,温控装置连接到壁挂炉,温控器根据室温和温度设定直接控制锅炉运行,各房间不同回路由工作人员凭经验手动调节分水器球阀,改变不同回路的流量,从而达到调节各房间的室温的效果。使用这种控制方法,即使是有经验的工作人员,也难以调节得十分准确,何况各家庭成员由于年龄不同,所需舒适温度不同,需要经常对室温进行调节。   针对以上问题,我们利用SST89E564RC单片机及新型测温器件设计了多点温控采暖控制系统,根据室内各点温
[测试测量]
一款多点测温及温度控制系统的设计应用
瑞萨电子推出全新RX140 MCU
为家居与工业应用带来双倍性能和30%以上的电源效率提升 新型超低功耗RX140 MCU通过先进触控感应技术,实现更高噪声容限和感应精度 2021 年 9 月 29 日,日本东京讯 - 全球半导体解决方案供应商瑞萨电子集团,今日宣布,推出超低功耗32位RX140微控制器(MCU)产品群。作为入门级RX100系列的最新成员,RX140 MCU基于瑞萨强大的RXv2 CPU内核构建,具有卓越性能。其最高运行频率为48MHz,CoreMark评分达到204;同RX130 MCU产品群相比,可提供约两倍的处理性能,更将电源效率提升30%以上——当CPU处于工作状态时,电流低至56µA/MHz;在待机模式下低至0.25µA。这使
[单片机]
瑞萨电子推出全新RX140 <font color='red'>MCU</font>
51单片机C编程(五、矩阵键盘扫描加显示)
这是个4x4的矩阵键盘,按下一个按键,在数码管上显示相应的键值。PROTEUS仿真电路图如下: //程序名称:矩阵键盘扫描加显示 //编 程:jumpmysoul #include reg51.h tab ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xa7,0xa1,0x86,0x8e}; void disp(char); // 数码管显示子程序 void delay(int); // 延时子程序 void keyscan(); // 键盘扫描子程序 char keynum; //*********************主函数*
[单片机]
8051单片机(STC89C52)以轮询方式实现串口通信(51接收数据后发送回PC端)
#include STC89C5xRC.H int main() { char buf; TMOD = 0x21; //设定timer1的工作模式 SCON = 0x50; //设置串行通信格式 TH1 = 0xE6; //设定timer1的初始值 TL1 = 0xE6; TR1 = 1; //开启timer1 while(1) { if(RI == 1) { //如果收到数据 buf = SBUF; RI = 0; SBUF = buf;//将收到的数据发回去 while(TI == 0); //等待数据发送完毕 TI = 0;
[单片机]
8051<font color='red'>单片机</font>(STC89C52)以轮询方式实现串口通信(51接收数据后发送回PC端)
单片机上和模糊逻辑检测室性早博
摘要:在基于单片机8051的心电监护模块中,用模糊逻辑检测室性早博,使心电监护模块功能得到扩展。 关键词:心电监护 模糊逻辑 数字单片机 现代多参数监护仪普遍采用模块化模块,每个模块都是能完成单功能的独立微处理机系统,多个模块通过串行口接收主控制器命令,送出测量结果。心电监护模块是其中的关键部件,其在单片机控制下拾取心电信号,放大、预处理,并传送给主控模块。 室性早博(PVC)是一种最常见的心律失常,它的实时,正确检测是心电图自动分析的一项重要技术。在心电监护的基础上,加入心博和节律分类功能,便可进行心律失常监护。室性早博检测一般在高端的心律失常分析模块中进行。目前单片机的功能不断增强,过去主要用作控制器的单片机,在完成原
[单片机]
STM32单片机对Systick心跳定时器的设计
Systick :系统心跳定时器,提供系统节拍 裸机程序中可作为独立的延时定时器 用途: 1.产生操作系统的时钟节拍 2.便于不同处理器之间程序移植 SysTick定时器被捆绑在NVIC中,异常号15 3.作为一个闹铃测量时间用于测量时间, 但当处理器在调试期间被喊停(halt)时,则SysTick定时器亦将暂停运作。 它有四个寄存器 STK_CSR, 0xE000E010 -- 控制寄存器 STK_LOAD, 0xE000E014 -- 重载寄存器 STK_VAL, 0xE000E018 -- 当前值寄存器 STK_CALRB, 0xE000E01C -- 校准值寄存器 STM32的时钟源 选择外部时钟源时,则Systi
[单片机]
小广播
最新应用文章
换一换 更多 相关热搜器件

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 医疗电子 工业控制

词云: 1 2 3 4 5 6 7 8 9 10

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved