FAT文件系统在车载MP3上的应用

目前车载播放器基本上采用的是cd播放器、md播放器以及磁带播放器等。由于这类播放器内部具有一些机械式传动部件,再加上装在汽车这个特定的环境中,经常会由于机械传动或者光头、磁头受震动发生跳音或绞带现象,从而影响音质。
flash存储器由于具有存储容量大、掉电数据不丢失、何种小以及可多次擦写等许多优点,正逐步取代其它半导体存储器件而广泛应用于移动电话、pda以及数码相机等移动电子产品中。其作为存储数据和应用程序的存储体,可以将大量数据方便、快捷地移动和交换。
基于上述两点设计了一个车载mp3系统。该系统采用flash作为外存储器,并且由全固态器件组成,播放时不会出现跳音或绞带现象,音质也很好。由于flash存储器在应用过程中可能会出现坏损单元,影响车载mp3播放器的性能,因此本文针对flash存储器自身的物理特性,设计了一个文件系统,对flash存储器中的数据内容进行基于文件名或者文件号的存储管理以及应用透明的坏损管理。该系统优化了存储速度和存储空间,提高了车载mp3播放系统的可靠性。
1 flash存储器特点
flash内部分为多个存储单元块(block),每个存储单元块又由多个页(page)组成。存储单元块是可擦除的最小单位,页是写入数据的最小单位。
flash存储器读取数据与一般的存储器类似,可以实现随机读取,读出的速度也很快。而flash存储器的写操作则和一般的存储器有所不同,flash的写操作必须先按存储块擦除(写入0xff到要擦除的存储单元块中),再按页顺序写入。由于flash存储器擦除耗时较长,所以flash存储器写入的时间主要在于flash存储器内部的擦除操作等。
flash存储器第一块一定是有效块,而其它块可能会在使用前就是坏块或者在使用过程中变成坏块(invalid block)。flash存储器对内部坏块的判定是,根据其每一个单元存储块中的第3区中的第6 cloumn内容是否为0xff来定。虽然flash存储器内容会有坏块,但是由于每一块的内部结构都是相互独立的,所以只要对其状态加以识别,坏块并不影响系统对有效块的操作。

2 flash文件系统设计
本文在flash存储的基础上设计了一个flash存储管理系统来对flash进行物理管理。而在flash存储管理系统基础上又建立了一个fat文件系统来对文件操作进行管理,由flash存储管理系统和fat文件系统共同组成了flash文件系统。该文件系统完全支持文件名管理、自动坏损管理等通用文件系统所具有的功能;同时,针对车载mp3播放器系统特殊的应用环境,设计改进了该文件系统的可靠性,即使在恶劣的条件下也不会影响音质。flash文件系统的具体结构如图1所示。
2.1 flash存储管理系统
flash存储器的操作是以块为单位的,而fat文件系统则是建立在以扇区(sector)为单位的磁盘操作基础上(通常为512字节/扇区)。因此,本文设计了一个特殊的flash存储管理系统,来解决以块为单位的flash物理特性和以扇区为单位的文件系统接口之间的矛盾,以使得flash的物理地址和fat操作的逻辑地址之间能够对应。同时,由于flash的其它特点,flash存储管理系统还实现了各块之间的擦写次数均衡和坏块管理等工作。
(1)物理地址到逻辑地址的映射
为了在flash物理地址和fat操作的逻辑地址之间建立一个好的映射关系,对flash的存储空间在逻辑上进行了重新定义。结合flash特点,将每个存储单元块内部分成若干物理扇区,每个物理扇区由512字节+16字节=528字节组成。其中main area的512字节为有效数据空间,而spare area的16字节用于存放其它信息。
由上述定义便可以确定flash物理扇区和绝对地址之间的对应关系:
绝对地址=flash基地址+物理扇区号×528
在建立了物理地址和逻辑地址之间的映射关系之后,但可以很好地将车载系统对音频文件的操作转换成系统直接flash的编程或者擦除操作。例如,在该系统中要进行readfile()操作,便可以根据其对应关系,通过执行flash存储管理系统中的sectorread()操作来实现。
(2)可靠性设计
由于该车载系统采用汽车供电,因此当汽车处于不太平衡的环境中,可能会由于颠簸千万播放系统的异常断电,所以提高车载mp3播放系统的可靠性非常重要。本文通过将spare area的16字节定义为逻辑扇区号、扇区当前状态、坏块信息等来提高播放系统的可靠性。其中spare area的具体定义如下:

由以上定义可以看到,spare area的第4~5字节用于存储扇区当前状态。这样在flash写操作过程中,如果突然断电,便可以根据此状态进行掉电数据恢复。该系统中设定扇区当前状态有3种:扇区为空(0xfff)、扇区数据无用(0x0000)、扇区数据有效(0x00ff)。这样定义以后,系统便可以在flash写操作异常终止时能够对当时的状态进行及时的保存,以便下次系统开启后能够判断出上次系统中存在的问题并作出相应的处理。
(3)坏块管理
由于flash内部会有坏块,因此flash存储管理系统需要对flash进行坏块管理。本文对坏块的管理分以下两种情况:
①初始坏块处理。flash存储器在使用前可能会有坏块,而且这些坏块是随机分布的。所以,flash文件管理系统在系统执行读写操作之前先建立一个坏块表,然后对flash存储器进行初始化扫描以发现坏块,并将坏块标记为不可用,加入到坏块表中。
②操作过程中坏块处理。在擦除或者编程过程中发生错误时,flash文件管理系统将该块中其它页的数据重新拷贝到一个新的空块中,然后再将该块标记为坏块,加入到坏块表中。在这个处理过程中,由于对flash的擦除或者编程操作都会使得flash存储单元块的内容改变,所以flash文件管理系统一旦发现flash存储器的存储单元块成为坏块后便不再对该块进行擦除或编程操作,以免将坏块标志位数据清除掉,而是将该块标记为坏块,并将其加入坏块表中。
flash文件管理系统在进行上述坏块管理后,坏块单元对用户应用是完全透明的。这大大方便了用户的使用,也达到了车载mp3播放系统的目的。
(4)均衡擦写次数
由于flash有一定的使用寿命,一般可擦除的次数为10~100万次,所以随着使用次数的增加,会有一些单元逐渐变得不稳定或失败。因此,要尽量避免频繁地对同一块地址操作,以免造成局部单元提前损坏;同时,由于擦除操作耗时较多,也应减少擦除操作,应该尽量达到擦写次数均衡。为此,本文设计了flash更新算法和磨损程度检测算法。
flash更新算法是将flash中要更新的数据直接写入一个空块中,降低由于flash先擦除后写入的特性带来的对块的频繁擦除;同时,也提高了flash的使用效率,加快了操作速度。磨损程度检测算法是在对flash进行写入前必须先对flash进行坏块扫描,以确保不会将数据写入坏块从而此起数据的丢失。这样设计也是为了提高车载mp3播放系统的可靠性。
2.2 fat设计
在flash文件管理系统的基础上,还建立了fat文件系统来对文件操作进行管理。将fat文件系统具体分为以下四部分:
(1)fat的引导区
该引导区存放代码所需的信息及最重要的文件系统信息。这些信息包括了flash存储器的类型、容量以及划分成多少个簇;每个簇包含多少扇区、fat表数目、保留扇区数、根目录的首簇号及根目录入口数、版本信息等等。引导扇区是在格式化flash时生成的。
(2)fat的文件分配表
文件分配表存放文件所占用的存储空间族链以及flash存储器的占用和空闲空间的情况,非常重要。为了防止文件分配表损坏而引起文件的丢失,该系统中保存了两个相同的文件分配表fat1和fat2,以改善其安全性。在文件系统的操作中,程序对fat表结构的两个备份进行顺次修改,以此确保flash存储器上总是存有一整套完好的文件分配表。
系统对fat表的访问原理如下:访问文件时先从要目录中找到该文件的目录项,从中读出首簇号。然后,目录中找到该文件的目录项,从中读出首簇号。然后在fat中找到从该首簇号开始的簇链,簇链上的簇号即为文件在逻辑扇区中占用的扇区号链,这样便可以进行数据读写了。
(3)fat的根目录区
fat的根目录区是固定大小的紧跟在fat表后的区域。本文将从fat区之后紧跟的32个扇区作为根目录区,可以保存512个目录项。每个目录项记录了该文件的文件名、文件属性、文件大小、文件创建的日期和时间以及文件在数据区中所占的首簇号,即该文件在fat表中的入口等数据。
(4)fat的数据区
数据区存在文件的数据内容。文件系统对数据区的存储空间是按簇进行划分和管理的。该系统中,定义1cluster=32sector,一个文件总是占用若干个整簇,文件所使用的最后一簇剩余空间就不再使用。
由图1可以看出,该fat文件系统提供文件的格式化,文件的打开、删除、关闭,文件的读写、查找等基本的功能。通过flash文件系统对文件的操作进行管理后,该车载播放系统便可以实现选曲、添加删除歌曲、下载歌曲、音量调节等一系列功能了。
3 应用
通过这样的设计,flash的存储性能有了较大的改善,而且系统的可靠性也很好。即使在flash写操作异常终止频发的最恶劣工作条件下,也不会丢失数据,更不会损坏非常重要的文件分配表结构而造成系统的崩溃;因此,本文所设计的flash文件系统能很好地适合于车载mp3播放系统的应用。

相关