sd卡与FAT32文件系统

先把sd卡格式化,然后新建几个文件放在里面,用于分析,sd卡中文件的存储方式。

使用工具winhex,打开磁盘sd卡。

先分析一下sd卡的第一个扇区,其中的内容为DBR(DOS BOOT RECORD c操作系统引导记录区)

DBR中BPB部分才是这一区域的核心部分,对于FAT32的实现意义很大。

每个红线部分是一个字段,要知道是什么意思,对照表看看就可以啦:

上面的长度是只占的字节数,现在就对照分析一下,

每个扇区字节数:是00 02,属于小端存数,读得时候为0x02 00,也就是512字节。

每簇的扇区数:是0x08,就是包含8个扇区,大小为 8*512 字节 = 4kB。

保留扇区数:是26 00,就是0x0026,保留38个扇区,你会看到fat表放在第38个扇区,前面的空间就只

包含了DBR,没有跟文件有关的东西,都是与sd卡本身有关的信息。

fat表数:是02,就是2个,这是fat32文件系统的特色,2个中有一个是备份的。

磁道扇区数:3f 00 就是0x003f,63,一个磁道所含的扇区数为63

磁头数:ff 00 就是0x00ff,255

sd卡所含的总扇区数: 00 a0 3a 00 就是0x003aa000 共有3842048个扇区

fat表扇区数:a1 0e 00 00,就是0x0ea1,3745个扇区

根目录簇号:02 00 00 00,就是2号,其实就是实际存储位置是fat表后面的第一个簇,8个扇区。用于存储根目录。

下面还有一个信息不是很重要。

下面分析fat表:

fat表示从第38个扇区开始,然后占空间3745个扇区。为什么占这么大呢,首先fat表中每4个字节描述一个簇,一个簇中有8个扇区,sd卡可用扇区数是3834520。

(3834520/8)*4/512=3744.6484375,约为3745个扇区。可用扇区数是可以查啊。winhex中的详述技术报告:

接下来看看fat表中的内容吧:

fat表是用来表示一个文件占了多大空间的,都是以簇为单位。哪怕你的文件只有一个字节,也是占一个簇,4kB的空间。或许你会觉得很浪费,不过想想,分得越细,越难查找,所以需要折中。我在sd卡中新建一个文件夹是SEUIC,SEUIC中新建VIM.txt(大小是10.02kB,占空间12KB,就是3个簇),根目录下还有一个文件TEST.txt(大小17个字节,占4KB)。那么fat表怎么表示的呢?

前8个字节表示这里是fat表的开始。后面的红线表示,每出现FF FF FF 0F都表示一个文件的结束,每四个字节为一个簇项,用以标记次簇的下一个簇号。依次解释下,首先sd卡中存储的是根目录区,占一个簇,簇号是2。后面是一个文件夹目录文件(SEUIC),占一个簇,簇号3。后面是文件VIM.txt,占3个簇,这里就好玩了,第一个簇号是4,你看到的05,就是标记的下一个簇号,表示这两个簇共同记录了同一个文件,所以把他们链接起来。直至第6簇结束,表示文件共占3个簇。最后又是一个只占一个簇的文件(TEST.txt)。其实这里是看不出文件名的。这里只会记录文件在sd卡中的存储。然后在目录区中描述一个文件的时候,只要记录首簇号就可以了,很方便是不是。当你在一个文件中添加内容的时候,随便写在哪个簇,并不需要连续的,然后把簇号添加进上一个簇项里面,就完成任务了。

下面介绍目录区:

先计算目录区所在扇区,由fat表所在第一个扇区38,加上2个fat表所占扇区数就是3745*2(别忘了又一个备份的fat表)。结果是7528,winhex在详细技术报告中也说明这个扇区是第一个数据扇区。

要看懂每个字段的意思,还是要查表的:

一个目录项占32个字节,就是2行喽。可以看出SEUIC的属性是子目录,起始簇号是3,这里把目录当做文件管理,但是这样的文件大小是0;

对于SEUIC子目录下的文件这里是看不到的哦。TEST.txt文件属性是归档,就是文件,起始簇号是7,字节数为17.

那么再去找VIM.txt,首先定位SEUIC所在扇区,他的簇号是3,就是目录区所在扇区加8为7536。所以要找一个文件,是一层一层剥开来得。

好吧,现在去7536扇区看看:

可以看出,VIM.txt属性是归档,首簇号是4,大小为0x28da,10458字节。你可以右击文件属性看一下,肯定是对应的啊。

那么要看VIM中的内容直接去第4簇。我们去看一下TEST.txt文件吧,这个文件比较小,在第7簇,就是7538+4*8=7568.

内容就是this is a test!!! 好吧就这么多了。

在linux文件系统中,所要建立的文件索引节点所需的数据就是来自上面的32字节的数据,他记录了文件的名字,属性,大小,地址等信息。

还有就是,文件是一层一层向下找得,那么系统启动挂载sd卡的时候只需要把跟目录区拷贝到内存中就可以了。那么查找的时候,打开一个子目录,就可以找到这个目录下的文件信息了。所以把目录当做文件看待是很有好处的。因为文件本身在哪儿并不重要。

