振南的znFAT(第四章_统揽全局_三分胜算)



注释:1、MBR(主引导记录)包含DPT;

2、winhex上MBR在物理扇区0,在逻辑扇区没有显示。

3、分区记录0的DPT分区表详解:

80:有效分区(00为无效);
01:开始磁头;
01 00:开始扇区与开始界面;
0B:系统ID;
FE:结束磁头;
3F 1E:结束扇区与结束柱面;
3F 00 00 00:分区的开始扇区;

C1 9F 07 00:总扇区数。

4、DPT C语言结构体描述:

//DPT:分区记录结构如下
struct PartRecord
{
 UINT8 Active;         //0x80表示此分区有效
 UINT8 StartHead;      //分区的开始磁头
 UINT8 StartCylSect[2];//开始柱面与扇区
 UINT8 PartType;       //分区类型
 UINT8 EndHead;        //分区的结束头
 UINT8 EndCylSect[2];  //结束柱面与扇区
 UINT8 StartLBA[4];    //分区的第一个扇区
 UINT8 Size[4];        //分区的大小 
};

//MBR:分区扇区(绝对0扇区)定义如下
struct PartSector
{
 UINT8 PartCode[446]; //MBR的引导程序
 struct PartRecord Part[4];   //4个分区记录
 UINT8 BootSectSig0;  //55
 UINT8 BootSectSig1;  //AA
};





注释:1、DBR包含BPB;

2、winhex上DBR在物理扇区63,在逻辑扇区0;

3、BPB表详解:

00 02:每扇区字节数(0X0200=512);

04:每簇扇区数(0x04=4);

26 00:保留扇区数(0x0026=38);

02:fat表数(0x02=2);

00 00:FAT32固定为0;

00 00:FAT32固定为0;

F8:存储介质类型;

00 00:FAT32固定为0;

3F 00:磁道扇区数(0x003F=63);

FF 00:磁头数(0x00FF=255);

3F 00 00 00:FAT区前隐扇区数(0x0000003f=63);

C1 9F 07 00:总扇区数(0x00079FC1=499649);

CD 03 00 00:FAT表所占扇区数(0x000003CD=973);

00 00:FAT32特有;

00 00:FAT32特有;

02 00 00 00:第一个目录的簇好(0x00000002=2);

01 00:FSINFO扇区数(0x0001=1);

06 00:通常为6;

00 00 00 00 00 00 00 00 00 00 00 00:12个零用于扩展;

00:驱动器号;

00:保留;

29:扩展引导标签;

B3 3B 28 AC:分区序列;

4E 4F 20 4E 41 4D 45 20 20 20 20:卷标;

46 41 54 33 32 20 20 20:系统ID

4、DBR C语言结构体描述:

//FAT32中对BPB的定义如下  一共占用90个字节
struct FAT32_BPB
{
 UINT8 BS_jmpBoot[3];     //跳转指令            offset: 0
 UINT8 BS_OEMName[8];     //                    offset: 3
 UINT8 BPB_BytesPerSec[2];//每扇区字节数        offset:11
 UINT8 BPB_SecPerClus[1]; //每簇扇区数          offset:13
 UINT8 BPB_RsvdSecCnt[2]; //保留扇区数目        offset:14
 UINT8 BPB_NumFATs[1];    //此卷中FAT表数       offset:16
 UINT8 BPB_RootEntCnt[2]; //FAT32为0            offset:17
 UINT8 BPB_TotSec16[2];   //FAT32为0            offset:19
 UINT8 BPB_Media[1];      //存储介质            offset:21
 UINT8 BPB_FATSz16[2];    //FAT32为0            offset:22
 UINT8 BPB_SecPerTrk[2];  //磁道扇区数          offset:24
 UINT8 BPB_NumHeads[2];   //磁头数              offset:26
 UINT8 BPB_HiddSec[4];    //FAT区前隐扇区数     offset:28
 UINT8 BPB_TotSec32[4];   //该卷总扇区数        offset:32
 UINT8 BPB_FATSz32[4];    //一个FAT表扇区数     offset:36
 UINT8 BPB_ExtFlags[2];   //FAT32特有           offset:40
 UINT8 BPB_FSVer[2];      //FAT32特有           offset:42
 UINT8 BPB_RootClus[4];   //根目录簇号          offset:44
 UINT8 FSInfo[2];         //保留扇区FSINFO扇区数offset:48
 UINT8 BPB_BkBootSec[2];  //通常为6             offset:50
 UINT8 BPB_Reserved[12];  //扩展用              offset:52
 UINT8 BS_DrvNum[1];      //                    offset:64
 UINT8 BS_Reserved1[1];   //                    offset:65
 UINT8 BS_BootSig[1];     //                    offset:66
 UINT8 BS_VolID[4];       //                    offset:67
 UINT8 BS_FilSysType[11]; //                offset:71
 UINT8 BS_FilSysType1[8]; //"FAT32    "         offset:82
};





计算:

第一个FAT表开始扇区=DBR开始扇区+保留扇区数=63+38=101;

第二个FAT表开始扇区=第一个FAT表开始扇区+FAT表所占扇区数=101+973=1074(上图画错啦);

首目录簇开始开始扇区=第一个FAT表开始的扇区+2*FAT表所占扇区数=101+2*973=2047;

第N簇开始扇区=(N-首目录簇)*簇所占扇区数+首目录簇开始扇区=(N-2)*4+2047;



注意:FAT32首先研发为PC上的文件系统,是小端模式;而我们单片机一般为大端模式;



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值