首页 资讯 应用 高压 设计 行业 低压 电路图 关于

嵌入式

旗下栏目: PLC 嵌入式 单片机 DCS

SD卡数据结构与FAT文件系统详细分析

嵌入式 | 发布时间:2018-10-30 | 人气: | #评论# | 本文关键字:SD卡,FAT32,数据结构
摘要:近在调试eCos STM32 SD卡驱动。目前情况是,驱动可以正常读取SD卡中block数据,但应用程序中mount时却提示失败。发现是对SD卡block0中数据处理有些问题,而且驱动中还涉及到CHS格式与LBA格式的转

近在调试eCos STM32 SD卡驱动。目前情况是,驱动可以正常读取SD卡中block数据,但应用程序中mount时却提示失败。发现是对SD卡block0中数据处理有些问题,而且驱动中还涉及到CHS格式与LBA格式的转换,我们来研究SD卡中的数据结构、CHS(cylinder、head、sector,即柱面、磁头、扇区)和LDA的概念及其关系、FAT文件系统等知识。说明:

  • MBR :Master Boot Record ( 主引导记录)

  • DBR :DOS Boot Record ( 引导扇区)

  • FAT :File Allocation Table ( 文件分配表)

  • 硬件:本文SD卡为Kingston 4GB,FAT32格式,簇大小4KB,每扇区512字节。

第一章 硬盘结构与SD卡结构

1.1 硬盘介绍

1.1硬盘结构

如果你熟悉硬盘结构跳过本节。下图是硬盘的结构,如果你只是为了学习SD卡FAT32文件系统的话,这里你只需要注意硬盘排序结构:主引导记录(MBR)—引导扇区—数据—引导扇区—数据。

图1

图1. 硬盘的结构示意图

1.2 MBR分析

MBR(Main Boot Record 主引导记录区)放置在硬盘物理地址0的地方。总共512字节的主引导扇区中,MBR只占用了其中的446个字节,另外64个字节交给了 DPT(Disk Partition Table硬盘分区表),最后两个字节“55,AA”是分区的结束标志。DPT由4个分区表组成,每个16字节。下图中以以硬盘的MBR图,粉红色为硬盘分区表。

图2. 硬盘的MBR图

图2. 硬盘的MBR图

对于我们来说,更关注硬盘分区表表中红色区域:下图为硬盘分区表详细说明

起始地址字节数描述
0x1BE1可引导标志,0x00不可引导,0x80可引导
0x1BF~0x1C13分区起始CHS地址(CHS=磁头、柱面、扇区),起始地址
0x1C21分区类型
0x1C3~0x1C53分区结束CHS地址
0x1C64从磁盘开始到该分区开始的偏移量(分区起始LBA地址Little-endian顺序)
0x1CA4总扇区数(Little-endian顺序)

图3. 硬盘分区表详细说明

图3. 硬盘分区表详细说明

SD结构

SD卡没有分区,默认就是一个分区。首先用WinHex文件打开SD所在的盘符,显示如下图:

图4. 用WinHex文件打开SD所在的盘符

图4. 用WinHex文件打开SD所在的盘符

① 非分区空间(红线所示): 起始扇区0,我认为这个分区就是硬盘上的MBR所在区域,

打开后如下图所示,也可以称为SD卡的MBR区域。

图5. SD卡的MBR区域

图5. SD卡的MBR区域

根据表1知道:

红线区域(00002000)为下个分区的扇区地址,即第8192扇区,见图3分区1的起始扇区。

蓝线区域(00760C00)为SD卡总的扇区个数,我们可以计算一下:

0x760C00 *512(每扇区字节)= 3960995840 (字节),与实际大小基本一样。

② 分区1(蓝线所示):起始扇区8192.

③ 剩余扇区    : 才疏学浅,我不知道干嘛的,呵呵

1.3 SD卡存储结构

由此可知SD卡文件系统并不是处在整个SD卡最开始的地方,它处在MBR所处的保留区之后,于是我们可以对使用FAT32文件系统的SD卡整体布局给出如下图示。

