车载MP3中Flash文件系统的设计与应用
摘要:基于Flash存储器的特点,详细介绍适合地车载MP3的Flash文件系统(包括Flash存储管理系统和FAT文件系统)的具体设计。利用Flash文件系统实现对Flash存储器的较好的操作管理功能。
关键词:车载MP3 Flash存储管理系统 FAT 文件系统
引言
目前车载播放器基本上采用的是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存储器内容会有坏块,但是由于每一块的内部结构都是相互独立的,所以只要对其状态加以识别,坏块并不影响系统对有效块的操作。
javascript:window.open(this.src);" style="cursor:pointer;"/>
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的具体定义如下:
逻辑扇区号 | 扇区当前状态 | 坏块信息 | 保留字节 |
第1~3字节 | 第4~5字节 | 第6字节 | 第7~16字节 |
由以上定义可以看到,Spare Area的第4~5字节用于存储扇区当前状态。这样在Flash写操作过程中,如果突然断电,便可以根据此状态进行掉电数据恢复。该系统中设定扇区当前状态有3种:扇区为空(0xfff)、扇区数据无用(0x0000)、扇区数据有效(0x00ff)。这样定义以后,系统便可以在Flash写操作异常终止时能够对当时的状态进行及时的保存,以便下次