systick

FAT32学习笔记(一)

0
阅读(3993)

 

    接触FAT32已有一段日子,看了资料,又阅读了部分FATFS的源代码,可是对于整个过程却始终还没有弄的太明白,因此想从FAT32格式入手,一次性了解,以利于学习。

    本次实验使用以前买相机的128M SD卡作为实验用,使用WINHEX软件, 主要以截图和地址计算为主。

  

    当前SD卡内只存有一个文件:说明.txt。其他的且听我一一道来。

        Root directory :在有些版本的WINHEX软件中显示为根目录。

        Boot sector:即启动扇区,通常为SD卡的第1个扇区(0柱面0磁头1扇区),所以偏移量为0

        FAT1:即文件分配表

        FAT2:也是文件分配表,和FAT1一样,当FAT1遭到损坏时,可以由FAT2进行修复。此处有一点不明白,据资料所说,  FAT2是相当于复制FAT1的,那么当FAT1有问题时,FAT2不也复制了有问题的FAT1了吗?那又如何可以据此进行修复数据?

       Free space:即剩余空间,也就是剩下可以存我们自己数据的空间

       Idle space:即空闲空间,这个目前我也不知道是什么,先搁着吧

       Volume slack:我的理解是相当于耗损空间,由于在硬盘上,空间是不可以跨柱面的,所以有些空间会被剩下不能被利用。

    下面我们将对各项进行分析,有些不重要的将简单提及但不重点介绍:

  

     (1)黑线部分:EB 58 90  跳转指令

     (2)红线部分:4D 53 44 4F 53 35 2E 30  产商标志和OS版本号

     (3)蓝线部分:00 02 这里数据储存格式为小端储存,即高地址放高字节,低地址放低字节,这样实际取出来用的时候就为0200(16进制),即512 。意思是这个SD卡每个扇区是512字节,不过不是所有的SD卡都一样,有的为1024,2048等其他值

     (4)黄线部分:02 意思是每个簇有2个扇区,这个值必须为2的整数次方如1、2、4、8、16、32等,但不能使一个簇大于32KB。

     (5)绿线部分:98 18 由小端储存可知为1898,即6296。意思是保留扇区数为6296个。

     (6)淡蓝色部分:02 此卷中FAT结构的份数为2,即FAT2为备份的。

     (7)红色点线部分:B4 03 即03B4,转成十进制为948,每个FAT表占用948个扇区。

    根据启动区、FAT1、FAT2、根目录的次序就可以开始计算地址了:

    启动区为 0x00

   

    FAT1:由于保留扇区为6296 * 512 = 3223552

   

    FAT2:因为每个扇区占用 948(扇区)* 512 =  485376,所以 485376+3223552 = 3708928

   

   根目录区:在FAT2基础上加上一个FAT表所占用的字节数就可以,即 3708928 + 485376 = 4194304