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

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

3天内不再提示

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

聚丰开发 2018-10-29 11:01 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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


开发电子产品时,常常需要断电后保存某些数据,这就需要使用 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芯片也是同样道理,这里就不重复举例说明,在应用中也应该做出同样的处理。


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

    关注

    463

    文章

    54482

    浏览量

    469814
  • FlaSh
    +关注

    关注

    10

    文章

    1761

    浏览量

    155978
  • EEPROM
    +关注

    关注

    9

    文章

    1146

    浏览量

    86378
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    烧录芯片是什么意思?以F29-38门铃音乐芯片为例解析

    这一核心技术。 一、烧录芯片是什么意思? 烧录芯片(Programming IC)是指将预设的程序、数据或固件(Firmware)通过专用设备写入集成电路(IC)的存储单元(如Flash
    的头像 发表于 04-17 15:30 240次阅读

    SPI NOR Flash,低功耗FLASH芯片ZB25WD20A

    在嵌入式存储领域,FLASH芯片作为一种非易失性存储器(NVM),其最大优势在于断电后数据依然能够完整保留。它依靠电荷俘获效应工作,通过控制电压让存储单元的浮动栅极捕获或释放电荷,从而实现数据的写入与擦除。这种底层原理保证了
    的头像 发表于 04-03 17:34 709次阅读

    NOR FLASH和NAND FLASH的对比

    FLASH芯片的擦写次数一般来说都是有限的,目前主流产品的擦写寿命普遍在10万次左右。当FLASH芯片接近使用寿命终点时,写操作可能会出现失
    的头像 发表于 03-31 16:58 551次阅读

    NOR Flash和NAND flash有什么区别

    在嵌入式系统、移动设备与存储领域,NOR Flash和NAND Flash是两种最常见的非易失性存储技术。尽管它们都属于闪存(Flash EEPROM)家族,但在内部结构、接口方式、读
    的头像 发表于 03-11 15:08 689次阅读
    NOR <b class='flag-5'>Flash</b>和NAND <b class='flag-5'>flash</b>有什么区别

    SPI NOR Flash和SPI NAND Flash存储芯片的区别

    和高存储密度,成为数据存储的首选。英尚微电子提供高性价比的Flash芯片解决方案,我们拥有丰富型号的Flash芯片,能够满足不同场景的特定需求,覆盖各类应用场景。
    的头像 发表于 01-29 16:58 940次阅读
    SPI NOR <b class='flag-5'>Flash</b>和SPI NAND <b class='flag-5'>Flash</b>存储<b class='flag-5'>芯片</b>的区别

    请问CW24C系列的EEPROM的擦写次数是多少次?

    CW24C系列的EEPROM的擦写次数是多少次?
    发表于 01-15 07:32

    EEPROM的相关问题

    1.Q:CW24C系列的EEPROM的擦写次数是多少次? A:CW24C系列的EEPROM采用Double-cell架构,极大的提高了EEPROM的可靠性和擦写寿命,其擦写为500万次
    发表于 12-15 07:56

    针对CW32芯片内部flash能存用户数据吗?

    针对CW32芯片,内部flash能存用户数据吗?就是如果不想加外部的flash,内部多余的flash能给外部使用吗?有相关的示例么?写入也需
    发表于 12-09 08:13

    把CW32L010用FLASH模拟EEPROM

    CW32L010横空出世,定时器和ADC变化很大,FLASH基本和以前型号一样,但有一点改动,BUSY位从CR1寄存器改到ISR寄存器了。 把F003的程序改改就能用,太棒了,拿走不谢。 只有一个
    发表于 11-24 07:40

    芯源小容量存储芯片EEPROM产品优势

    擦写寿命长:如CW24C系列的EEPROM,采用Double-cell架构,极大地提高了EEPROM的可靠性和擦写寿命,其擦写次数可达500万次,其中512K EE做到业界最高的擦写次数
    发表于 11-14 06:23

    FLASH模拟EEPROM入门指南

    0xFF,而EEPROM支持直接覆盖写入。 寿命考量:FLASH擦写次数有限(约10万次),需通过策略降低磨损;EEPROM则达百万次以上。
    发表于 08-14 06:13

    FLASH模拟EEPROM

    FLASH 模拟 EEPROM 的思路是: ― 新数据存储不影响旧数据; ― 尽量减少 FLASH 擦除次数延长
    发表于 07-16 15:13

    STVD使用STM8S005K6T6C内部data eeprom进行数据写入操作问题求解

    1.STVD使用STM8S005K6T6C内部data eeprom进行数据写入操作,使用st-link V2(B2013 21)进行仿真调试,发现寄存器FLASH_CR2写入1是值仍
    发表于 06-23 06:29

    光纤大方转小方指的是什么

    光纤“大方转小方”通常指的是将光纤接口从大方头(如SC型接口)转换为小方头(如LC型接口)的适配器或跳线,这在光纤网络部署中是常见的需求,以下是对其的详细解析: 一、接口类型与特点 大方头接口(SC
    的头像 发表于 06-05 09:53 2102次阅读

    如何从CYUSB3014-BZXCT读取/写入EEPROM固件?

    我有一个 CYUSB3014-BZXCT 芯片,其中保存了 EEPROM 数据。 我还有第二个空的 CYUSB3014,我想将第一个芯片EEPROM 数据
    发表于 05-07 06:46