基于FAT32文件系统的SD卡数据存储结构研究

2012-11-21 09:51李文华徐国洪胡华文
长江大学学报(自科版) 2012年16期
关键词:文件名扇区分配

李文华,徐国洪,胡华文

(仙桃职业学院机械电子工程学院,湖北 仙桃 433000)

基于FAT32文件系统的SD卡数据存储结构研究

李文华,徐国洪,胡华文

(仙桃职业学院机械电子工程学院,湖北 仙桃 433000)

SD卡是嵌入系统中首选的外部数据存储器,为使嵌入式系统中存储在SD卡上的数据可以被计算机识别和处理,详细讨论了基于FAT32文件系统的SD卡中主引导记录区、引导扇区、文件分配表区、文件目录表区和文件数据区的数据存储结构,并给出了各区域的访问方法。

SD卡;FAT32;文件系统;数据存储

SD卡是一种外部存储器,具有体积小、容量大、功耗低、非易失等特点,广泛地应用于嵌入式系统中,作海量数据存储之用。运用SD卡存储数据时,一般是采取基于文件系统的方式存储数据,以便保存在SD卡中的数据可被计算机直接访问和处理,高容量的SD卡一般选用FAT32文件系统。下面,笔者详细地讨论基于FAT32文件系统的SD卡数据存储结构。

1 SD卡数据存储结构

图1 SD卡数据存储结构

用FAT32格式对SD卡格式化后,SD卡被划分为主引导记录区、隐藏扇区、引导扇区、保留扇区、文件分配表(FAT)区和数据区6部分,这6部分的起始位置固定。其中,数据区又分为文件目录表(FDT)区和文件的数据区2部分,这2部分分散地分布在数据区中,它们的起始位置随着文件的建立而随机分配。基于FAT32文件系统的SD卡数据存储结构如图1所示。其中,主引导记录区、隐藏扇区、引导扇区、保留扇区这4个区域是以扇区为单位进行分配的,文件分配表区、文件目录表区、文件的数据区这3个区域是以簇为单位进行分配的,1簇由若干个扇区组成,其扇区数由引导扇区中偏移地址0DH单元的内容给定。

基于FAT32文件系统的SD卡中,文件的数据区用来存放文件的内容,文件的内容是以簇为单位按链式结构存放的;文件目录表(FDT)用来存放文件的文件名、文件大小、文件内容存放的起始位置(起始簇的簇号)等信息;文件分配表(FAT)用来存放文件所分配簇的簇号。SD卡中,引导扇区中记录了FAT的起始位置、FAT的大小和个数、SD卡中的簇的大小、数据区的起始位置等FAT32文件系统的访问信息;主引导记录区中保存着引导扇区的起始位置和SD卡的容量大小。

2 SD卡中FAT32文件系统的访问参数

FAT32文件系统的访问参数保存在主引导记录区和引导扇区中,这2个区域的大小都是1扇区(512字节)。其中主引导记录区是SD卡的0扇区,其物理扇区地址为0扇区,共有11个字节与文件系统的访问相关,其作用如表1所示。引导扇区也叫逻辑0扇区,其扇区地址存放在物理0扇区的1C6H~1C9H单元中。引导扇区中,FAT32文件系统的配置信息如表2所示。

表1 主引导记录区中与访问文件系统相关的信息

表2 引导扇区中FAT32文件系统的配置信息

3 文件分配表的结构

文件分配表(FAT)的功能是保存每个文件所分配簇的簇号,FAT32文件系统的簇号为32位的二进制数,需用4个字节的存储单元保存。每个簇号对应文件分配表上的一个点,第i簇(i=0、1、2、…)在文件分配表上的偏移地址为4i、4i+1、4i+2、4i+3,这4个字节单元存储的是文件的下一簇的簇号(这4个单元的内容叫簇项值)。其中,文件最后一个簇号的簇项值是文件结束标记0FFFFFFFH,文件分配表的存储结构如图2所示。SD卡的第0簇、第1簇为保留簇(文件分配表占用了这2个簇),从第2簇开始的簇为可用簇。第0簇的簇项值固定为0FFFFFF8H,第1簇的簇项值固定为0FFFFFFFH。

图2 文件分配表的存储结构

一个文件的所有簇的簇号按其先后顺序排列就构成了该文件的簇号链。设某个文件的内容依次存放在第i簇、第j簇、第k簇、…、第m簇中(第i簇为文件的起始簇,第m簇为文件的最后一簇,文件的簇号链为i→j→k→……→m),文件的簇号链存储方法是:起始簇号i保存在文件目录表(FDT)中,其他簇号保存在文件分配表中。在文件分配表中,第i簇的地址单元(4i~4i+3)中保存文件的第2簇的簇号j,j簇的地址单元(4j~4j+3)中保存文件的第3簇的簇号k,…,第m簇的地址单元(4m~4m+3)中保存文件的结束标志0FFFFFFFH,如图3所示。

