您的位置:首页 > 其它

SD卡FAT32文件结构(1)

2011-04-10 02:39 155 查看
     FAT32文件层,这个文件层体系不是十分的复杂。但为了寻找一个根目录的文件,得几经周折,所写的程序也非常的庞大。

     首先,我们为了知道我们的SD卡的基本信息,这些信息一般被存储在BPB表中,而BPB表位于DBR中,也就是逻辑扇区0号。但逻辑0扇区并不在0号扇区之中,使用WinHex,看0扇区,结果如下所示。

    



     0x0190之前的区域全是0,省略掉了。从图中看出,这必定不是DBR,而是主引导扇。图中红圈的地方,标示出了DBR所在的位置,红圈的位置是MBR的0x01C6~0x01C9。而从WinHex能看出,我的SD卡的DBR是在地址0x5600开始的。而红圈的数据为小端模式的,一般来说,单片机的数据存储格式为大端,所以需要一个转化。而0x2B000000这个小端数据转化为大端之后为0x2B(我个人认为小端就是把高字节存在低位,低字节存在高位)。而之前读取SD卡的CSD寄存器可知,一个扇区是512byte的。所以经过简单的算式便可算出DBR的位置。       
     0x002B * 0x0200 = 0x5600。
    那么,我们就可以寻找到DBR了,从WinHex中读取DBR,结果如下所示。
    



    红圈处为DBR开始的地址,恰好是0x5600,和之前计算的一样。其中,较为重点的地方我给出了不同颜色的标记。
    1:(红色)值为0x0002(小端数据),转化为大端数据为0x0200,即512。其含义为标示每个扇区有512字节。
    2:(绿色)值为0x08,表示每个簇有8个扇区。可能值为2个整数次方,但每个簇不能超过32K。
    3:(浅蓝)值为0x2000(小端数据),转化为大端数据为0x0020,即32。表示保留区内有32个保留扇区。那么FAT表就位于保留扇区结束后的位置。所以FAT表的地址为0x0020*0x0200(每个扇区512byte)=0x4000。
    4:(深蓝)值为0x02表示有2份FAT表,另一个是备份所用的。
    5:  (紫色)值为0xCC03(小端数据),转化为大端数据为0x03CC,表示每个FAT表所占据的扇区数。那么每个FAT表所占据地址数量为0x03CC*0x0200 = 0x79800。
     那么  我的 D B R 位于0x005600
             我的FAT1表位于0x005600 + 0x004000  = 0x009600
                   FAT2表位于0x009600 + 0x079800  = 0x082E00
                  根目录区位于0x082E00 + 0x079800 =  0x0FC600
     至此,我得到了我SD卡存储的所有信息,用WinHex验证下结果。



FAT1表(位于0x009600开始的区域)



FAT2表(位于0x082E00开始的区域)



根目录区(位于0x00FC600开的区域)
         
           与我之前计算的结果完全吻合。那么,我们接下来就可以根据根目录,找出目前根目录下所有的文件信息。 
 
           待续....
   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  存储 byte c