图6. 使用FAT32文件系统的SD卡整体布局

图6. 使用FAT32文件系统的SD卡整体布局

这里

主要介绍了SD卡存储数据结构,并对MBR(Main Boot Record 主引导记录区)进行了详细地分析,使我们对SD卡的数据有了初步的了解。这仅仅是个开始,接下来了解下其中的FAT文件系统及其存储数据格式分析。

第二章 FAT32文件系统介绍

2.1 FAT文件系统简介

FAT(File Allocation Table,文件分配表)文件系统是windows操作系统所使用的一种文件系统,它的发展过程经历了FAT12、FAT16、FAT32三个阶段。FAT文件系统用“簇”作为数据单元。一个“簇”由一组连续的扇区组成,簇所含的扇区数必须是2的整数次幂。簇的最大值为64个扇区,即32KB。所有簇从2开始进行编号,每个簇都有一个自己的地址编号。用户文件和目录都存储在簇中。 本文每簇4KB大小。

FAT文件系统的数据结构中有两个重要的结构:文件分配表和目录项:

文件分配表:文件和文件夹内容储存在簇中,如果一个文件或文件夹需要多余一个簇的空间,则用FAT表来描述,如何找到另外的簇。FAT结构用于指出文件的下一个簇,同时也说明了簇的分配状态。FAT12、FAT16、FAT32这三种文件系统之间的主要区别在与FAT项的大小不同。

目录项:FAT文件系统的每一个文件和文件夹都被分配到一个目录项,目录项中记录着文件名、大小、文件内容起始地址以及其他一些元数据。

在FAT文件系统中,文件系统的数据记录在“引导扇区中(DBR)”中。引导扇区位于整个文件系统的0号扇区,是文件系统隐藏区域(也称为保留区)的一部分,我们称其为DBR(DOS Boot Recorder——DOS引导记录)扇区,DBR中记录着文件系统的起始位置、大小、FAT表个数及大小等相关信息。在FAT文件系统中,同时使用“扇区地址”和“簇地址”两种地址管理方式。这是因为只有存储用户数据的数据区使用簇进行管理(FAT12和FAT16的根目录除外),所有簇都位于数据区。其他文件系统管理数据区域是不以簇进行管理的,这部分区域使用扇区地址进行管理。文件系统的起始扇区为0号扇区。

2.2 FAT32文件系统结构

FAT文件系统整体分布如上一节的图6 所示,由3个部分组成,分别是:

【1深绿色】保留区含有一个重要的数据结构——系统引导扇区(DBR)。FAT12、FAT16的保留区通常只有一个扇区,而FAT32的保留扇区要多一些,除0号扇区外,还有其他一些扇区,其中包括了DBR的备份扇区。

【2黄色】  FAT区由来年各个大小相等的FAT表组成——FAT1、FAT2,FAT2紧跟在FAT1之后。

【3灰色】  FAT12、FAT16的根目录虽然也属于数据区,但是他们并不由簇进行管理。也就是说FAT12、FAT16的根目录是没有簇号的,他们的2号簇从根目录之后开始。而FAT32的根目录通常位于2号簇。

2.2.1 保留区(深绿色区域)

FAT32文件系统的开始部分有一个由若干个扇区组成的保留区,保留区的大小会记录在DBR扇区中,比较常见的为32、34或38个扇区。如图6:由DBR中0x0e和0x0f两个地址的数值决定,记得是小端模式,即N的值。

责任编辑:SD卡数据结构
首页 | 电气资讯 | 应用技术 | 高压电器 | 电气设计 | 行业应用 | 低压电器 | 电路图 | 关于我们 | 版权声明

Copyright 2017-2018 电气自动化网 版权所有 辽ICP备17010593号-1

电脑版 | 移动版 原创声明:本站大部分内容为原创,转载请注明电气自动化网转载;部分内容来源网络,如侵犯您的权益请发送邮件到[email protected]联系我们删除。