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

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

3天内不再提示

FAT32文件系统详细分析 (格式化SD nand/SD卡)

深圳市雷龙发展有限公司 2023-10-18 17:12 次阅读

文章目录

FAT32文件系统详细分析 (续FAT文件系统详解)

1. 前言

2. 格式化SD nand/SD卡

3. FAT32文件系统分析

3.1 保留区分析

3.1.1 BPB(BIOS Parameter Block) 及BS区分析

3.1.2 FSInfo 结构扇区分析

3.1.3 引导扇区剩余扇区

3.1.4 备份引导扇区

3.1.5 保留区剩余区域

3.2 分区偏移及大小计算

3.3 FAT区分析:

3.3.1 FAT1

3.3.2 FAT2

3.4 数据区分析:

4. 总结

1. 前言

续上一篇文章 : FATFS文件系统详解:关于如SD卡、SD nand、spi nor flash等众多存储设备

在上一篇文章,我们已经对FAT文件系统有了一个详细的介绍,但由于FAT文件系统由历史发展,存在FAT12/16/32三种系统,在上一篇文章中采用的是FAT16系统作为实例进行的分析,而FAT32系统存在些许差异,且FAT32文件系统在当前应用广泛,因此特补充此篇博文,完善FAT32的示例分析。

2. 格式化SD nand/SD卡

申请到雷龙发展代理的CS创世 贴片 SD Card (SD NAND) 样品,做出测试,有1Gb,4Gb,32Gb,64Gb的容量可选,我这里申请到的是两片32Gb的芯片和测试板.

get?code=N2ZhM2RmMjNiOGU3ZTA5NDIwMzJlYzM1YjRkMDNmOGYsMTY5NzYxNTczMDAwNQ==

2.1 格式化SD nand / SD卡,强制采用FAT32格式,分配每个簇大小为2048Byte,同时为了避免其他原有数据干扰,我们此处取消快速格式化。

get?code=YmU4MmM3YzhmYThiMmEzY2U5MWFjZDRhMjFkZDQ5ZDUsMTY5NzYxNTczMDAwNQ==

2.2 使用 WinHex 打开分析

3. FAT32文件系统分析

FAT文件系统布局图如下,和FAT16上有些许差别:

get?code=OWRiZGM0MmY5ODBhZGFmZTc4MzFiOTdlOWZlYmE0ZDYsMTY5NzYxNTczMDAwNg==

3.1 保留区分析

保留区分为引导扇区、备份引导扇区及其他字段,具体数据段分析如下。

3.1.1 BPB(BIOS Parameter Block) 及BS区分析

BPB及BS参数内容数据如下:

