基于分块管理和状态转换的嵌入式Flash管理

发布者:心灵的旅程最新更新时间:2013-09-12 来源: eefocus关键字:Flash管理  均衡  文件系统 手机看文章 扫描二维码
随时随地手机看文章
1 引言

嵌入式系统中通常都需要存放一些非易失性数据, 并且数据量的大小和数据类型根据不同的系统需求差异很大。因此选取合适的存储器是完成数据存储系统的第一步, 更重要的是使存储系统长期稳定、高效的工作, 这就必须寻求一个完备的存储器数据管理方法[ 1] 。本文介绍了一种适用于无文件系统环境下的N OR Flash 管理方法, 采用分块管理和状态转换的方法使得Flash 的使用效率和操作可靠性得到大大提高。

2 NOR Flash 存储器及其特性

NOR Flash 和NAND Flash 是目前市场上两种主要的Flash 存储器。一般在非海量存储型的嵌入式设备中都是直接采用NOR Flash 作为程序代码和非易失性数据的存储器, 这主要是由NOR
Flash 的特点所决定的。NOR Flash 的特点如下:

1) 存储容量较小, 一般在1~ 16MByte 之间。

2) 具有和SRAM 相同的接口, 随机读取速度快, 可以做到芯片内执行( XIP) [ 2] 。

3) 存储单元只能由1 写成0, 因此进行写操作前必须先进行擦除操作, 使对应的单元变成1。

4) 器件有一定的使用寿命, 一般为10~ 100 万次。随着使用次数的增加, 可能有的单元会失效。但是NOR Flash 出厂时器件的每个单元都有效。NOR Flash 的众多特性使得它成为嵌入式系统设计中首选的存储器器件。由于NOR Flash 的擦除操作都是以块为单位的, 并且不同种类的NOR Flash 器件所支持的擦除单位可能不一样, 但是每种NOR Flash 器件都支持64KB 为单位的擦除[ 3~ 4] , 因此后面介绍的分块管理方法将以64KB为块基本单位, 从而解决分块管理方法在不同种类NOR Flash 器件上实现时所出现的数据备份问题。

3 NOR Flash 分块管理方法

为了均衡每个Flash 分块的使用次数, 提高整个存储器件的使用寿命, 对Flash 采用分块管理的方法[ 5] 。以64KB 为单位, 将系统分配用作非易失性数据区域进行分块操作, 其中每个分块又分成16 字节的头部信息与数据区域。分块示意图如图1 所示。

图1 分块示意图

正是利用分块的头部信息, 进行擦除次数均衡与分块状态的切换。对于头部几个主要字段的定义如下:

1) Block_Flag ( 8bit) : 用于标志分块的状态, 总共有BF _NOT _ INIT ( 0xFF) 、BF _FREE (0xFE)、BF_COPYING_ DATA ( 0xFC )、BF _ COPY _ FINISHED(0xF8) 、BF_INUSE( 0xF0) 、BF_SRC_DATA ( 0xE0) 、BF_ERASING( 0xC0)、BF_INVALID(0x00) 8 种状态。

2) Blo ck _ Data _ T ype ( 8bit ) 和Blo ck _ Data _Ty pe_Ext ( 8bit ) : 分别表示该分块存储的数据类型和子类型, 这两个字段都由应用程序所存储的数据类型决定。例如学生信息的存储, 可能的一种存储方法是一个分块存储学生的学号信息, 而其它几个分块存储学生的具体信息, 这时它们的数据类型一样, 但是子类型却不一样。

3) Block_Erase_Counter( 32bit ) : 该字段用来动态记录每个分块的擦除次数, 从而方便应用程序对Flash 分块的使用次数进行均衡。

4) Next_Off set ( 16bit ) : 该字段为将来扩展之用, 用来将64K 的分块空间进一步细化, 使得将来1 个64K 空间内可以存储不同类型的数据。[page]

