⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fat1.h

📁 MP3播放器开发源码及电路图
💻 H
字号:







  struct MBR
  {uchar RegionFlag;       //446  活动分区标志
   uchar StartHead;        //447  分区起始磁头号
   uchar StartCS;          //448  分区起始扇区号(L6BIT)和起始柱面号(H2BIT)
   uchar StartCylinder;    //449  起始柱面低8位
   uchar DosVer;           //450  系统标示
   uchar StopHead;         //451  结束磁头号
   uchar StopCS;           //452  结束扇区号(L6BIT)和起始柱面号(H2BIT)
   uchar StopCylinder;     //453  结束柱面低8位
   uchar LogicSector[4];   //454~457  该分区起始相对逻辑扇区号
   uchar TotalSector[4];   //458~461  该分区所有扇区数
   }mbr;


  struct BPB
  {uchar JMPBOOT[3];        //0~2   跳转指令
   uchar OEMName[8];        //3~10  OEM NAME
   uchar BytePerSector[2];  //11~12 每扇区字节数
   uchar SecPerClus;        //13    每簇扇区数
   uchar RsvdSecCnt[4];     //14~15 保留扇区数   ************方便计算
   uchar NumFATs;           //16    FAT表数
   uchar RootEntCnt[2];     //17~18 根目录入口数
   uchar TotSec16[2];       //19~20 16扇区总数
   uchar Media;             //21    媒质属性
   uchar FATSz16[2];        //22~23 一个FAT16表所占扇区数
   uchar SecPerTrk[2];      //24~25 每磁道扇区数
   uchar NumHeads[2];       //26~27 磁头数
   uchar HiddSec[2];        //28~31 隐藏扇区数
   uchar TotSec32[4];       //32~35 32扇区总数
   uchar DrvNum;            //36    DRIVE NUMBER
   uchar Reserved;          //37    保留
   uchar BootSig;           //38    扩展根结构  0X29
   uchar VolID[4];          //39~42 卷序列号
   uchar VolLab[11];        //43~53 卷标
   uchar FilSysType[8];     //54~61 "FAT12,FAT16,FAT32"字符串
   }bpb;




 extern GetLogicSector(void)
          {WriteCHS(0,0,0,0);     //LBA=0x00000000
           WriteCommand(0x20);    //读硬盘命令
           GetData();             //返回MBR内容到BUFFER数组          
           mbr.LogicSector[0]=BUFFER[454];
           mbr.LogicSector[1]=BUFFER[455];
           mbr.LogicSector[2]=BUFFER[456];
           mbr.LogicSector[3]=BUFFER[457];
		   }

 extern GetBPBSector(void)
          {WriteCHS(mbr.LogicSector[3],mbr.LogicSector[2],mbr.LogicSector[1],mbr.LogicSector[0]);//LBA=该分区起始相对逻辑扇区号
           WriteCommand(0x20);    //读硬盘命令
           GetData();             //返回MBR内容到BUFFER数组
           bpb.BytePerSector[0]=BUFFER[11];
           bpb.BytePerSector[1]=BUFFER[12];  
           bpb.SecPerClus=BUFFER[13];
           bpb.RsvdSecCnt[0]=BUFFER[14];
           bpb.RsvdSecCnt[1]=BUFFER[15];
           bpb.RsvdSecCnt[2]=0;
           bpb.RsvdSecCnt[3]=0;
           bpb.NumFATs=BUFFER[16];
           bpb.RootEntCnt[0]=BUFFER[17];
           bpb.RootEntCnt[1]=BUFFER[18];
           bpb.FATSz16[0]=BUFFER[22];
           bpb.FATSz16[1]=BUFFER[23];
		   }



 extern Uint32 GetLBA(uchar *S1,uchar *S2)
         {Uint32 LBA;
          Uint32 LBA10,LBA11,LBA12,LBA13;
          Uint32 LBA20,LBA21,LBA22,LBA23;
          LBA10=(Uint32)(*(S1));
          LBA11=(Uint32)(*(S1+1));
          LBA12=(Uint32)(*(S1+2));
          LBA13=(Uint32)(*(S1+3));
          LBA20=(Uint32)(*(S2));
          LBA21=(Uint32)(*(S2+1));
          LBA22=(Uint32)(*(S2+2));
          LBA23=(Uint32)(*(S2+3));
          LBA=LBA10+(LBA11<<8)+(LBA12<<16)+(LBA13<<24)+LBA20+(LBA21<<8)+(LBA22<<16)+(LBA23<<24);
          return(LBA);
         }




 



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -