|
|
<BR> 摘要:以TRI公司的基于NOR Flash的Flash管理软件FMM为例,详细介绍嵌入式系统中<BR> 如何根据Flash的物理特性来进行Flash存储管理。 <BR> 关键词:嵌入式系统 Flash FMM</P><P> 引言</P><P> 在当前数字信息技术和网络技术高速发展的后PC(Post-PC)时代,嵌入式系统已经广泛<BR> 地渗透到科学研究、工程设计、军事技术、各类产业和商业文件艺术、娱乐业以及人们的<BR> 日常生活等方方面面中。随着嵌入式系统越来越广泛的应用,嵌入式系统中的数据存储和<BR> 数据管理已经成为一个 <BR> 匾目翁獍谠谏杓迫嗽泵媲啊 </P><P> Flash存储器作为一种安全、快速的存储体,具有体积小、容量大、成本低、掉电数据不<BR> 丢失等一系列优点。目前已经逐步取代其它半导体存储元件,成为嵌入式系统中主要数据<BR> 和程序载体。</P><P> 作为嵌入式系统的一部分,Flash存储管理的主要功能是针对Flash自身的物理特性,利用<BR> 一些特定的算法来提高Flash的使用效率,加快操作速度和管理Flash各单元的使用频率。</P><P> 1 Flash存储器简介</P><P> 嵌入式系统中使用的Flash主要分为NOR和NAND两种类型。这里我们以NOR型Flash为例进行<BR> 介绍。NOR型Flash主要特点如下:</P><P> *体积小、容量大,目前可以达到十几MB。</P><P> *掉电数据不丢失,数据可以保存10~100年。</P><P> *有独立的地址和数据总线,可以快速地通过总线读取数据。因此它具有和静态RAM相同的<BR> 读取速度,既可以作为数据存储器也可以作为程序存储器使用。</P><P> *写入操作必须通过指令序列来完成,以字节(Byte)或字(Word)为单位,每写入一个<BR> Byte或Word需十几μs。</P><P> *擦除也通过指令序列完成,以块(Block)为单位,通常块的大小为64K。每擦除一个块<BR> 需要十几ms。</P><P> *由于Flash有一定的使用寿命,一般为10~100万次。所以随着使用次数的增加,会有一<BR> 些单元逐渐变得不稳定或失效,因此必须能够对其状态加以识别。</P><P> 2 Flash存储管理的作用</P><P> 由Flash特点可以看出,操作Flash需要注意以下几点:</P><P> *必须以几K~几十K的块为单位进行数据的操作;</P><P> *擦除操作耗时较多,应减少擦除操作;</P><P> *尽量避免频繁地对同一地址操作,以免造成局部单元提前损坏。</P><P> 另外,大部分嵌入式操作系统所挂接的文件系统是建立在以扇区(Sector)为单位的磁盘<BR> 操作基础上(通常为512字节/扇区)。因此也需要一段特殊的Flash存储管理程序来解决<BR> 以扇区为单位的文件系统接口和以块为单位的Flash物理特性之间的矛盾;同时,完成各<BR> 块之间的擦写次数均衡和<BR> 坏块管理等工作。Flash存储管理程序在系统中的位置如图1所示。</P><P> 本文以TRI公司的FMM为例,说明Flash存储管理模块和如何完成这些功能的。</P><P> 3 FMM介绍</P><P> FMM(Flash Media Manager)是由TRI公司开发的专门针对NOR型Flash的管理软件,其主<BR> 要特点如下:</P><P> *动态映射OS的逻辑扇区到物理地址;</P><P> *所有物理块进行寿命均衡,同时可记录Flash的擦写次数;</P><P> *掉电数据恢复,可以保证系统的稳定性;</P><P> 创建坏块表进行坏块管理,保证系统的可靠性。</P><P> 为了更好地介绍FMM的操作流程,这里先作几点说明。</P><P> (1)存储空间管理</P><P> 为了实现以扇区为基础的数据管理,FMM首先对Flash中的块内存储空间逻辑上进行了重新<BR> 定义,每个物理块内部又重新划分成了若干物理扇区。每个物理块内部又重新划分成了若<BR> 干物理扇区。每个物理扇区由512+4字节=516(0x204)字节组成。512字节为有效数据空<BR> 间,另外4字节(32位)<BR> 用于存放逻辑扇区另和当前状态。定义如下:</P><P> 扇区状态 逻辑扇区号 数字空间 <BR> 4位 28位 125字节 </P><P> 扇区状态有4种,用于进行掉电数据恢复:</P><P> FREE—空扇区(0xF);</P><P> DVALID—扇区数据无效(0xE);</P><P> INUSE—扇区数据有效(0xC);</P><P> DIRTY—扇区数据无用,可擦除(0x8)。</P><P> 以64K大小的块为例,可以计算出每个块中可以划分出127个扇区;另外,还会有4字节的<BR> 空间,专门用于标志下一个被整理块。标记为0x80,否则为0xffffffff。</P><P> 因此可以得出物理扇区和绝对地址之间的对应关系:</P><P> 绝对地址=Flash基地址+物理扇区号×0x204+所在块号×4</P><P> (2)扇区分类</P><P> FMM中将扇区分为ID扇区和数据扇区两类:</P><P> ①FMM会占用N个扇区作为标识ID(Identification)扇区,占用逻辑扇区号0~N。这一部<BR> 分扇区是文件系统不能使用的,是FMM用于管理所占用的存储空间。因此文件系统所管理<BR> 的逻辑扇区号必须从N+1开始。</P><P> ID扇区主要包含如下数据:FMM版本号、写入(擦除)次数EraseCount、用户标识和坏扇<BR> 区表。</P><P> N的取值与坏扇区表的大小有关,每个FMM管理的物理扇区占用表中的1位。在每次存<BR> 储数据时,可以通过查询表中的相应位来确定该扇区的有效性。</P><P> ②数据扇区,用于存储数据。</P><P> (3)空间映射表(Mapping Table)</P><P> 由于Flash不能像普通磁盘那样进行字节的修改,甚至不能以扇区为单位进行修改;而只<BR> 能以块为单位进行修改;但如果只是简单将物理扇区和逻辑扇区一一对应,那么如果我们<BR> 想对扇区修改就必须将整个块的内容都擦除,然后再将修改后的内容回写;势必会造成时<BR> 间和Flash寿命的损失。<BR> 因此,建立一个物理扇区号和逻辑扇区号的空间映射表,使逻辑扇区与物理扇区号进行动<BR> 态的匹配。这样,在修改某个扇区的内容时只要将数据写入一个新的扇区,然后将原扇区<BR> 标记为DIRTY就可以了。这样,还可以消除频繁修改某个扇区带来的寿命不均的影响。</P><P> 映射表是建立在内存中的项数为M(扇区总数)的数组,每项占用4字节,用于存放对应的<BR> 物理扇区号。当某项为空(NULL)时,认为该扇区空闲,未使用,如图2所示。</P><P> 4 FMM模块操作</P><P> 按功能,可以将FMM分解为4个基本模块:格式化模块、初始化模块、存取模块和空间整理<BR> 模块。以下简单扫描各模块的操作流程。</P><P> (1)格式化模块</P><P> 对数据空间进行初级格式化,建立ID扇区。该模块在第一次使用数据盘之前调用,相当于<BR> 低级格式化。过程如下:</P><P> ①调用FMM初始化模块,根据结果判断该存储体是否含有FMM控制信息。如果有,将擦除次<BR> 数计数器EraseCount加1,否则置为1。</P><P> ②调用Flash驱动程序,将FMM所管理的空间全部擦除。</P><P> ③将Block0的标志置为0x80,即下一个被整理的Block,也是第一个非空Block。</P><P> ④收集有关信息,创建ID扇区写入Flash。</P><P> ⑤在内存中创建空间映射表。</P><P> 空间映射表的创建过程如下:</P><P> ①清空内存中为映射表和ID扇区申请的空间。</P><P> ②将Flash中的ID扇区内容读入内存中。</P><P> ③扫描整个物理空间,依次读入每个物理扇区的状态和逻辑扇区号,将状态为INUSE的逻<BR> 辑扇区号装入空间映射表的对应位置,并记录INUSE和DIRTY扇区的数目。</P><P> ④修复扫描中发现的DAVLID扇区数据。</P><P> 修复DAVLID扇区的过程如下:</P><P> ①取出DVALID扇区的逻辑扇区号。</P><P> ②如果逻辑扇区号为NULL,跳到步骤⑤。</P><P> ③查询空间映射表,如果对应的物理扇区号为NULL,跳到步骤⑤。</P><P> ④将查到的物理扇区置为DIRTY。</P><P> ⑤将DAVLID扇区置为INUSE,将其扇区号填入空间映射表。</P><P> (2)初始化模块</P><P> 该模块在文件系统初始化之前调用,用于初始化FMM系统。</P><P> ①从内存池中为ID扇区申请内存。</P><P> ②从内存池中为空间映射表申请内存。</P><P> ③在内存中创建空间映射表。</P><P> (3)存取模块</P><P> 该模块是FMM与文件系统的接口,可以分为读和写两部分。</P><P> *读数据过程:</P><P> ①根据所要读取的逻辑扇区号,查表找出其对应的物理扇区号;</P><P> ②根据物理扇区号计算出物理地址;</P><P> ③读出该扇区数据;</P><P> ④如需读多个扇区,重复步骤①~③。</P><P> *写数据流程;</P><P> Flash存储器中“写入”是将对应单元由“1”变“0”,“擦除”是由“0”变为“1”。<BR> 因此,无须擦除就可以将状态FREE(0xF)依次“写”为DVALID(0xE)、INUSE(0xC)、<BR> DIRTY(0x8),如图3所示。</P><P> (4)空间整理模块</P><P> 由于在写入操作中产生dirty扇区,因此当自由空间不足时,需要对空间进行整理,释放<BR> dirty扇区占用的空间用于存储数据,流程如图4所示。</P><P> 根据图4可以看出,整理的过程实际是将有用扇区依次搬到空扇区中,再擦除旧块的过程<BR> ,因此需要一个空块用作数据交换。</P><P> 5 FMM性能分析</P><P> *读出速度:读取速度基本与Flash的读速度相同。</P><P> *写入速度:写入操作速度与Flash的写入速度基本相同。</P><P> *整理速度:空间整理上由于算法的限制会耗费很长的时间,最好挑选除速度较快的Flas<BR> h来进行配合使用;或者可以采用其它的算法来进行空间整理,但会使寿命均衡有所减弱<BR> ,必须根据具体的应用来选取适合的方案组合才能达到最好的效果。</P><P> *文件系统可用空间:由于FMM占用了一部分空间,因此实际文件系统可用空间小于Flash<BR> 的实际物理空间。</P><P> 文件系统可用空间=Flash总空间-ID扇区空间-1个用于整理的保留块空间。 <BR>
|
|
状 态:
离线
公司简介
产品目录
|
|
公司名称:
|
中华工控网
|
联 系 人: |
客服中心
|
电 话: |
0755-26546361
|
传 真: |
0755-26585268 |
地 址: |
深圳市南山区创业路现代城华庭1栋6A |
邮 编: |
518054 |
主 页: |
|
|
|
|
|