get?code=NzRjNzQwNzY0OWIyODc4NTQwMjc4NDExZjNmOWEzMGEsMTY5NzYxNTczMDAwNg==
  • EB 58 90 :BS_JmpBoot,跳转指令
  • 4D 53 44 4F 53 35 2E 30:BS_OEMName,MSDOS 5.0,一个名字,指示创建此卷的操作系统,无其他作用`
  • 00 02:BPB_BytsPerSec,扇区大小 512 字节
  • 04:BPB_SecPerClus,每次操作的最小扇区数,簇 Cluster,4 (与格式化时选择的大小匹配 2048 = 512 * 4)
  • 16 11:BPB_RsvdSecCnt,保留区的扇区数,0x1116=4374 (通过此可计算,FAT区起始地址为 4374 * 512 = 0x22 2C00)
  • 02:BPB_NumFATs,FATs的个数,2(一般此值为2,多一个用来做冗余备份,解决系统异常导致第一个损坏时,增大恢复的可能性,表示FAT区有两个FATs备份)
  • 00 00:BPB_RootEntCnt,0,在FAT12/16系统中,此字段表示根目录中32字节目录条目数量,设置此值时需注意对齐,为了最大的兼容性,FAT16系统上此值应设置为512,FAT32系统上此值应设置为0
  • 00 00:BPB_TotSec16,16位大小区域描述FAT卷扇区总数,0。当FAT12/16系统扇区数 ≥0x10000(65536)时,此字段应设置为0,真实值存放在 BPB_TotSec32 字段;对于FAT32系统,此值必须为0。(此处由于我们的总扇区数=118.510241024/512 = 242688 > 65536,所以此字段为0)
  • F8:BPB_Media 媒体类型
  • 00 00:BPB_FATSz16,00,一个FAT占用的扇区数,此字段仅在FAT12/16系统使用;FAT32系统,此字段必须为0,使用BPB_FATSz32字段替代。
  • 3F 00:BPB_SecPerTrk,每个磁道的扇区数,此字段仅与具有几何形状且仅用于 IBM PC 的磁盘 BIOS 的介质相关,不用管。
  • FF 00:BPB_NumHeads,头数量,此字段仅与具有几何形状且仅用于 IBM PC 的磁盘 BIOS 的介质相关,不用管。
  • 00 00 00 00:BPB_HiddSec,0,FAT 卷之前的隐藏物理扇区数(当磁盘被分区之后,当前分区并不一定是从扇区头开始的)
  • 00 08 0F 00:BPB_TotSec32,0x0F0800 = 985088(整个卷空间大小),32位大小区域描述FAT卷扇区总数。 FAT12/16系统,扇区总数小于0x10000时,此字段必须为0,真实值存放在BPB_FATSz16;FAT32系统,此字段一直有效。(481M = 512 * 985088)

以上是FAT12/16/32公共字段,接下来是FAT32独有字段

  • 75 07 00 00:BPB_FATSz32,1909,一个FAT占用的扇区数,FAT区总大小等于 BPB_FATSz?? * BPB_NumFATs 扇区。(由此可计算FAT区总大小:1909 * 2 = 3818扇区 = 3818 * 512Byte = 0x1D D400 Byte)
  • 00 00: BPB_ExtFlags,扩展标识字段,bit7=0,表示所有FAT都是镜像的和活跃的;bit7=1,表示只有bit3-0表示的FAT是有效的。
  • 00 00:BPB_FSVer:FAT32版本,高字节是主版本号,低字节是次版本号。
  • 02 00 00 00:BPB_RootClus,2, 根目录的第一个簇号,此值通常为2,因为前两个簇一般用于保留。
  • 01 00:BPB_FSInfo,1,FSInfo结构扇区与FAT32卷顶部的偏移扇区值。此值通常为1,因为其通常位于引导扇区旁边。
  • 06 00:BPB_BkBootSec,6, 备份引导扇区与FAT32卷顶部的偏移扇区值。此值通常为6,考虑最大的兼容性,此值不建议为其他值。
  • 00 00 00 00 00 00 00 00 00 00 00 00:BPB_Reserved,0,保留
  • 80:BS_DrvNum,IBM PC 的磁盘 BIOS 使用的驱动器号,00h代表软盘,80h代表固定磁盘
  • 00:BS_Reserved,保留字段,0
  • 29:BS_BootSig,扩展引导签名,表示以下存在三个字段
  • 30 D1 B5 78:BS_VolID,与 BS_VolLab 一起构成卷序列号,一般在格式化的时候结合时间生成
  • 4E 4F 20 4E 41 4D 45 20 20 20 20:(解析为:"NO NAME “),BS_VolLab,11byte卷标,当卷标不存在时,此值应设置为"NO NAME”
  • 46 41 54 33 32 20 20 20:BS_FilSysType,始终为"FAT32 ",对FAT类型的确定没有任何影响。
  • 33 C9 ... B9 01 00 00:BS_BootCode32,引导启动程序,与平台有关,不使用时填充为0
  • BS_BootSign:0xAA55,引导签名,指示这是一个有效的引导扇区当扇区大小大于512字节时,剩余的字段应全部使用0x0填充。

3.1.2 FSInfo 结构扇区分析

FSInfo 数据结构为FAT32系统所特有,其目的是记录FAT32系统上剩余的簇数量以及下一个空闲簇数据;以避免扫描整个磁盘搜索导致的时间浪费。

FSInfo数据偏移可从引导扇区内的 BPB_FSInfo 参数获取,此处为 1,因此 FSInfo 数据偏移为1个扇区,对应512Byte,0x200地址处。FSInfo数据结构如下:

get?code=NjZjYmE2ZjM4NTBkYjRhYTc0MzMzNTQwZWZkYTg3ZTgsMTY5NzYxNTczMDAwNg==

内容如下:

get?code=MDU2YmQyMzAxOTQ2OWVmODU0ZjMwZDE1YWFhODUzMzMsMTY5NzYxNTczMDAwNg==

3.1.3 引导扇区剩余扇区

FAT32引导扇区总共有三个512Byte的扇区构成。BPB、BS、FSInfo字段已使用了2个扇区,还剩有一个扇区未使用,字段为0,如下图所示,需要注意的是,此扇区在偏移值510处依旧存在尾部签名0xAA55。

get?code=OTlhODc0MTJkMDhhZWYzZDFlNzkzYTcxNzk0NjQyODgsMTY5NzYxNTczMDAwNg==

引导扇区剩余字段,为非有效字段,采用0x00填充。

3.1.4 备份引导扇区

相比FAT12/16,FAT32系统上存在引导扇区的备份,此块区域偏移参考引导扇区内BPB_BkBootSec字段,当前引导扇区内此参数值为6, 因此在当前文件系统内,备份引导扇区的偏移为 6号扇区,对应偏移地址为 BPB_BkBootSec * BPB_BytsPerSec = 6 * 512Byte = 3072Byte = 0xC00

get?code=NjkwNzlhMWQzN2I3ZmQ4N2IwNWMyNmQwMDU0OWI3NGYsMTY5NzYxNTczMDAwNg==get?code=NGMxZDA2MzA2NWI5NmFhNDk2NjczZDdiYTc2N2RjNTYsMTY5NzYxNTczMDAwNg==

3.1.5 保留区剩余区域

在FAT32系统中,保留区除了 BPB区域、FSInfo区域以及这两个区域的备份区域外,还有一部分区域,目前我没找到此区域的作用,我理解为此块区域是作为某种引导程序,数据内容如下:

get?code=MThmNjhkMGYyZTIxNzIyYmU0NTc2ZTM5Y2Q5ZWFhYjQsMTY5NzYxNTczMDAwNg==

关于此块区域,欢迎大家在评论区讨论!

此外,还有一处区域的存在也欢迎大家讨论,即FSInfo扇区后面的一个扇区,只有看到尾部签名,其他数据为空,目前也未找到此处有关说明,后续清楚后会在此补充,亦欢迎大家在评论区讨论!

get?code=ZmNiY2NkMGYwNDg0YTQ5YzQyZWU5YzA5Y2M2MTcwZmYsMTY5NzYxNTczMDAwNg==

3.2 分区偏移及大小计算

知道BPB参数内容之后,便可以进行分区偏移及大小计算了!

各分区偏移地址及大小如下:

get?code=MjdkY2FkZjljZjkyYjA0NzRhMThiZDlmNTY4MGZjN2QsMTY5NzYxNTczMDAwNg==

关于FAT区,通常存在一个以上的FAT,如此处所格式化的sd卡便存在两个FAT,对应的偏移地址和大小如下:

get?code=MGI3ZTQyY2E3YmU5NDA5OGU1MTM4MDJkMTIzYjA2MGEsMTY5NzYxNTczMDAwNg==

注意:在FAT32系统中,根目录区不存在,但依旧存在根目录,不过是根目录作为数据区的一部分!

3.3 FAT区分析:

FAT32系统与FAT12/16系统在FAT区数据一个显著差别是:FAT32每条FAT条目占32bit,FAT16占16个bit,FAT12占12bit。关于此部分更详细描述,可参考上一篇:FAT文件系统详解(点击跳转!) 的 4.3 章节!

3.3.1 FAT1

FAT1偏移地址:0x22 2C00

数据内容如下:

get?code=MTY1M2MzNDliNGI3OWY5NDA1ZjE0NjU2ZDZiYjhkMjYsMTY5NzYxNTczMDAwNg==

3.3.2 FAT2

FAT2是FAT1的备份,偏移地址:0x31 1600
数据内容与FAT1一致,如下:

get?code=ZDViY2EyNDFjOTNkZTc4ZmQ1OGNlNzgxMWJkNDY5NzYsMTY5NzYxNTczMDAwNg==

3.4 数据区分析:

偏移地址:0x40 0000
由参数BPB_RootClus可知,数据区第一个簇是2号簇。

打开数据区的第一个簇,里面存放的内容便是根目录的内容!这也就是为什么FAT32没有根目录区,但依旧存在根目录的实现方式。数据内容如下:

get?code=NDUzYzA1ODgyYTMzN2RmNTUwNjU2NzAyM2QyOGNiNjgsMTY5NzYxNTczMDAwNg==

之后我们看到3号簇的内容:
数据字段如下图所示,由于在上一篇博文中已对长短文件名每个字段进行过细致分析,此处不再做过度分析,仅抽取关键字段进行分析,如下图所示:

get?code=Njg3MGE2ODc4MDg0Y2Q5Yjk0OWI0OGFhMTkxOTA5NjYsMTY5NzYxNTczMDAwNg==

之后切换到4号簇和5号簇,可以查看到对应数据:

get?code=NmUzZmI3ZTZkZDQwOWQxOTkyYjQ0MDVkYzEzZGRiOTUsMTY5NzYxNTczMDAwNg==get?code=MWNkY2NiN2EwMWYzMWQ2MzRkMmFhZWQxMTEyNTdkYmUsMTY5NzYxNTczMDAwNg==

从6号簇开始便没有在使用,均为空闲簇,对应上 FSInfo 结构内 FSI_Nxt_Free 字段的内容。

4. 总结

相比FAT16系统,FAT32文件系统在保留区有了更多的设计:

1)增加了引导扇区的备份,异常掉电等情况下可恢复性更强;

2)增加了FSInfo结构,对于大容量flash访问将更加高效;

此外FAT32系统取消了根目录区,将根目录移至数据区,根目录与普通目录本来就没有什么区别,确实也不用单独分一个区存放,提高了一致性。

关于数据的存储思想,依旧保持不变:FAT区内的FAT条目通过簇链记录扇区使用情况及文件占用的扇区情况;数据区内目录和文件都作为文件,通过目录这一类特殊文件,描述文件属性以及实际文件内容存放的簇的方式,将整个文件管理起来。

综上,便是FAT32格式文件系统的详细解析,欢迎大家评论区进行积极讨论与反馈!!!

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

    关注

    16

    文章

    1677

    浏览量

    135999
  • SD卡
    +关注

    关注

    2

    文章

    559

    浏览量

    63788
  • FAT32
    +关注

    关注

    0

    文章

    32

    浏览量

    13754
  • TF卡
    +关注

    关注

    2

    文章

    77

    浏览量

    12135
收藏 人收藏

    评论

    相关推荐

    带你了解什么是SD NAND存储芯片

    XST_FAILURE; } return XST_SUCCESS; }   以上是本次实验使用到的部分代码,里面包含了外设,标准的打印函数和SD控制器的功能,在程序中先进行格式化S
    发表于 11-13 15:20

    贴片式SD功能介绍【MK SD NAND

    技术与传统SD不同,SD NAND使用贴装式封装,允许直接焊接至电子设备的PCB上,提供一种内置的存储功能。
    的头像 发表于 07-05 17:03 686次阅读
    贴片式<b class='flag-5'>SD</b><b class='flag-5'>卡</b>功能介绍【MK <b class='flag-5'>SD</b> <b class='flag-5'>NAND</b>】

    使用wear_level api来安装fat文件系统,如何格式化FAT文件系统

    后,将导致无法再向该文件地址中写新的文件,也就是无法操作该文件系统。所以我想格式化这个文件系统,可是找不到接口去做这个操作,请各位指教!
    发表于 06-26 06:51

    SD、MicroSDSD NAND的性能与应用对比

    在当前丰富多元的存储解决方案领域,SD、MicroSD以及SD NAND凭借其各自的独特优势和特定的使用情景,赢得了市场的广泛认可。每种
    的头像 发表于 06-14 15:48 762次阅读
    <b class='flag-5'>SD</b><b class='flag-5'>卡</b>、MicroSD<b class='flag-5'>卡</b>和<b class='flag-5'>SD</b> <b class='flag-5'>NAND</b>的性能与应用对比

    SD NAND异常问题案例——文件系统

    近期,有用户在使用SD NAND中出现芯片出现读写异常现象,我们工程师对出现异常的3片芯片进行分析,发现3片均能正常读卡,里面的文件大多数可以正常读取,个别显示
    的头像 发表于 06-14 09:48 446次阅读
    <b class='flag-5'>SD</b> <b class='flag-5'>NAND</b>异常问题案例——<b class='flag-5'>文件系统</b>篇

    SD NAND文件系统:技术解析与应用指南

    MK米客方德的SD NAND是一种使用NAND闪存技术的贴片式TF,因起耐用性和较小的体积而受到广泛欢迎。SD
    的头像 发表于 06-07 14:45 379次阅读
    <b class='flag-5'>SD</b> <b class='flag-5'>NAND</b>与<b class='flag-5'>文件系统</b>:技术解析与应用指南

    Micro SD短路原因分析及预防措施

    Micro SD作为常见的存储设备,被广泛应用于智能手机、数码相机、无人机等设备中。然而,Micro SD短路问题时有发生,这不仅影响了用户的使用体验,还可能导致数据丢失。本文将
    的头像 发表于 05-31 11:13 851次阅读
    Micro <b class='flag-5'>SD</b><b class='flag-5'>卡</b>短路原因<b class='flag-5'>分析</b>及预防措施

    CubeMx可以生成FAT32文件系统吗?

    大家好!MCU型号:STM32L476R 我测试发现 CubeMX 生成的文件系统FAT16 的。请教一下,CubeMx 可以生成 FAT32文件系统吗?
    发表于 04-19 07:11

    如何将SD众多文件打包成一个.img文件方便一键烧写呢?

    手动分成3分区(fat32、raw 和ext3),然后将preloader 、uboot、kernel、rootfile、rbf、dtb、 uboot.scr 文件拷贝到不同的分区,最后插到DE10-Nano 开发板进行启动。
    的头像 发表于 04-16 16:28 1284次阅读
    如何将<b class='flag-5'>SD</b><b class='flag-5'>卡</b>众多<b class='flag-5'>文件</b>打包成一个.img<b class='flag-5'>文件</b>方便一键烧写呢?

    SD卡座的引脚定义详细分析

    SD卡座是SD与主板之间的接口,其主要作用是传输数据和供电。SD卡座通常有9个引脚,关于SD卡座的引脚定义,不同引脚定义了代表着不同的功能
    的头像 发表于 02-27 15:33 4096次阅读
    <b class='flag-5'>SD</b>卡座的引脚定义<b class='flag-5'>详细分析</b>

    ELF 1技术贴|如何支持exFAT和NTFS格式

    Linux操作系统通常能够自动识别并挂载FAT32格式的磁盘,然而由于FAT32文件系统的限制,单个文件
    的头像 发表于 01-31 16:37 656次阅读
    ELF 1技术贴|如何支持exFAT和NTFS<b class='flag-5'>格式</b>

    stm32 CubeMx 怎么实现SD/sd nand FATFS读写测试

    IO口作为SD_NAND的插入检测引脚(没有检测脚的也选上不然在生成代码的时候会有警告,看着很不舒服,我这里选的是 PE4 引脚)   4、配置SDIO的DMA   5、添加文件系统  6、配置
    发表于 01-09 17:37

    什么是SD NAND存储芯片? SD NAND与TF的区别

    什么是SD NAND?它俗称贴片式T,贴片式TF,贴片式SD,贴片式内存
    的头像 发表于 01-06 14:35 1660次阅读
    什么是<b class='flag-5'>SD</b> <b class='flag-5'>NAND</b>存储芯片? <b class='flag-5'>SD</b> <b class='flag-5'>NAND</b>与TF<b class='flag-5'>卡</b>的区别

    基于RT-Thread快速上手SD NAND 虚拟文件系统

    操作系统,更是不需要编写任何复杂的驱动代码就可以SD NAND读写操作。   (文末提供,STM32驱动代码下载连接,需要可以自行下载)   将SD
    发表于 12-15 17:29

    服务器数据恢复—ocfs2文件系统被误格式化为Ext4文件系统的数据恢复案例

    由于工作人员的误操作,将Ext4文件系统误装入到存储中Ocfs2文件系统数据卷上,导致原Ocfs2文件系统格式化为Ext4文件系统。 由
    的头像 发表于 12-04 10:49 416次阅读
    服务器数据恢复—ocfs2<b class='flag-5'>文件系统</b>被误<b class='flag-5'>格式化</b>为Ext4<b class='flag-5'>文件系统</b>的数据恢复案例