最近在调试eCos STM32 SD卡驱动。目前情况是,驱动可以正常读取SD卡中block数据,但应用程序中mount时却提示失败。发现是对SD卡block0中数据处理有些问题,而且驱动中还涉及到CHS格式与LBA格式的转换,弄得我是一头雾水。

于是,老老实实地静下心来研究SD卡中的数据结构、CHS(cylinder、head、sector,即柱面、磁头、扇区)和LDA的概念及其关系、FAT文件系统等知识。下面的内容是转载的(同时加以整理),写得超详细,剖析全面,图文并茂,尤其是其中的数据格式分析,令人印象深刻,不得不佩服作者的写作水平。

注:以下内容整理并转自:http://blog.csdn.net/mjx91282041/article/details/8904705

说明:

  • 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图

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

起始地址 字节数 描述
0x1BE 1 可引导标志,0x00不可引导,0x80可引导
0x1BF~0x1C1 3 分区起始CHS地址(CHS=磁头、柱面、扇区),起始地址
0x1C2 1 分区类型
0x1C3~0x1C5 3 分区结束CHS地址
0x1C6 4 从磁盘开始到该分区开始的偏移量(分区起始LBA地址Little-endian顺序)
0x1CA 4 总扇区数(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卡整体布局

第二章是关于FAT32文件系统的介绍,由于篇幅过长,所以放到下一文章中!

» 文章出处: reille博客—http://velep.com , 如果没有特别声明,文章均为reille博客原创作品
» 郑重声明: 原创作品未经允许不得转载,如需转载请联系reille#qq.com(#换成@)
分享到:

 Leave a Reply

(必须)

(我会替您保密的)(必须)

*

   
© 2012 velep.com | reille blog | 管理| 粤ICP备12094833号-2| 谷歌地图| 百度地图| Suffusion theme|Sayontan Sinha

无觅相关文章插件,快速提升流量