嵌入式系统里的Flash存储管理

电科论文 相关文章 审编:阿荣 来源:网友投稿

引言

在当前数字信息技术和网络技术高速发展的后PC(Post-PC)时代,嵌入式系统已经广泛地渗透到科学研究、工程设计、军事技术、各类产业和商业文件艺术、娱乐业以及人们的日常生活等方方面面中。随着嵌入式系统越来越广泛的应用,嵌入式系统中的数据存储和数据管理已经成为一个重要的课题摆在设计人员面前。

Flash存储器作为一种安全、快速的存储体,具有体积小、容量大、成本低、掉电数据不丢失等一系列优点。目前已经逐步取代其它半导体存储元件,成为嵌入式系统中主要数据和程序载体。

作为嵌入式系统的一部分,Flash存储管理的主要功能是针对Flash自身的物理特性,利用一些特定的算法来提高Flash的使用效率,加快操作速度和管理Flash各单元的使用频率。

1 Flash存储器简介

嵌入式系统中使用的Flash主要分为NOR和NAND两种类型。这里我们以NOR型Flash为例进行介绍。NOR型Flash主要特点如下:

*体积小、容量大,目前可以达到十几MB。

*掉电数据不丢失,数据可以保存10~100年。

*有独立的地址和数据总线,可以快速地通过总线读取数据。因此它具有和静态RAM相同的读取速度,既可以作为数据存储器也可以作为程序存储器使用。

*写入操作必须通过指令序列来完成,以字节(Byte)或字(Word)为单位,每写入一个Byte或Word需十几μs。

*擦除也通过指令序列完成,以块(Block)为单位,通常块的大小为64K。每擦除一个块需要十几ms。

*由于Flash有一定的使用寿命,一般为10~100万次。所以随着使用次数的增加,会有一些单元逐渐变得不稳定或失效,因此必须能够对其状态加以识别。

2 Flash存储管理的作用

由Flash特点可以看出,操作Flash需要注意以下几点:

*必须以几K~几十K的块为单位进行数据的操作;

*擦除操作耗时较多,应减少擦除操作;

*尽量避免频繁地对同一地址操作,以免造成局部单元提前损坏。

另外,大部分嵌入式操作系统所挂接的文件系统是建立在以扇区(Sector)为单位的磁盘操作基础上(通常为512字节/扇区)。因此也需要一段特殊的Flash存储管理程序来解决以扇区为单位的文件系统接口和以块为单位的Flash物理特性之间的矛盾;同时,完成各块之间的擦写次数均衡和坏块管理等工作。Flash存储管理程序在系统中的位置如图1所示。

本文以TRI公司的FMM为例,说明Flash存储管理模块和如何完成这些功能的。

3 FMM介绍

FMM(Flash Media Manager)是由TRI公司开发的专门针对NOR型Flash的管理软件,其主要特点如下:

*动态映射OS的逻辑扇区到物理地址;

*所有物理块进行寿命均衡,同时可记录Flash的擦写次数;

*掉电数据恢复,可以保证系统的稳定性;

创建坏块表进行坏块管理,保证系统的可靠性。

为了更好地介绍FMM的操作流程,这里先作几点说明。

(1)存储空间管理

为了实现以扇区为基础的数据管理,FMM首先对Flash中的块内存储空间逻辑上进行了重新定义,每个物理块内部又重新划分成了若干物理扇区。每个物理块内部又重新划分成了若干物理扇区。每个物理扇区由512+4字节=516(0x204)字节组成。512字节为有效数据空间,另外4字节(32位)用于存放逻辑扇区另和当前状态。定义如下:

扇区状态逻辑扇区号数字空间4位28位125字节

扇区状态有4种,用于进行掉电数据恢复:

FREE—空扇区(0xF);

DVALID—扇区数据无效(0xE);

INUSE—扇区数据有效(0xC);

DIRTY—扇区数据无用,可擦除(0x8)。

以64K大小的块为例,可以计算出每个块中可以划分出127个扇区;另外,还会有4字节的空间,专门用于标志下一个被整理块。标记为0x80,否则为0xffffffff。

因此可以得出物理扇区和绝对地址之间的对应关系:

绝对地址=Flash基地址+物理扇区号×0x204+所在块号×4

(2)扇区分类

FMM中将扇区分为ID扇区和数据扇区两类:

①FMM会占用N个扇区作为标识ID(Identification)扇区,占用逻辑扇区号0~N。这一部分扇区是文件系统不能使用的,是FMM用于管理所占用的存储空间。因此文件系统所管理的逻辑扇区号必须从N+1开始。

ID扇区主要包含如下数据:FMM版本号、写入(擦除)次数EraseCount、用户标识和坏扇区表。

N的取值与坏扇区表的大小有关,每个FMM管理的物理扇区占用表中的1位。在每次存储数据时,可以通过查询表中的相应位来确定该扇区的有效性。

②数据扇区,用于存储数据。

(3)空间映射表(Mapping Table)

由于Flash不能像普通磁盘那样进行字节的修改,甚至不能以扇区为单位进行修改;而只能以块为单位进行修改;但如果只是简单将物理扇区和逻辑扇区一一对应,那么如果我们想对扇区修改就必须将整个块的内容都擦除,然后再将修改后的内容回写;势必会造成时间和Flash寿命的损失。因此,建立一个物理扇区号和逻辑扇区号的空间映射表,使逻辑扇区与物理扇区号进行动态的匹配。这样,在修改某个扇区的内容时只要将数据写入一个新的扇区,然后将原扇区标记为DIRTY就可以了。这样,还可以消除频繁修改某个扇区带来的寿命不均的影响。

映射表是建立在内存中的项数为M(扇区总数)的数组,每项占用4字节,用于存放对应的物理扇区号。当某项为空(NULL)时,认为该扇区空闲,未使用,如图2所示。

审编推荐

存储器 | 电科论文 | 相关文章

嵌入式系统里的Flash存储管理”相似文章