sd卡与FAT32文件系统相关推荐

  1. SD卡移植FAT32文件系统无MBR

    问题:在研究SD卡和FAT32文件系统的时候,发现SD卡有的有MBR,有的没有MBR,这个为什么呢? 分析:MBR是主引导记录,是在给磁盘分区的时候建立的,我们的SD卡没有这个可能就是没有进行过分区操 ...

  2. 基于ATmega32的SD卡上FAT32文件系统数据读取

    SD卡(secure digital memory card,安全数码卡)是一种基于半导体快闪记忆器的新一代记忆设备,它被广泛地于便携式装置上使用,例如数码相机.个人数码助理(PDA)和多媒体播放器等 ...

  3. 挂载镜像SD卡的FAT32文件系统分区到Linux中

    首先使用fdisk –l命令查看sd卡的分区息 可以看到,sd卡有三个分区,第一个分区是FAT32系统,主要存放内核img文件和dtb文件,第二个分区是Linux系统分区,第三个分区格式未知,实际是U ...

  4. 【FatFs】基于STM32 SD卡移植FatFs文件系统

    相关文章 <[SDIO]SDIO.SD卡.FatFs文件系统相关文章索引> 1.前言 FatFs是一个通用的FAT/exFAT文件系统模块,用于小型嵌入式系统.它完全是由 ANSI C 语 ...

  5. 战舰V3适配oneos系列03:添加SD卡驱动及文件系统

    战舰V3系列03:添加SD卡驱动及文件系统 本系列以 oneos2.3.0 提供的 STM32F103ZE 模板为基础,将 oneos 在战舰 V3 上运行起来,并逐步适配相关外设,计划周更 本系列相 ...

  6. STM32CubeMX系列09——SDIO(SD卡读写、SD卡移植FATFS文件系统)

    文章目录 1. 准备工作 1.1. 简单扫盲 1.1.1. SD卡 1.1.2. TF卡 1.1.3. SDIO接口 1.2. 所用硬件及原理图 2. 创建工程 2.1. 选择主控 2.2. 系统配置 ...

  7. Exynos4412 移植针对Samsung的Linux-6.1(二)SD卡驱动——解决无法挂载SD卡的根文件系统

    系列文章目录 Exynos4412 移植针对Samsung的Linux-6.1(一)下载.配置.编译Linux-6.1 Exynos4412 移植针对Samsung的Linux-6.1(二)SD卡驱动 ...

  8. openwrt挂载U盘或SD卡作为根文件系统

    使用openwrt安装插件,发现flash太小,使用U盘或SD卡制作一个磁盘较大的根文件系统,用来安装较大的插件,如adguardhome #安装必要工具,Openwrt连接上互联网,使用ssh登陆o ...

  9. STM32CubeMX配置SD卡+DMA+Fatfs文件系统

    STM32CubeMX配置SD卡+DMA+Fatfs文件系统 一.设备及软件 1.keil 2.STM32CubeMX 3.正点原子STM32F407探索者开发板 二.配置步骤 1.配置RCC外部晶振 ...

  10. 从sd卡启动之文件系统制作

    在调试andriod的代码时候发现了一个问题.在andriod调试的时候无法进入常规的文件系统进行简单的操作.由于想要把alsa移植到210的开发板中,发现"/"文件系统是无法进行 ...

最新文章

  1. 硅谷大厂也看「名校学历」?Reddit小哥灵魂拷问引起热议
  2. 数据结构实验之串一:KMP简单应用
  3. 北斗导航 | 坐标变换矩阵(CTM)与欧拉角(Euler)互相转换:Matlab源代码
  4. 【转载】优酷网首席执行官兼创始人古永锵演讲
  5. maven 发布到仓库
  6. unity 全息交互ui_UI向3D投影全息界面的连续发展
  7. 自动打包_全自动打包机行业发展如何?全自动打包机行业发展现状分析
  8. 关于ics lab8 performance中的smooth
  9. 国际电信联盟:3GPP系标准成为唯一被认可的5G标准
  10. android系统下多媒体播放
  11. 【人机对话】对话的囧境?
  12. 分享一些第三方免费接口集
  13. 阅读-《金字塔原理》
  14. 供应链金融——研究结果总结
  15. 2018-2019赛季多校联合新生训练赛第三场题解和补题(中石油)
  16. java 字母大小写的转换_Java字母大小写转换的方法
  17. php写前端还是nodejs,javascript - 新手想在短期内写一个个人博客,是用php还是用nodejs?...
  18. python爬取腾讯新闻_Python采集腾讯新闻实例
  19. thinkphp 实现汉字转换成拼音
  20. CefSharp内核浏览器之C#与js的互相调用

热门文章

  1. 英语语法---名词性短语详解
  2. 计算机管理的事件id,事件查看器7035是什么意思_windows事件查看器常见ID代码含义详解...
  3. 介绍一个牛人的机器学习PPT
  4. 黄聪:css3实现图片划过一束光闪过效果(图片光影掠过效果)
  5. 如何解决u盘不能拷贝超过4G的大文件
  6. 贝叶斯算法(新闻分类任务)
  7. LeetCode之K sum problem
  8. 东北师范大学计算机研究生拟录取名单,东北师范大学2016年硕士研究生拟录取名单公示...
  9. vue 弹框只出来一半,另一半白屏遮挡了
  10. 无法复制文件到远程桌面的解决办法