0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

延长FLASH和EEPROM芯片写入次数的小方法

聚丰开发 2018-10-26 13:35 次阅读

注:本文是作者以前发表在其个人博客,现在发布到“聚丰开发”专栏



开发电子产品时,常常需要断电后保存某些数据,这就需要使用 FLASH或EEPROM芯片,这两种芯片,可擦除的次数是有限制的,通常FLASH为10万次,EEPROM要多一点,为100万甚至1000万次。 FLASH的擦除不能单个字节进行,有一个最小单位,存储容量相对比较大,适合大量数据的存储;EEPROM可以单个字节进行擦除,存储容量不大,只适合存储少量的设置数据。


先以FLASH和EEPROM需要写入一个字节为例来说明新数据是如何写入的。假定都是在首地址要写入新数据0x55。不管是FLASH还是EEPROM。 对于FLASH,写操作只能将数据位从1改写为0,如果想要将数据位从0改为1,就需要进行擦除操作,而且这个擦除最小单位是page(可能是256字节或更多)。



现在要在首地址写入0x55,稳妥的方法是先擦除这个地方,也就是要擦除第一个page,擦除操作会一并将首地址后面的另外255个字节也擦除掉,如果这255个字节保存有其它数据,还需要把这些数据先进行备份,擦除第一个page后再将0x55和备份的255个字节写进去。也不是必须擦除第一个page,写操作可以完成数据位1到0的转变,利用这一特性结合首地址原来的内容,我们就有可能不用进行擦除操作,比如原来内容为0xFF,显然可以直接写入0x55,原内容为0xF5,同样也可以写入0x55,但如果原内容为0xAA,执行写0x55则会得到完全错误的结果,写完后内容依然为 0x00,因为对于0x55所有需要保持为1的位数据0xAA都是0,写0x55会把0xAA为1的位全清0,原来为0的位不会改变。


对于EEPROM,写操作既可以将数据位从1改写为0,也可以将数据位从0改写为1,不需要进行单独的擦除操作,要写0x55直接将0x55写到首地址,不管原来内容为什么,完成写操作后内容都是0x55。


一开始我们说了FLASH和EEPROM都有可擦除的最大次数(EEPROM实际上没有擦除操作),虽然这个数字看着不小,但对于程序来说并不大,比如EEPROM为10万次,如果我们以每秒一次的间隔依次写入0xFF和0x00,则只能维持 100000/3600=27.78小时,也就是一天多就可以超出其最大寿命次数,不能再可靠写入所需的内容。


这种可写入的最大次数是芯片的特性决定的,我们无法改变,所以在使用这些芯片时,我们应充分考虑最大写入次数这一参数,要确保产品在实际工作中不超过这一参数。实际上许多时候只要程序做出针对性处理,有可能让产品的最大写入次数超过芯片的寿命,还是以EEPROM来做说明。


假定现在有一个产品,需要保存一些参数,参数的个数并不多,总共为10个字节,用EEPROM来保存就可以满足需求,我们选用了容量为256字节的 EEPROM,如果我们不做过多考虑,很有可能就是直接将这10个字节从EEPROM的首地址开始保存,每次改写也是直接修改这部分内容,这样我们最多可以保存参数10万次。只要我们做一点简单处理,就可以将保存参数的次数成倍增加,来看看我们应该如何实现。



直接保存的最简方法:

地址 0x00 0x01 0x02 ... 0x09

内容 data1 data2 data3 ... data10

改进的保存方法:

处理方法是将256字节按16字节大小分成16等份,按后面格式存储参数

地址 0x10*n +0x00 +0x01 +0x02 ... +0x09 +0x0A +0x0B +0x0C +0x0D +0x0E +0x0F

内容 flag data1 data2 ... data9 data10 保留1 保留2 保留3 保留4 check_sum

check_sum=(flag+data1+data2+...+data10+保留1+...+保留4 )&0xFF

flag为0xA5表示当前16个字节为正在使用的记录,为其它值表示当前16字节已经丢弃。


读取参数的时候先从地址0x10*n+0x00读flag,如果为0xA5表明当前记录为正在使用中,读出全部内容,并按前面公式进行校验,如果校验出错,则当前参数不可靠,直接使用默认参数,并将当前区域的flag改写为0,同时在地址0x10*(n+1)位置开始将默认参数写入,地址0x10* (n+1)写入内容为0xA5。如果所有区域都没有发现有效记录,在地址0写入默认参数。


每次需要更改参数设定时,先将当前记录位置的flag改为0,然后再下一条记录位置写入新的参数,这个顺序可以做出适当改进,比如对写入时断电等意外情况做出考虑,从而得到更可靠的写入结果,不过就按此方法也都可以满足应用需求



再来对比一下两种方法,最简方法只能保存10万次,改进的方法理论上增加了16倍,达到160万次,如果预估最简方法产品是3年内绝对不会出错,现在就增加到了48年,一个电子产品使用超过3年还是有可能,但用48年的可能性就非常之小,可以视同为0。对于FLASH芯片也是同样道理,这里就不重复举例说明,在应用中也应该做出同样的处理。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    445

    文章

    47475

    浏览量

    407867
  • FlaSh
    +关注

    关注

    10

    文章

    1536

    浏览量

    146591
  • EEPROM
    +关注

    关注

    9

    文章

    923

    浏览量

    80036
