📄 fat.h
字号:
#ifndef _fat_h_
#define _fat_h_
//Block Size in Bytes
#define BlockSize 512
//Master Boot Record
#define MASTER_BOOT_RECORD 0
//BPB Address only in mmc card or usb disk
#define BIOS_PARAMETER_BLOCK 0
//Volume Boot Record location in Master Boot Record
#define VBR_ADDR 0x1C6
//define ASCII
#define SPACE 0x20
#define DIR_ENTRY_IS_FREE 0xE5
#define FIRST_LONG_ENTRY 0x01
#define SECOND_LONG_ENTRY 0x42
//define DIR_Attr
#define ATTR_LONG_NAME 0x0F
#define ATTR_READ_ONLY 0x01
#define ATTR_HIDDEN 0x02
#define ATTR_SYSTEM 0x04
#define ATTR_VOLUME_ID 0x08
#define ATTR_DIRECTORY 0x10
#define ATTR_ARCHIVE 0x20
#define FAT_Flg_12 0x00
#define FAT_Flg_16 0x01
#define FAT_Flg_32 0x02
//fat32 BPB结构,包括扩展BPB
struct BootSec32
{
unsigned char BS_jmpBoot[3]; //jmp code
unsigned char BS_OEMName[8]; //oem and os like dos5.0
unsigned int BPB_BytesPerSec; //扇区字节数
unsigned char BPB_SecPerClus; //每簇扇区数
unsigned int BPB_RsvdSecCnt; //保留扇区数
unsigned char BPB_NumFATs; //FAT数目
unsigned int BPB_RootEntCnt; //根目录项数 0
unsigned int BPB_TotSec16; //小扇区总数 0
unsigned char BPB_Media; //媒体描述符
unsigned int BPB_FATSz16; //每FAT扇区数fat32不用为0
unsigned int BPB_SecPerTrk; //每道扇区数
unsigned int BPB_NumHeads; //磁头数
unsigned long BPB_HiddSec; //隐藏扇区数
unsigned long BPB_TotSec32; //总扇区数
unsigned long BPB_FATSz32; //每FAT扇区数fat32
unsigned int BPB_ExtFlag; //fat32扩展标志
unsigned int BPB_FileSysVer; //fat32文件系统版本
unsigned long BPB_RootCluNum; //根目录簇号
unsigned int BPB_FileSysInf; //文件系统信息扇区号
unsigned int BPB_BootBack; //引导扇区备份号
unsigned char BPB_Rsvd[12]; //保留空间
unsigned char BPB_PhyDriNum; //物理驱动器号
unsigned char BPB_Rsvd1; //保留
unsigned char BPB_ExtBootSig; //扩展引导标签
unsigned long BPB_VolumeSer; //分区序号
unsigned char BPB_VolumeLab[11]; //卷标
unsigned char BPB_SysID[8]; //系统ID
};
//fat12/16 BPB结构,包括扩展BPB
struct BootSec
{
unsigned char BS_jmpBoot[3]; //jmp code 0x00
unsigned char BS_OEMName[8]; //oem and os like dos5.0 0x03
unsigned int BPB_BytesPerSec; //扇区字节数 0x0B
unsigned char BPB_SecPerClus; //每簇扇区数 0x0D
unsigned int BPB_RsvdSecCnt; //保留扇区数 0x0E
unsigned char BPB_NumFATs; //FAT数目 0x10
unsigned int BPB_RootEntCnt; //根目录项数 512 0x11
unsigned int BPB_TotSec16; //小扇区总数 <65536时使用 0x13
unsigned char BPB_Media; //媒体描述符 0x15
unsigned int BPB_FATSz16; //每FAT扇区数 0x16
unsigned int BPB_SecPerTrk; //每道扇区数 0x18
unsigned int BPB_NumHeads; //磁头数
unsigned long BPB_HiddSec; //隐藏扇区数
unsigned long BPB_TotSec32; //大扇区数 当小扇区数为0时使用这里
unsigned char BPB_PhyDriNum; //物理驱动器号
unsigned char BPB_Rsvd1; //保留
unsigned char BPB_ExtBootSig; //扩展引导标签
unsigned long BPB_VolumeSer; //卷序号
unsigned char BPB_VolumeLab[11]; //卷标
unsigned char BPB_SysID[8]; //系统ID
};
struct DirEntry
{
unsigned char DIR_Name[11]; //文件名,没有.
unsigned char DIR_Attr; //文件属性,自低至高,只读、隐藏、系统、卷标、子目录、归档
unsigned char DIR_NTRes; //系统保留
unsigned char DIR_CrtTimeTenth; //创建时间的10毫秒位
unsigned int DIR_CrtTime; //创建时间
unsigned int DIR_CrtDate; //创建日期
unsigned int DIR_LastAccDate; //最后访问日期
unsigned int DIR_FstClusHI; //文件起始簇号高16位
unsigned int DIR_WrtTime; //最近修改时间
unsigned int DIR_WrtDate; //最近修改日期
unsigned int DIR_FstClusLO; //文件起始簇号的低16位
unsigned long DIR_FileSize; //文件长度
};
unsigned int fat_read_dir_ent(unsigned long dir_cluster,unsigned int Entry_Count,unsigned long *Size,unsigned char *Dir_Attrib,unsigned char *buff);
unsigned char fat_search_file (unsigned char *File_Name,unsigned long *Cluster,unsigned long *Size,unsigned char *Dir_Attrib,unsigned char *buff);
unsigned char fat_read_file(unsigned int Cluster,unsigned char *buff,unsigned long BlockCount,unsigned char *blockserial);
void fat_load(unsigned long Cluster,unsigned long *Block,unsigned char *TMP_Buffer);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -