天天

再识——FAT文件系统

0
阅读(4564)

之前听别人说FAT的时候,听的蒙蒙的,看过了《4.5W透视FAT32系统》,有了比较全面的了解,但是上面东西都是要从实践来巩固的,感觉还是需要自己做下总结,比较有系统的理解。

整个FAT,大致为4部分,MBR+DPT,DBR ,FAT,DATA

1.MBR+DPT

MBR(master boot record),即主引导记录,有时也称主引导扇区。位于整个硬盘的0

柱面0 磁头1 扇区(可以看作是硬盘的第一个扇区),用winhex查看,在物理0扇区。在总共512byte 的主引导记录中,MBR 的引导程序占了其中的前446 个字节(偏移0H~偏移1BDH),随后的64 个字节(偏移1BEH~偏移1FDH)为DPT(Disk PartitionTable,硬盘分区表),最后的两个字节“55 AA”(偏移1FEH~偏移1FFH)是分区有效结束标志。其中有用的信息在DPT之中。

图1  MBR+DPT

Offset为446,80H为有效分区,但是看了一下整个没有80H的,应该是默认第一个为有效分区的。

之前一直卡在物理0扇区与逻辑0扇区上,有的时候MBR+DPT是没有的,所以才会出现挑卡的现象。

Offset为454开始接下来的数据为DBR扇区所在的扇区,直接跳转到该扇区就可以看到图2。

图2.  DBR

2.DBR

从Offset为126464,所在247扇区,DBR的信息是最主要的,一个扇区多少字节,一簇有多少扇区,有多少FAT,一个FAT有多少扇区,该卡的文件类型为FAT12、FAT16还是FAT32的。在书写代码的时候,能够正确读取到该扇区数据是读写整个SD的开头与关键。之前就理解FAT系统,卡了2天,在网络找到类似地问题,才发现问题所在,物理扇区与逻辑扇区。在这样建议用winhex查看SD的话,直接看物理驱动这个,这样更好的查看整个SD。 

3.FAT

图3  FAT表内容 

FAT表是用来存储数据存储在哪个簇的,类型为FAT32,4个字节为一个数据簇,在文件建立的时候,就要在这里写入文件存储的簇,以0FFFFFF8H-FFFFFFFFH为文件结束簇。当一个文件的大小小于一个簇的话,也是占用一个簇的空间。

4.DATA

DATA区分为2部分,目录区(root directory)和数据区。数据区就是存储实际文件的数据的。而目录区,就是用来存储卡中存储的文件目录的。

图 4  文件夹123456的目录项

图 5  文件485232.jpg的目录项

上面的图片显示的都是短文件名的目录项。每个目录项的长度为32个字节。

 

在单片机中,要在SD建立一个文件,需要进行几个步骤:

一、把数据写入数据扇区;

二、把对应的数据扇区的簇写入数据簇,结束簇要写入FFFFFFFFH;

三、把目录写入目录区中。

步骤不一样,都是大同小异,很多细节都是要注意的,比如要初始化好SD,让数据扇区与数据簇的一一对应好,等等。

有什么不好的,不对的,请指教了

PS:终于完成SD的读写了,喝杯水,继续其他的驱动,学习再学习。