这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » SD卡中是如何保存文件的

共4条 1/1 1 跳转至

SD卡中是如何保存文件的

专家
2024-07-05 19:42:23     打赏

文件在SD卡中的保存

我们都知道可以用SD卡保存文件。文件本身其实就是带有特定信息的数据。仅仅从文件内容上看,使用一个SD卡,我们既可以使用自己的方式,像使用Flash芯片那样,按照自己的约定,把不同的文件的内容直接作为二进制数据保存在SD卡的指定扇区中。就像字库芯片一样,不同的字体,保存在不同扇区,需要那种字体,通过地址确定。而更好的方式,就像使用硬盘那样,利用协议,将SD的存储区域华为为不同的区域,建立文件管理系统结构。这样SD卡不仅可以在单片机系统中使用,也可以在计算机中,像使用U盘那样使用SD卡。这就需要对SD卡进行格式化,利用文件系统格式,来管理SD卡的内部存储空间。

已知的文件系统有FAT12FAT16FAT32exFATNTFSEXT2EXT3EXT4等。协议不同,意味着在SD卡上的扇区的分工不同。这里用FAT32方式为例,看看SD的存储区是怎么划分的。这里使用WinHEX这个工具直接查看SD的存储内容,很方便。

图片3.png 

在地址00000000H 000001E0H的这段空间内,在右侧能看见字符的地方,我们可以找到MSDOS5.0FAT32BOOTMGR等字样,这段区域,是引导扇区。最前面的512个字节的说明如下:

10x00~0x023字节,跳转指令。

20x03~0x0A8字节,文件系统标志和版本,这里为MSDOC5.0

30x0B~0x0C2字节,每扇区字节数,5120X02 00)。

40x0D~0x0D1字节,每簇扇区数,80x08)。

50x0E~0x0F2字节,保留扇区数,380x00 26),符合FAT1起始地址为38扇区。

60x10~0x101字节,FAT表个数,2

70x11~0x122字节,FAT32必须等于0FAT12/FAT16为根文件夹中文件夹的个数;

80x13~0x142字节,FAT32必须等于0FAT12/FAT16为扇区总数。

90x15~0x151字节,哪种存储介质,0xF8标准值,可移动存储介质,经常使用的 0xF0

100x16~0x17:2字节,FAT32必须为0FAT12/FAT16为一个FAT 表所占的扇区数。

110x18~0x192字节,每磁道扇区数,仅仅对于有特殊形状(由磁头和柱面每 切割为若干磁道)的存储介质有效,630x00 3F)。

120x1A~0x1B2字节,磁头数,仅仅对特殊的介质才有效,2550x00 FF)。

130x1C~0x1F4字节,EBR分区之前所隐藏的扇区数,81920x00 00 20 00),与MBR中地址0x1C6開始的4个字节数值相等。

140x20~0x234字节,文件系统总扇区数,77363200x 00 76 0C 00),7736320 * 512 = 3960995840 ≈ 3.67GB

150x24~0x274字节,每一个FAT表占用扇区数,75410x 00 00 1D 75)。

160x28~0x292字节,标记,此域FAT32 特有。

170x2A~0x2B2字节,FAT32版本0.0FAT32特有。

180x2C~0x2F4字节,根文件夹所在第一个簇的簇号,2。(尽管在FAT32文件系统 下,根文件夹能够存放在数据区的不论什么位置,可是通常情况下还是起始于2号簇)

190x30~0x312字节,FSINFO(文件系统信息扇区)扇区号1,该扇区为操作 系统提供关于空簇总数及下一可用簇的信息。

200x32~0x332字节,备份引导扇区的位置。备份引导扇区总是位于文件系统 的6号扇区。

210x34~0x3F12字节,用于以后FAT 扩展使用。

220x40~0x401字节,与FAT12/16 的定义同样,仅仅只是两者位于启动扇区不

同的位置而已。

230x41~0x411字节,与FAT12/16 的定义同样,仅仅只是两者位于启动扇区不

同的位置而已

240x42~0x421字节,扩展引导标志,0x29。与FAT12/16 的定义同样,仅仅只是 两者位于启动扇区不同的位置而已

250x43~0x464字节,卷序列号。通常为一个随机值。

260x47~0x5111字节,卷标(ASCII码),假设建立文件系统的时候指定了卷 标,会保存在此。

270x52~0x598字节,文件系统格式的ASCII码,FAT32

280x5A~0x1FD90~509410字节,引导代码

290x1FE~0x1FF:签名标志“55 AA”

 

引导代码

FAT文件系统将引导代码与文件形同数据结构融合在一起,FAT32文件系统引导扇区的512字节中,90~509字节为引导代码,而FAT12/16则是62~509字节为引导代码。同一时候,FAT32还能够利用引导扇区后的扇区空间存放附加的引导代码。一个FAT卷即使不是可引导文件文件系统,也会存在引导代码。

图片4.png

在这段区域,我们可以看到,存储在SD卡上的文件信息,每一个文件占用32字节的数据,里面包含了文件的名称、扩展名,以及该文件的二进制数据保存在SD卡中的位置等信息。

图片5.png 

需要特别说明的信息:

1】:文件或者目录存储的起始簇号,偏移地址高16和低16位,表示这个文件存储哪个簇的位置。

2】:文件大小:偏移地址0x1C-0x1

3】文件属性:偏移地址0x0B-0x0B0x20 ,归档。

4】子文件夹存储在数据区

5】文件名称的第一个字节,为0xE5,表示该项已被删除。

6】名字为0x2E(“.”),表示当前文件夹。

7】名字为0x2E 0x2E(“. .”),表示上一级文件夹。

第一个字节为E5”的,表示是之前存储过、后来被删除的文件。

看到这里,个人感觉,和DOS系统下的文件系统是相似的。更多的有关FAT32的规范,就不多说明了,有兴趣的可以找资料。

这里简单介绍这些内容,是为了帮助我们用单片机访问SD卡的时候,知道读出来的数据是什么作用,这样可以方便我们去读写SD卡中的文件。具体的处理,一定要根据对应的文件系统规范去解析数据,从而得到正确的结果。

 





关键词: 懒猫的学习笔记    

专家
2024-07-06 06:28:54     打赏
2楼

学习了


专家
2024-07-06 07:59:28     打赏
3楼

感谢楼主分享


院士
2024-07-10 17:43:24     打赏
4楼

谢谢分享,学习了。


共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]