收藏 人收藏

    评论

    相关推荐

    NAND Flash写入速度和擦除速度分别是多少

    NAND Flash写入速度和擦除速度会受到多种因素的影响,包括Flash芯片的具体型号、制造工艺、以及操作环境等。因此,无法给出确切的数值。
    的头像 发表于 02-19 12:41 760次阅读

    单片机为何需要FlashEEPROM?它们有何作用?

    单片机为何需要FlashEEPROM?它们有何作用? 单片机是一种集成电路,具有处理器核心、内存和外设等功能,通常用于嵌入式系统中。FlashEEPROM则是单片机中常用的存储器类
    的头像 发表于 01-18 11:43 594次阅读

    eepromflash的区别的作用

    在计算机和电子设备中广泛使用。EEPROMFlash Memory有很多共同之处,比如它们都属于非易失性存储器,可以在断电后保留数据。然而,它们也有一些关键的区别,包括擦除方式、写入速度、使用寿命
    的头像 发表于 12-07 16:10 565次阅读

    APM32F4 Flash模拟EEPROM介绍和代码实现

    FlashEEPROM一次操作的数据大小不同。虽然MCU内部的FlashEEPROM一样,可以实现按字节的读写,但是在写入的时候,是必须
    的头像 发表于 12-01 17:52 312次阅读
    APM32F4 <b class='flag-5'>Flash</b>模拟<b class='flag-5'>EEPROM</b>介绍和代码实现

    有没有不限擦写次数EEPROM

    EEPROM通常擦写次数都在百万次以下,如果每秒写一次,几天就废了,有没有擦写次数无限制的类似产品?
    发表于 11-08 06:15

    flash芯片时为什么需要先擦除?

    数量的页(Page)组成,每页又可以分成若干个扇区(Sector),扇区是Flash芯片的操作基本单位,通常为512字节或1K字节大小,而整个Flash芯片的容量则可以达到数个GB以上
    的头像 发表于 10-29 17:24 2436次阅读

    使用MCU Flash模拟EEPROM

    使用MCU Flash模拟EEPROM
    的头像 发表于 10-18 18:01 392次阅读

    怎么延长flash读写的寿命?

    在读写次数不变的情况下,如何尽可能的延长flash读写寿命
    发表于 10-13 07:22

    如何写入tinyAVR 1系列器件中的闪存和EEPROM

    电子发烧友网站提供《如何写入tinyAVR 1系列器件中的闪存和EEPROM.pdf》资料免费下载
    发表于 09-25 09:55 0次下载
    如何<b class='flag-5'>写入</b>tinyAVR 1系列器件中的闪存和<b class='flag-5'>EEPROM</b>

    如何使用Flash模拟EEPROM存储参数

    概述在MCU的使用中,经常遇到需要存储参数或掉电保持数据等功能。其中,FlashEEPROM是常见的非易失性存储器,都可以做到设备掉电重启后,数据还会保留。但二者有明显的区别:EEPROM可以
    的头像 发表于 09-22 08:19 692次阅读
    如何使用<b class='flag-5'>Flash</b>模拟<b class='flag-5'>EEPROM</b>存储参数

    基于HPM6000系列芯片如何使用Flash模拟EEPROM存储参数

    被编程和电擦除,而且大多数的EEPROM可以被编程和电擦除,大多数串行EEPROM允许逐字节程序或擦除操作。与EEPROM相比,闪存具有更高的密度,这允许在芯片上实现更大的内存阵列(扇
    的头像 发表于 09-21 09:15 803次阅读

    说说EEPROMFLASH的那些事

    最开始参加工作的时候,经常听到有需求说XX参数存到EEPROM,XX事件保存在FLASH中,当时只是觉得这两个东西都是可以用来存数据,应该大差不差。那真是这样么?这篇就来说说EEPROMFL
    发表于 08-10 11:15 627次阅读
    说说<b class='flag-5'>EEPROM</b>和<b class='flag-5'>FLASH</b>的那些事

    FlashEEPROM的区别

    以前做项目,有时用Flash,有时用EEPROM,搞得我有点懵逼。
    发表于 07-27 12:24 1084次阅读
    <b class='flag-5'>Flash</b>和<b class='flag-5'>EEPROM</b>的区别

    用N76E003flasheeprom用什么方法保存一个计数的数据累加到数千万?

    flash擦写次数有限,用N76E003flasheeprom用什么方法保存一个计数的数据累加到数千万。
    发表于 06-14 07:11

    非易失性存储器FlashEEPROM之间的差异与优缺点

    数据信息。它们都是电子可写和可擦除存储器,用以存储单片机的应用程序及数据信息。这些数据可在芯片上或芯片外存储信息。尽管FlashEEPROM设备都可以存储嵌入式设备中使用的信息,但是
    发表于 04-07 16:42