FATFS文件系统详解(下)

电子说

1.2w人已加入

描述

5.分区分析

继续回顾我们一开始的这张布局图

SD卡

5.1 保留分区分析

保留分区为第一个分区,其中引导扇区位于保留分区的第一个扇区。

根据 4.3 章节计算结果可知,保留分区起始地址为 0x00,大小 0xC00

保留分区数据如下,保留分区内最重要的内容即为引导扇区,除引导扇区外,其他剩余空间全部保留,采用0x00覆盖。关于引导扇区已在 4.2 章节详细分析,此处不再做介绍。

SD卡

5.2 FAT区分析

根据 4.3 章节描述,FAT区的起始地址为 ==0xC00==,大小为 ==0x3B400==,此外存在两个FAT区,FAT1和FAT2,起始地址分别为:==0xC00==、==0x1E600==,对应地址数据如下:

FAT1 数据:

SD卡

FAT2 数据如下:

SD卡

==由于此处采用FAT16格式,所以每个FAT条目占据两个字节!==

根据上述数据进行分析:

确认 FAT2 为 FAT1 的备份;
存在5个FAT条目其中 FAT[0] 和 FAT[1] 为保留条目,FAT[0] 的内容与 BPB_Media 媒体类型字段一致,FAT[1] 用来记录错误历史记录 (详见 4.5 章节描述)
==根据4.5章节描述,FAT2对应数据区的第一个簇==,又FAT[2]、FAT[3]、FAT[4] 数据均为 0xFF,表明存在三个文件,且每个文件的大小小于等于一个簇的空间;且分别存放在数据区第1到第3个簇上!
此处可能大家会由疑问,刚刚格式化的sd卡为什么会存在文件内,其实这个是系统文件,格式化后自带的,默认是隐藏的,只有使用winhex才能看到,也就是对应的System Volume Information文件夹。

5.3 根目录区分析

注意,根目录区只有 FAT12 / FAT16 系统上存在,在FAT32系统上不存在此区域。

根目录区用来记录根目录下的文件内容,根据 4.3 章节计算可知,根目录区起始地址为:==0x3C000==,大小为==0x4000==,数据内容如下:

SD卡

以下是对数据字段进行分析后的内容,如下图所示:

SD卡

格式化之后,默认会生成一个System Volume Infomation的系统文件夹,同时此文件夹是根目录下唯一的一个文件,因此在根目录的数据如上图所示。

此文件夹为目录属性,是隐藏的系统目录
长文件名为System Volume Information,短文件名为SYSTEM~1
==此目录指向存放的数据在2号簇(对应数据区第一个簇),文件大小字段,由于此文件为目录属性,此字段无意义,因此强制为0==
至此,根目录区分析完了,同时根目录区的 System Volume Information文件指向数据区第一个簇(2号簇),接下来我们便进入数据区进行分析。

5.4 数据区分析

根据 4.3 章节计算可知,数据区起始地址为:0x40000,大小为242176 * 512 = 0x764 0000,数据内容如下:

SD卡

对应数据字段分析如下:

SD卡

System Volume Information 目录下存在两个文件,分别是IndexerVolumeGuid 和 WPSettings.dat。根据上述分析可知:

IndexerVolumeGuid文件的数据存放在 FAT[3],3号簇上,即数据区的第3个簇(数据区的第1个簇为2号簇);
WPSettings.dat 文件的数据存放在 FAT[4],4号簇上,即数据区的第2个簇(数据区的第1个簇为2号簇);
首先,我们跳转到4号簇上查看IndexerVolumeGuid的数据,对应地址计算方式为:
FirstSectorofCluster = DataStartSector + (N - 2) BPB_SecPerClus = 512 + (4 - 2) 4
= 520;

对应地址为: FirstSectorofCluster BPB_BytsPerSec = 520 512 = 0x0004 1000

SD卡

接着跳转到3号簇上查看WPSettings.dat的数据,对应地址计算方式为:
FirstSectorofCluster = DataStartSector + (N - 2) BPB_SecPerClus = 512 + (3 - 2) 4
= 516;

对应地址为: FirstSectorofCluster BPB_BytsPerSec = 520 512 = 0x0004 0800

SD卡

5.5 新增文件测试

在根目录下新增 test 目录,使用winhex更新磁盘数据,观察各数据区变化
保留区无变化

FAT区变化如下:

SD卡

根目录区变化如下:

SD卡

SD卡

SD卡

SD卡

SD卡

SD卡

6.总结

以上便是关于FAT文件系统的全部分析了,通过上述分析,外加新增文件辅助理解,对于文件在FAT文件系统下如何管理、存储,相信已经有了非常深入的了解。

FAT文件系统分为四个区:

保留区最重要的是里面包含引导扇区,引导扇区内存放着BIOS参数信息,通过此参数可以知道FAT文件系统的flash布局,以及flash大小,fat块大小、簇大小等关键信息;
FAT区,记录了文件所占用簇的情况,以及对于文件大小大于一个簇的文件,在FAT区内形成簇链,记录文件由哪几个簇组成
根目录区,只有FAT12/16系统所有,记录了根目录下的文件/目录条目信息
数据区,记录数据分为两个部分,第一部分为目录信息,除根目录外,每个文件夹需要占据一个及以上的簇描述对应目录下的文件情况;第二部分为具体文件数据。两部分数据通过短文件名SFN字段进行关联!

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分