当前位置: 首页 > news >正文

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

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

目录

  • FAT32 文件系统详细分析 (格式化 SD nand/SD 卡)
    • 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.4 数据区分析:
    • 4.总结

1. 前言

文件存储到存储芯片中,有 2 种形式。

1, 直接按照地址的方式进行存储。

2, 以文件系统的形式进行存储。

直接按照地址的方式进行存储,可以通过建立一张索引表,知道哪些地址存储哪些数据,或者按照固定的方式,进行顺序的存储。这种写入的方式好处是不需要复杂的文件系统管理,但是不方便数据的交互。因为这张索引表都是自己定义的,不是通用的标准。

文件系统形式进行存储,就会有一套标准,大家都按照这个标准来,不同的设备都可以对于这个数据进行读写操作。通过文件系统的方式来存储数据,好处是方便了数据的交互,但是也会提高复杂程度。并且如果数据是完整的保存到存储单元中,但是描述这个文件的相关文件参数损坏了,这个文件也就无法正确读取到了。每一个数据,都有描述文件起始地址,文件大小,格式等等很多参数,也也就提高了文件出错的概率。 文件系统的种类也有很多,比如 FAT,exfat,NTFS,ext4 等等。
今天我们就先了解下 fat32 的文件系统。

2.格式化 SD nand/SD 卡

申请到雷龙发展代理的 CS 创世 贴片 SD Card (SD NAND) 样品,做出测试,分享一下,该公司 SD NAND 二代产品介绍可以参考如下地址http://longsto.com/product/list-39.html,有1Gb,4Gb,32Gb,64Gb的容量可选,我这里申请到的是两片32Gb的芯片和测试板.

image-20240910121111975

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

image-20240910121127205

2.2 使用 WinHex 打开分析

3.FAT32 文件系统分析

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

3.1 保留区分析

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

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

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

image-20240910121203005

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:BPBFATSz32,1909,一个 FAT 占用的扇区数,FAT 区总大小等于 BPB_FATSz?? * BPBNumFATs 扇区。(由此可计算 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 数据结构如下:

image-20240910121423476

内容如下:

image-20240910121434881

3.1.3 引导扇区剩余扇区

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

image-20240910121549200

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

3.1.4 备份引导扇区

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

image-20240910121601476

image-20240910121615836

3.1.5 保留区剩余区域

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

image-20240910121627412

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

image-20240910121646715

3.2 分区偏移及大小计算

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

image-20240910121659538

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

image-20240910121707342

注意:在 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
数据内容如下:

image-20240910121722036

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

image-20240910121735133

3.4 数据区分析:

偏移地址:0x40 0000
由参数 BPB_RootClus 可知,数据区第一个簇是 2 号簇。
打开数据区的第一个簇,里面存放的内容便是根目录的内容!这也就是为什么 FAT32 没有根目录区,但依旧存在根目录的实现方式。数据内容如下:

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

image-20240910121804847

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

image-20240910121809787

image-20240910121816191

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

4.总结

相比 FAT16 系统,FAT32 文件系统在保留区有了更多的设计:
1)增加了引导扇区的备份,异常掉电等情况下可恢复性更强;
2)增加了 FSInfo 结构,对于大容量 flash 访问将更加高效;

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

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

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

亲爱的卡友们,欢迎光临雷龙官网,如果看完文章之后还是有疑惑或不懂的地方,请联系我们,自己去理解或猜答案是件很累的事,请把最麻烦的事情交给我们来处理,术业有专攻,闻道有先后,深圳市雷龙发展专注存储行业 13 年,专业提供小容量存储解决方案。

相关文章:

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

FAT32 文件系统详细分析 (格式化 SD nand/SD 卡) 目录 FAT32 文件系统详细分析 (格式化 SD nand/SD 卡)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 …...

通义灵码在Visual Studio上

通义灵码在Visual Studio上不好用,有时候会出现重影,不如原生的自动补全好用,原生的毕竟的根据语法来给出提示的。...

基于SpringBoot的招生宣传管理系统【附源码】

基于SpringBoot的招生宣传管理系统(源码L文说明文档) 目录 4 系统设计 4.1 系统概述 4.2系统功能结构设计 4.3数据库设计 4.3.1数据库E-R图设计 4.3.2 数据库表结构设计 5 系统实现 5.1管理员功能介绍 5.1.1管理员登录 …...

SOT23封装1A电流LDO具有使能功能的 1A、低 IQ、高精度、低压降稳压器系列TLV757P

前言 SOT23-5封装的外形和丝印 该LDO适合PCB空间较小的场合使用,多数SOT23封装的 LDO输出电流不超过0.5A。建议使用时输入串联二极管1N4001,PCB布局需要考虑散热,参考文末PCB布局。 1 特性 • 采用 SOT-23 (DYD) 封装,具有 60.3C/W RθJA •…...

python绘制3d建筑

import matplotlib.pyplot as plt import numpy as np from mpl_toolkits.mplot3d.art3d import Poly3DCollection# 随机生成建筑块数据 def generate_building_blocks(num_blocks, grid_size100, height_range(5, 50), base_size_range(10, 30)):buildings []for _ in range(…...

机器学习实战21-基于XGBoost算法实现糖尿病数据集的分类预测模型及应用

大家好,我是微学AI,今天给大家介绍一下机器学习实战21-基于XGBoost算法实现糖尿病数据集的分类预测模型及应用。首先阐述了 XGBoost 算法的数学原理及公式,为模型构建提供理论基础。接着利用 kaggle 平台的糖尿病数据集,通过详细的…...

