0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FATFS文件系统详解(下)

冬至子 来源:jaffer 作者:jaffer 2023-09-14 17:21 次阅读

5.分区分析

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

1.jpg

5.1 保留分区分析

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

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

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

1.jpg

5.2 FAT区分析

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

FAT1 数据:

1.jpg

FAT2 数据如下:

1.jpg

==由于此处采用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==,数据内容如下:

1.jpg

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

1.jpg

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

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

5.4 数据区分析

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

1.jpg

对应数据字段分析如下:

1.jpg

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

1.jpg

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

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

1.jpg

5.5 新增文件测试

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

FAT区变化如下:

1.jpg

根目录区变化如下:

1.jpg

1.jpg

1.jpg

2.jpg

3.jpg

1.jpg

6.总结

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

FAT文件系统分为四个区:

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

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

    关注

    2

    文章

    565

    浏览量

    63899
  • Flash存储
    +关注

    关注

    0

    文章

    38

    浏览量

    8294
  • FatFS文件系统

    关注

    0

    文章

    12

    浏览量

    7530
收藏 人收藏

    评论

    相关推荐

    FATFS文件系统移植

    FatFs 是用于小型嵌入式系统的通用 FAT/exFAT 文件系统模块。FatFs 模块是按照 ANSI C (C89) 编写的,与磁盘 I/O 层完全分离。因此它独立于平台。它可以
    的头像 发表于 06-06 09:28 4732次阅读
    <b class='flag-5'>FATFS</b><b class='flag-5'>文件系统</b>移植

    STM32CubeMx入门教程(10):Fatfs文件系统的应用

    导语"fatfs是一个小型的文件系统,在小型的嵌入式系统中使用非常的广泛,STM32CubeMx自带该文件系统,我们通过简单的配置就能够使用,将前面的SD卡的读写操作进行修改,将
    发表于 07-12 11:39 5410次阅读
    STM32CubeMx入门教程(10):<b class='flag-5'>Fatfs</b><b class='flag-5'>文件系统</b>的应用

    FATFS文件系统移植

    这是本人,整理的FATFS文件系统移植资料,很少的一部分,希望大家把自己搜到的比较好的资料,分享一,本人正在学习fatfs文件系统,希望和
    发表于 09-11 16:05

    FATFS文件系统简介

    FATFS文件系统1.FATFS文件系统简介2. 硬件设计3. 软件设计3.1 STM32CubeMX设置3.2 MDK-ARM编程4. 下载验证
    发表于 08-10 08:14

    FatFs文件系统的原理是什么?如何对FATFS进行移植?

    FatFs文件系统的原理是什么?FatFs文件系统的移植方法是什么?如何实现eMMC卡中文件的读写及其它操作?
    发表于 11-25 07:52

    stm32+sdio+fatfs文件系统_源码分析

    stm32+sdio+fatfs文件系统介绍,通俗易懂。
    发表于 11-06 09:52 25次下载

    FatFs文件系统使用

    STM系列FatFs文件系统使用文件,希望对大家有帮助。
    发表于 11-06 18:10 8次下载

    基于SD卡的FATFS文件系统的研究与应用_崔鹏伟

    基于SD卡的FATFS文件系统的研究与应用_崔鹏伟。
    发表于 04-14 16:46 40次下载

    《Linux设备驱动开发详解》第5章、Linux文件系统与设备文件系统

    《Linux设备驱动开发详解》第5章、Linux文件系统与设备文件系统
    发表于 10-27 14:13 0次下载
    《Linux设备驱动开发<b class='flag-5'>详解</b>》第5章、Linux<b class='flag-5'>文件系统</b>与设备<b class='flag-5'>文件系统</b>

    CH579 SPIFLASH W25Q64 FATFS文件系统

    CH579 SPIFLASH W25Q64 FATFS文件系统(arm嵌入式开发平台PB)-W25Qxx的SPIFlash挂载文件系统,实现挂载fatfs
    发表于 08-04 11:44 78次下载
    CH579 SPIFLASH W25Q64 <b class='flag-5'>FATFS</b><b class='flag-5'>文件系统</b>

    Fatfs文件系统的移植)

    Fatfs文件系统的移植)一、文件系统介绍二、移植条件、说明1、FatFs模块在可移植性方面设定了以下条件:2、数据类型说明3、系统框架三
    发表于 11-15 18:51 22次下载
    <b class='flag-5'>Fatfs</b>(<b class='flag-5'>文件系统</b>的移植)

    FATFS文件系统详解

    采用的独特的文件系统结构CDFS:CDFS是大部分的光盘的文件系统exFATFATFS文件系统FATFS是一个完全免费开源的FAT 文件系统
    发表于 11-29 09:51 29次下载
    <b class='flag-5'>FATFS</b><b class='flag-5'>文件系统</b><b class='flag-5'>详解</b>

    文件系统FatFs文件系统在嵌入式芯片LPC18XX上的移植

    文件系统FatFs文件系统在嵌入式芯片LPC18XX上的移植
    发表于 12-04 10:51 12次下载
    【<b class='flag-5'>文件系统</b>】<b class='flag-5'>FatFs</b><b class='flag-5'>文件系统</b>在嵌入式芯片LPC18XX上的移植

    FATFS文件系统原版文件下载

    FATFS文件系统原版文件下载
    发表于 06-25 09:02 0次下载

    文件系统FatFs的移植

    FATFS是一个完全免费开源的FAT文件系统模块,专门为小型的嵌入式系统而设计。它完全用标准C语言编写,所以具有良好的硬件平台独立性,甚至可以移植到8位的单片机上而只需做简单的修改。
    的头像 发表于 03-01 14:38 1956次阅读
    <b class='flag-5'>文件系统</b><b class='flag-5'>FatFs</b>的移植