前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >​flash模拟eeprom存储日志的原理

​flash模拟eeprom存储日志的原理

作者头像
bigmagic
发布2021-03-09 15:24:34
1.9K0
发布2021-03-09 15:24:34
举报
文章被收录于专栏:嵌入式iot嵌入式iot

flash模拟eeprom存储日志的原理

  • 文章目的
  • 采用flash模拟eeprom的优点
  • 方案设计
  • 注意事项

文章目的

做mcu开发时,涉及到数据存储时,往往都会考虑使用flash、eeprom,或者铁电存储器。从数据储存的角度上来说,安全性最高的肯定是FRAM,接着才会考虑使用EEPROM,对于一般的数据储存,flash就足够了。考虑到一般的MCU都不会携带EEPROM,最简单的方案可以利用flash模拟出eeprom,并且实现基本的日志文件系统操作,下面来描述一下基本的原理。

采用flash模拟eeprom的优点

一般做mcu开发时,都会存储数据,如果有文件系统,可以写到文件中,但是一般不用文件系统时,则直接操作flash的读写。根据flash的操作特点,一方面是flash是只能从1变为0,不能从0写到1。只有当擦除一个页的时候,才能将该页上的数据从0变为1。以一个页为4K大小来计算,如果每次存几十个字节,并且多次重复操作,那么每次都需要擦除一个页之后再写数据。

假如用户数据是一连串的状态信息,每次都只会改变其中的一个状态,或者一个字节,那么每次操作都会将flash上所有的用户数据读到内存中,然后将内存中的数据的变化的状态位改变,然后再擦除page,接着再将内存中的数据写到flash的page上。

由于flash的读写寿命有限,在10w次左右,并且擦除page消耗的时间很长。所以上述方案存在缺陷,那么如何才能让flash像eeprom一样读写,而且操作也不用每次擦除flash呢?

方案设计

为了非常容易的将flash当作eeprom来使用,需要确保两个条件

1.读写的数据量至少小于1/2的flash的一个page数据量的大小

2.准备至少两个pages

然后就可以开始设计数据的搬运了。

每个page的数据结构可以按照上图所示进行设计。

首先每个pages的头部都会有一个标志,用于描述当前的pages的状态,其状态有未初始化、有效、无效。具体场景是,当未初始化时,由于flash的电气特性,其flags为0xff,此时需要初始化该page,往其标志位写有效即可。然后依次向下存放数据,此时由于知道每次写的数据量的大小,只需要确定其偏移量即可。

而这样也会带来一个问题,就是如何确保每次断电后再上电也能知道当前写数据的偏移?

要想解决这个问题,可以在每次上电的时候,遍历该page0,通过读取特定的用户数据的标志位来确保得到当前数据的偏移量,然后就可以记录在内存中,接着执行了。

当数据在一个page0中存满后,此时需要将数据转移到page1了。这个过程比较可以好好分解一下:

因为是日志型的数据类型,一定会存在数据被删除或者更新的情况,所以page0中会有两个同为index=0的用户数据。而且是最新的在后面。

一旦程序在pages上进行数据的写操作时,检查到剩余的pages空间不足则会将page0的状态设置成无效,接着开始将page1的flags设置为有效状态,同时开始将pages0中的数据转移到page1,注意在转移的时候,需要检查page0中的index,用最新的数据取代旧的数据。最后擦除page0即可。

依次按照上面的顺序进行数据的搬运即可实现日志型数据操作的存储。

注意事项

该方案的使用,在很多情况下都可以很好的操作,但是一旦用户数据量很大,接近1/2的page数据量时,频繁的擦写flash的问题也会存在。

随着page个数的增加,也可以减少擦除的次数,带来的问题是程序设计的更加复杂。

实际使用的过程中每个pages的flag标志不一定只有有效和无效的状态,比如在转移过程中,突然断电了,为了保证数据的不丢失,一定要考虑到每个page异常情况下的状态,并能够恢复数据。达到掉电安全状态。

有了这些后台管理机制,再写日志时,上层便可以直接使用读写函数进行操作,而不用管底层到底是flash还是eeprom。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-02-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式IoT 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • flash模拟eeprom存储日志的原理
    • 文章目的
      • 采用flash模拟eeprom的优点
        • 方案设计
          • 注意事项
          相关产品与服务
          数据保险箱
          数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档