图3 文件的簇号链

4 文件目录表的结构

文件目录表位于数据区中,分为根目录表和子目录表2类,它们的结构相同,都是由若干个目录登记项组成,每个目录登记项对应一个文件或者目录,用来保存文件或者目录的名字以信文件内容或者子目录表存放的起始位置等信息。FAT32文件系统的目录登记项分为短文件名目录登记项和长文件名目录登记项2种,文件目录表的结构如图4所示。

图4 文件目录表的结构

短文件名目录登记项由32字节组成,这32字节的定义如图4右边部分所示。

长文件名目录登记项由1个短文件名目录登记项和若干个目录碎片登记项组成。其中,短文件名目录登记项存放文件名开始几个字符的ASCII码(若文件名为汉字,则是存放汉字的内码,下同。)、文件的扩展名、属性、创建时间和日期、起始簇、文件大小等信息。目录碎片登记项用来存放长文件名(含文件的主文件名、园点、文件扩展名,下同)字符的Unicode编码以及目录碎片的顺序号,每个目录碎片登记项32个字节,存放13个Unicode编码。目录碎片登记项的定义如图4左边部分所示。

目录碎片登记项的个数与长文件名的字符数相关。设长文件名的字符数为m(每个汉字计1个字符,若无扩展名,则不计园点),则目录碎片登记项的个数为:

n个目录碎片登记项按照第n-1、n-2、…、1、0个目录碎片登记项的顺序依次连续地存放长文件名字符的Unicode编码。第n-1个目录碎片登记项存放的是最开始的13字符的Unicode编码,第0个目录碎片登记项中存放的是最后m%13个字符的Unicode编码。第0个目录碎片登记项的00H(碎片顺序号)单元的内容为40H+n。第i个(i≠0)目录碎片登记项的00H单元的内容为目录碎片登记项的编号i。

图5 目录树型结构

FAT32文件系统的目录呈树型结构,如图5所示。目录表中,子目录登记项的簇项域的内容为子目录表的簇号。在子目录表中,第1个目录登记项为当前目录登记项,其名字域的内容为字符“·”,簇号域的内容是当前目录的簇号;第2个目录登记项为当前目录的父目录登记项,其名字域的内容为字符“…”,簇号域的内容是父目录的簇号。子目录登记项、父目录登记项用于目录的检索和回溯。

5 SD卡中各区域的扇区地址的获取方法

根据图1所示的SD卡数据存储结构图和表1、表2中的参数,可以计算出SD卡中各区域的扇区地址。主引导记录区的扇区地址固定为0000H,读主引导记录区中偏移地址1C6H~1C9H单元的内容就可以获得引导扇区的地址BootSector。读引导扇区的内容,就可以获得表2中各参数,并计算出文件分配表1的扇区地址、根目录的扇区地址、数据区任意簇的扇区地址。

文件分配表1的扇区地址SectorOfFAT1的计算方法如下:

SectorOfFAT1=BootSector+ReservedSectors

根目录的扇区地址SectorOfRootDir的计算方法如下:

数据区中第n簇的扇区地址SectorOfDataClustor的计算方法如下:

6 结 语

计算机是以文件的形式访问存储介质上的数据的,掌握基于FAT32文件系统的SD卡数据存储结构,有利于实现在嵌入式系统中按文件系统的格式要求在SD卡中存储数据,从而实现在嵌入式系统中保存在SD卡上的数据可被计算机直接访问和处理。

[1]吴万钊,黄占江,宋涵.计算机病毒防治大全[M].北京:学苑出版社,1994.

[2]戴士剑,涂彦辉.数据恢复技术[M].第2版.北京: 电子工业出版社,2007.

[3]刘伟.数据恢复技术深度揭秘[M].北京:电子工业出版社,2010.

[编辑] 洪云飞

10.3969/j.issn.1673-1409(N).2012.06.034

TP393

A

1673-1409(2012)06-N0102-03

猜你喜欢
文件名扇区分配
分阶段调整增加扇区通行能力策略
应答器THR和TFFR分配及SIL等级探讨
右键调用多重更名更方便
Excel轻松提取文件名
遗产的分配
一种分配十分不均的财富
把我的秘密藏起来
U盘故障排除经验谈
基于贝叶斯估计的短时空域扇区交通流量预测
重建分区表与FAT32_DBR研究与实现