4 NOR Flash 分块状态切换与使用均衡

在Flash 的使用过程中, 必然存在着多次的数据更新, 当前嵌入式系统中数据更新的一般做法是先将新数据写入Flash, 然后将旧的数据置为无效状态[ 6] 。如果每次数据更新都马上将原先数据擦除,
则将造成Flash 的擦除次数急剧增加。随着数据更新次数的增多, 也就导致Flash 存储系统中的可用资源不断减少, 因此在某个时刻就必须对系统中的垃圾资源进行回收。通过巧妙设置Flash 分块的状态,并在资源回收过程中对源、目标两个分块进行适当的状态切换, 可以确保在资源回收过程中不会因掉电原因而产生数据的丢失。令回收源分块为A, 新目标分块为B, 资源回收流程如图2 所示。

图2 资源回收流程图

对于每次系统上电后, 应用程序将读取每个Flash 数据分块的头部信息, 在内存中建立相应的分块信息表, 同时根据头部信息和空闲地址搜索算法去初始化每种数据类型的起始地址与空闲区域首地址, 同时必须对异常状态进行检测恢复。其中对每个分块的初始化主要是根据分块头部的状态信息进行判断, 检测是否之前有掉电过, 然后做出相应处理, 主要有以下几种可能:

1) 状态为BF _NOT _INIT, 则将其初始化为BF_FREE 状态。

2) 状态为BF_FREE 或BF_INUSE, 则在内存中建立分块信息, 无需其它操作。

3) 状态为BF _ COPYIN G _ DAT A 或BF _ERASING, 则将其擦除后置为BF_FREE 状态。

4) 分块A 状态为BF_SRC_DATA, 如果有另一个分块B 为BF_COPY _FINISHED, 则根据流程图继续完成资源回收操作。如果有另一个分块B 为BF_COPYING_DAT A, 则擦除B 后置为BF_FREE 状态, 然后对A 重新进行资源回收操作。

5) 状态为BF_INVA LID, 则该块为坏块, 不在内存中建立分块信息。

为了均衡每一个分块的使用次数, 延长整块Flash 的使用寿命, 在每次进行分块擦除之后, 必须先将之前记录下来的Block_Erase_Counter 加1, 然后组成新的头部信息重新写回分块头部, 从而达到动态记录每个分块擦除次数的功能。在进行空闲分块申请的时候, 必须遍历所有状态为BF_FREE 分块, 选取Block_Erase_Counter 数值最小的作为新分块分配, 从而使得每个分块的使用次数趋于一致。

5 分块管理在嵌入式软件系统中的实现

在嵌入式软件的设计中, 良好的软件架构设计可以使得软件具有更好的可靠性及可扩展性。目前分层架构是嵌入式软件系统设计中最为流行的一种[ 7] 。因此在软件实现过程中, 采用了分层的软件架构将分块管理软件分为Flash 驱动层、No rFlash 分块管理层和数据类型管理层三层。

具体的软硬件分层示意图如图3 所示。

图3 存储模块软件构架 

软件最底层为Flash 驱动层, 考虑到NOR Flash存储器的多样性, 并且各种器件的底层驱动可能不同, 因此Flash 驱动层的建立可以向分块管理层屏蔽具体的硬件信息。一般驱动层的实现主要采用函数指针的方法进行[ 8] , 初始化时通过读取不同Flash 的ID 分别对read、write 和erase 等基本操作函数指针进行赋值, 此后上层软件在对Flash 进行实际操作时则通过函数指针进行, 并不清楚具体的Flash 信息。在嵌入式系统中, 非易失性数据的种类有多种多样, 因此分块管理层本身并不涉及具体类型数据的存储方法, 只是预留几个字段用于记录数据类型等信息[ 9] 。这些字段用于数据类型管理程序初始化时使用。数据类型管理层的主要功能是管理NOR Flash存储器中不同类型的数据, 向应用程序提供基于数据类型的各种操作, 屏蔽掉具体的分块管理信息。

分块管理层程序负责资源回收算法、开机Flash 异常恢复算法的实, 同时向数据类型管理层提供各种类型数据的所在的分块地址信息。通过这种构架使得每一层的实现都易于采用面向对象的思想实现, 其中从底层至上层的对象分别为Flash、分块、数据类型。

6 结语

通过采用分块管理与状态转换的方法, Flash的存储性能有了较大的改善, 而且数据的可靠性也有很大提高, 特别适用于无文件系统嵌入式设备中的数据存储。同时通过合理的软件构架使得各个分层都易于采用面向对象的思想实现, 这样有利于软件的扩展与移植。目前这种方法已经在数字电视机顶盒中采用, 实现效果甚好, 并且为上层软件的设计带来很大方便。
关键字:Flash管理  均衡  文件系统 引用地址:基于分块管理和状态转换的嵌入式Flash管理

上一篇:基于多处理器的可识别方位引信信号处理系统
下一篇:嵌入式系统Flash存储管理策略研究

推荐阅读最新更新时间:2024-03-16 13:27

YAFFS2文件系统搭建与配置(Micro2440 + linux 2.6.39)
1. YAFFS2文件系统配置 a) YAFFS2源码下载地址 yaffs2-HEAD-4e188b0.tar.gz:http://www.yaffs.net/download-yaffs-using-git (http://pan.baidu.com/s/1jG7OAP4) b) 解压源码 # tar -xvf yaffs2-HEAD-4e188b0.tar.gz -C ./ c) 为内核打YAFFS2补丁 # cd yaffs2-HEAD-4e188b0/ # ./patch-ker.sh c m ../linux-2.6.39/ d) 配置内核 # m
[单片机]
YAFFS2<font color='red'>文件系统</font>搭建与配置(Micro2440 + linux 2.6.39)
一种锂电池组保护板均衡充电的设计方案
本文针对动力锂电池成组使用,各节锂电池均要求充电过电压、放电欠电压、过流、短路的保护,充电过程中要实现整组电池均衡充电的问题,介绍了一种采用单节锂电池保护芯片对任意串联数的成组锂电池进行保护的含均衡充电功能的电池组保护板的设计方案。经过仿真结果和工业生产应用证明,该保护板的保护功能完善,工作稳定,性价比高。 0引言 常用的均衡充电技术包括恒定分流电阻均衡充电、通断分流电阻均衡充电、平均电池电压均衡充电、开关电容均衡充电、降压型变换器均衡充电、电感均衡充电等。成组的锂电池串联充电时,应保证每节电池均衡充电,否则使用过程中会影响整组电池的性能和寿命。而现有的单节锂电池保护芯片均不含均衡充电控制功能,多节锂电池保护芯片均衡充电控制功
[电源管理]
一种锂电池组保护板<font color='red'>均衡</font>充电的设计方案
realme Q3s于10月发布:骁龙778G,整体配置更均衡
今日,realme 副总裁、全球产品线总裁王伟在微博表示,realme 下个月即将推出的 Q 系列手机,正式命名 Q3s,配置新一代中端神 U 骁龙 778G,整体配置更全面更均衡。   realme 在不久前宣布,成为全球第四大中国手机品牌,并且定下了“双一亿”目标:现在起至 2022 年底,realme 全球手机销量再增加一亿台;2023 年单年销量破一亿台。   据悉,realme 新手机的发布频率非常高,被网友调侃为“月月有新机”。   IT之家了解到,realme 刚刚在 9 月 22 日发布了真我 GT Neo2 手机,采用 6.62 英寸三星 E4 发光材料直屏,拥有 120Hz 四档智能帧率,内置 5000
[手机便携]
linux 2.6.24.4在S3C2410上的移植(根文件系统cramfs,ramdisk,jffs2)(基于GEC2410)
内核可以跑起来,接下来就是移植根文件系统了. 我们使用BusyBox-1.10.1来创建根文件系统.下载地址为:http://www.busybox.net/downloads/ 1.设置BusyBox (1)解压 #tar -xvjf BusyBox-1.10.1.tar.bz2 #cd BusyBox-1.10.1 (2)修改Makefile,设置CROSS_COMPILE ARCH ?= arm CROSS_COMPILE ?= /home/GEC2410/toolchain/arm-softfloat-linux-gnu/bin/arm-softfloat-linux-gnu- (根据自己的交叉编译环境路径) (3)配置B
[单片机]
构建根文件系统(2)Busybox init 进程
讲init进程的启动过程从/etc/inittab出发。 内核启动init进程时已经打开/dev/console设备作为控制台,一般情况下Busybox init程序就使用/dev/console, 如果内核启动init进程的同时设置了环境变量CONSOLE或console,则使用环境变量所指定的设备。 1、/etc/inittab文件的相关文档和示例代码都在Busybox 的examples/inittab文件中。 vi examples/inittab 内容如下(红色字为格式重要部分): # /etc/inittab init(8) configuration for BusyBox # # Copyright (C) 199
[单片机]
串联蓄电池组均衡充电系统
    用蓄电池作为动力源的电动汽车在使用中可实现零污染, 因此, 它能有效解决汽车排污和能源问题 。铅酸蓄电池以其具有密封好、无污染等优点成为电动汽车的主动力源。一般的电动汽车都使用蓄电池组来提供动力,这些电池组由单体电池串联而成,这样就存在充电放时单体容量之间的不一致性问题,从而影响蓄电池的使用寿命和效能以及系统的可靠性。因此充放电时对蓄电池组进行均衡控制是十分必要的。 1 不一致性原因及解决方法    针对不一致性问题 的解决方法大致有四种:(1)在制造工艺上保证出厂质量,减小单体之间的差异性;(2)蓄电池组各蓄电池单体参数一致性的严格筛选;(3)使用过程中尽量使各单体处于相同的环境中,定时测量各蓄电池的电压分布情况,及
