📄 fat16.h
字号:
#ifndef __FAT16_H__
#define __FAT16_H__
#include "datatype.h"
#include "sd.h"
#define FIND_BPB_UP_RANGE 0x1000
#define FAT_TYPE_FAT12 12
#define FAT_TYPE_FAT16 16
#define FAT_TYPE_FAT32 32
typedef struct _FAT16_BPB
{
INT8U BS_jmpBoot[3]; //跳转指令 offset: 0
INT8U BS_OEMName[8]; // offset: 3
INT8U BPB_BytesPerSec[2]; //每扇区字节数 offset:11
INT8U BPB_SecPerClus[1]; //每簇扇区数 offset:13
INT8U BPB_RsvdSecCnt[2]; //保留扇区数目 offset:14
INT8U BPB_NumFATs[1]; //此卷中 FAT表数 offset:16
INT8U BPB_RootEntCnt[2]; //FAT32 为 0 offset:17
INT8U BPB_TotSec16[2]; //FAT32 为 0 offset:19
INT8U BPB_Media[1]; //存储介质 offset:21
INT8U BPB_FATSz16[2]; //FAT32为 0 offset:22
INT8U BPB_SecPerTrk[2]; //磁道扇区数 offset:24
INT8U BPB_NumHeads[2]; //磁头数 offset:26
INT8U BPB_HiddSec[4]; //FAT 区前隐扇区数 offset:28
INT8U BPB_TotSec32[4]; //该卷总扇区数 offset:32
INT8U BPB_FATSz32[4]; //一个 FAT表扇区数 offset:36
INT8U BPB_ExtFlags[2]; //FAT32 特有 offset:40
INT8U BPB_FSVer[2]; //FAT32 特有 offset:42
INT8U BPB_RootClus[4]; //根目录簇号 offset:44
INT8U FSInfo[2]; //保留扇区FSINFO扇区数 offset:48
INT8U BPB_BkBootSec[2]; //通常为 6 offset:50
INT8U BPB_Reserved[12]; //扩展用 offset:52
INT8U BS_DrvNum[1]; // offset:64
INT8U BS_Reserved1; // offset:65
INT8U BS_BootSig; // offset:66
INT8U BS_VolID[4]; // offset:67
INT8U BS_FilSysType[11]; // offset:71
INT8U BS_FilSysType1[8]; //"FAT32 " offset:82
}FAT16_BPB, *PFAT16_BPB;
typedef struct _FAT16_INIT_ARG
{
INT32U BPBSecNo; //BPB 所在扇区号
INT32U TotSize; //磁盘的总容量
INT32U TotSec; //总扇区数
INT32U FirstDirClus; //根目录的开始簇
INT32U FirstDataSec; //文件数据开始扇区号
INT16U BytesPerSec; //每个扇区的字节数
INT16U FATSz; //FAT 表所占扇区数
INT8U SecPerClus; //每簇的扇区数
INT32U FirstFATSec; //第一个 FAT 表所在扇区
INT32U FirstDirSec; //第一个目录所在扇区
INT32U RootDirSz; //根目录所占扇区数
INT32U RootDirCount; //根目录下的目录与文件数
INT32U DataSec; //数据扇区数
INT32U ClusCnt; //簇数
INT8U FATType; //文件系统类型
}FAT16_INIT_ARG, *PFAT16_INIT_ARG;
//定义FAT16根目录表结构体变量类型
typedef struct _FAT16_DIR
{
INT8U Name[8]; //文件名
INT8U Ext[3]; //扩展名
INT8U Attr; //文件属性
INT8U NTRes; //系统保留
INT8U CrtTimeTeenth; //创建时间的10毫秒位
INT8U CrtTime[2]; //文件创建时间
INT8U CrtDate[2]; //文件创建日期
INT8U LastAccDate[2]; //最后访问日期
INT8U FstClusH[2]; //文件起始簇号高16位
INT8U ModTime[2]; //文件修改时间
INT8U ModDate[2]; //文件修改日期
INT8U FstClusL[2]; //文件起始簇号低16位
INT8U FileSize[4]; //表示文件的长度
}FAT16_DIR, *PFAT16_DIR;
typedef struct _FILE_INFO
{
INT8U Name[12]; //文件名
INT32U FstClus; //文件首簇号
INT32U CurClus; //文件当前簇号
INT32U NextClus; //下一簇号
INT32U Size; //文件大小
INT8U Attr; //文件属性
INT16U CrtTime; //文件建立时间
INT16U CrtDate; //文件建立日期
INT16U ModTime; //文件修改时间
INT16U ModDate; //文件修改日期
INT32U CurSec; //文件当前扇区
INT32U Offset; //文件偏移量
}FILE_INFO, *PFILE_INFO;
extern FAT16_INIT_ARG g_Fat16InitArg;
extern FILE_INFO g_FileInfo;
extern INT8U g_u8Fat16Buf[512];
extern INT8U FAT16_Init(PFAT16_INIT_ARG pArg);
extern INT32U FAT16_FindBPB(void);
extern INT32U FAT16_GetNextClus(INT32U u32CurClus);
extern INT8U FAT16_CmpFileName(INT8U *pNameSrc, INT8U *pNameTag);
extern INT32U FAT16_OpenFile(INT8U *pFileName, PFILE_INFO pg_FileInfo);
extern INT32U FAT16_ReadFile(PFILE_INFO pg_FileInfo);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -