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芯片也是同样道理,这里就不重复举例说明,在应用中也应该做出同样的处理。


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

    关注

    453

    文章

    50264

    浏览量

    421179
  • FlaSh
    +关注

    关注

    10

    文章

    1614

    浏览量

    147670
  • EEPROM
    +关注

    关注

    9

    文章

    1009

    浏览量

    81355
收藏 人收藏

    评论

    相关推荐

    eeprom芯片用在什么上

    电信号擦除和重写数据。EEPROM具有读写速度快、擦写次数多、功耗低等优点,因此在许多应用领域中都有广泛的应用。 EEPROM芯片的应用领域 在现代电子技术中,存储器是不可或缺的组成部
    的头像 发表于 10-17 10:36 280次阅读

    如何向EEPROM写入数字

    EEPROM(Electrically Erasable Programmable Read-Only Memory,电可擦可编程只读存储器)写入数字是一个相对直接的过程,但涉及到多个步骤和细节。以下是一个详细的步骤说明,旨在帮助您理解并成功向
    的头像 发表于 09-05 10:56 711次阅读

    NAND Flash的擦写次数介绍

    NAND Flash作为非易失性存储技术的重要一员,其擦写次数是评估其性能和寿命的关键因素之一。以下将详细介绍NAND Flash的擦写次数,包括其定义、不同类型NAND
    的头像 发表于 07-29 17:18 2268次阅读

    STM8S003F3P6操作EEPROM会影响FLASH吗?

    各位前辈好,想请教一下,STM8S003F3P6操作EEPROM会影响FLASH吗(具体的读写程序已经写完,只是担心会影响FLASH,因为FLASH的擦写
    发表于 05-21 06:36

    STM32写入Flash不正常的原因?

    我参考原子的战舰开发板 使用实验34 FLASH模拟EEPROM实验的Flash写操作函数 STMFLASH_Write(u32 WriteAddr,u16 *pBuffer,u16
    发表于 05-14 08:22

    STM8s 003 EEPROM断电后不保存,eeprom数据被清零的原因?

    内部的EEPROM第一个单元 // 对数据EEPROM进行解锁 do { FLASH_DUKR = 0xae;// 写入第一个密钥 F
    发表于 05-13 06:01

    STM8L101 EEPROM在仿真器跟踪状态下读写正常,芯片独立运行时不能写入怎么解决?

    用下面的代码在仿真器跟踪状态下读写正常,芯片独立运行时不能写入。请高手指点一下。谢谢 //CPU: STM8L101F3P6 主时钟设为2M #define EEPROM_ADDR 0x9800
    发表于 04-30 08:23

    ESP32/Arduino如何使用EEPROM,并且读取和写入数据?

    EEPROM (electrically erasable programmable read-only memory)是一种用户可修改的ROM,又或者称为闪存(Flash Memory)。
    的头像 发表于 03-19 11:44 3661次阅读

    FLASHEEPROM的区别和扩展【硬件干货】

    EEPROMFLASH总体差异     部分MCU片内不带程序存储器ROM,可执行代码只能放在外面的EEPROMFLASH(外扩)中;     单片机对于数据的处理和系统的大量数据
    的头像 发表于 02-27 08:37 1739次阅读
    <b class='flag-5'>FLASH</b>、<b class='flag-5'>EEPROM</b>的区别和扩展【硬件干货】

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

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

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

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

    stm32f103 flash模拟eeprom

    ,STM32F103的Flash存储器可以模拟EEPROM的功能,在本文中我们将详细介绍如何使用STM32F103的Flash存储器来实现EEPROM。 概述
    的头像 发表于 01-09 11:21 1863次阅读

    单片机芯片怎么写入程序

    单片机芯片的程序写入是通过将程序代码写入单片机芯片的非易失性存储器(如Flash)中实现的。 在计算机科学和电子工程领域,单片机是一种集成电
    的头像 发表于 01-05 14:06 7734次阅读

    eepromflash的区别的作用

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

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

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