ElasticSearch数据类型和分词器

一、数据类型 1、Text (文本数据类型) 2、Keyword(关键字数据类型) 3、Alias(别名类型) 4、Arrays (集合类型) 5、Boolean(布尔类型) 6、日期类型 7、Numeric (数…...

【云原生监控】Prometheus之PushGateway

Prometheus之PushGateway 文章目录 Prometheus之PushGateway介绍作用资源列表基础环境一、部署PushGateway1.1、下载软件包1.2、解压软件包1.3、编辑配置systemctl启动文件1.4、创建日志目录1.5、加载并启动1.6、监控端口1.7、访问PushGateway 二、 配置Prometheus抓取PushGate…...

sqlalchemy JSON 字段写入时中文序列化问题

JSON字段定义 from sqlalchemy import Column, JSONclass Table(Base):__tablename__ "table"__table_args__ ({"comment": "表名称"})...extra Column(JSON, comment"其他属性")...局部序列化 def create(extra):table Table()#…...

C++ 类域+类的对象大小

个人主页:Jason_from_China-CSDN博客 所属栏目:C系统性学习_Jason_from_China的博客-CSDN博客 所属栏目:C知识点的补充_Jason_from_China的博客-CSDN博客 概念概述 类定义了一个新的作用域,类的所有成员都在类的作用域中&#xff…...

QT开发:深入详解QtCore模块事件处理,一文学懂QT 事件循环与处理机制

Qt 是一个跨平台的 C 应用程序框架,QtCore 模块提供了核心的非 GUI 功能。事件处理是 Qt 应用程序的重要组成部分。Qt 的事件处理机制包括事件循环和事件处理,它们共同确保应用程序能够响应用户输入、定时器事件和其他事件。 1. 事件循环(Ev…...

小米,B站网络安全岗位笔试题目+答案

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…...

微信小程序中巧妙使用 wx:if 和 catchtouchmove 实现弹窗禁止页面滑动功能

大家好,今天我要和大家分享的是在微信小程序开发过程中,如何利用 wx:if 或 wx:elif 来条件性地渲染不同的元素,并结合 catchtouchmove 事件处理函数来解决弹窗弹出时禁止背后页面滑动,而弹窗消失时恢复滑动的功能。 在微信小程序…...

唯徳知识产权管理系统 DownloadFileWordTemplate 文件读取漏洞复现

0x01 产品简介 唯徳知识产权管理系统,由深圳市唯德科创信息有限公司精心打造,旨在为企业及代理机构提供全方位、高效、安全的知识产权管理解决方案。该系统集成了专利、商标、版权等知识产权的全面管理功能,并通过云平台实现远程在线办公,提升工作效率。是一款集知识产权申…...

我在高职教STM32——准备HAL库工程模板(2)

新学期已开始,又要给学生上 STM32 嵌入式课程了。这课上了多年了,一直用的都是标准库来开发,已经驾轻就熟了。人就是这样,有了自己熟悉的舒适圈,就很难做出改变,老师上课也是如此,排斥新课和不熟悉的内容。显然,STM32 的开发,HAL 库已是主流,自己其实也在使用,只不过…...

数字化转型的实战法则:全面剖析《数字化专业知识体系》中的落地策略与最佳实践

开启数字化成功的实践路径 随着全球经济加速迈向数字化,企业不再仅仅依赖传统商业模式,而是通过技术创新提升竞争力与市场地位。然而,数字化转型的成功不仅依赖于战略思维,更需要精准的实战执行。《数字化专业知识体系》&#xf…...

远程桌面内网穿透是什么?有什么作用?

远程桌面内网穿透指的是通过特定技术手段,将处于内网中的电脑或服务器,通过外部网络(互联网)进行访问。内网穿透的主要作用是解决在内网环境下,远程设备与外部互联网之间的连接问题,允许用户从外部访问内网…...

【算法专场】分治(上)

目录 前言 什么是分治? 75. 颜色分类 算法分析 算法步骤 算法代码 912. 排序数组 - 力扣(LeetCode) 算法分析 算法步骤 算法代码 215. 数组中的第K个最大元素 - 力扣(LeetCode) 算法分析 算法步骤 ​编辑…...

腾讯云软件工程师面试问题收集记录-数据库

SQL是什么:结构化查询语言,是一种专门用于管理关系型数据库管理系统的编程语言 MySQL操作命令 数据库操作 登陆数据库:mysql -u 用户面 -p创建数据库:CREATE DATABASE testdb; SQLite操作命令 数据库操作 创建数据库:…...

Sourcetree安装教程及使用

下载链接:源代码树 |适用于 Mac 和 Windows 的免费 Git GUI (sourcetreeapp.com) Sourcetree安装教程及使用_sourcetree 安装使用-CSDN博客...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题,导致车牌识别率低、逃费率高,传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法,正成为破局关键。该设备安装于车位侧方0.5-0.7米高度,直接规避树枝遮…...

【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解

一、前言 在HarmonyOS 5的应用开发模型中,featureAbility是旧版FA模型(Feature Ability)的用法,Stage模型已采用全新的应用架构,推荐使用组件化的上下文获取方式,而非依赖featureAbility。 FA大概是API7之…...

客户案例 | 短视频点播企业海外视频加速与成本优化:MediaPackage+Cloudfront 技术重构实践

01技术背景与业务挑战 某短视频点播企业深耕国内用户市场,但其后台应用系统部署于东南亚印尼 IDC 机房。 随着业务规模扩大,传统架构已较难满足当前企业发展的需求,企业面临着三重挑战: ① 业务:国内用户访问海外服…...