[电源管理]
串联蓄电池组<font color='red'>均衡</font>充电系统
车载MP3中Flash文件系统的设计与应用
摘要:基于Flash存储器的特点,详细介绍适合地车载MP3的Flash文件系统(包括Flash存储管理系统和FAT文件系统)的具体设计。利用Flash文件系统实现对Flash存储器的较好的操作管理功能。 关键词:车载MP3 Flash存储管理系统 FAT 文件系统 引言 目前车载播放器基本上采用的是CD播放器、MD播放器以及磁带播放器等。由于这类播放器内部具有一些机械式传动部件,再加上装在汽车这个特定的环境中,经常会由于机械传动或者光头、磁头受震动发生跳音或绞带现象,从而影响音质。 Flash存储器由于具有存储容量大、掉电数据不丢失、何种小以及可多次擦写等许多优点,正逐步取代其它半导体存储器件而广泛应用于移动电话、PDA
[缓冲存储]
车载MP3中Flash文件系统的设计与应用
摘要:基于Flash存储器的特点,详细介绍适合地车载MP3的Flash文件系统(包括Flash存储管理系统和FAT文件系统)的具体设计。利用Flash文件系统实现对Flash存储器的较好的操作管理功能。 关键词:车载MP3 Flash存储管理系统 FAT 文件系统 引言 目前车载播放器基本上采用的是CD播放器、MD播放器以及磁带播放器等。由于这类播放器内部具有一些机械式传动部件,再加上装在汽车这个特定的环境中,经常会由于机械传动或者光头、磁头受震动发生跳音或绞带现象,从而影响音质。 Flash存储器由于具有存储容量大、掉电数据不丢失、何种小以及可多次擦写等许多优点,正逐步取代其它半导体存储器件而广泛应用于移动电话、PDA
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

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