📄 sd_fat.h
字号:
#define ORWBinary 0 /* 以读写方式打开二进制文件 */
#define CRWBinary 1 /* 以读写方式创建二进制文件 */
#define DelFile 2 /* 删除指定文件 */
#define JDFatMade 0 /* 以绝对磁盘来使用,用于U盘或系统分区 */
#define LJFatMade 1 /* 以逻辑磁盘来使用,用于普通分区 */
#define SDSEEK_SET 0 /* 文件开始位置 */
#define SDSEEK_CUR 1 /* 文件当前位置 */
#define SDSEEK_END 2 /* 文件结束位置 */
/*==============================对常用类型进行可移植性封装================================*/
typedef char BOOL;
typedef char INT8;
typedef short INT16;
typedef long INT32;
typedef long long INT64;
typedef unsigned char UINT8;
typedef unsigned short UINT16;
typedef unsigned long UINT32;
typedef unsigned long long UINT64;
typedef struct
{
UINT8 BS_jmpBoot[3]; /* 跳转指令 */
UINT8 BS_OEMName[8]; /* 厂商名 */
UINT16 BPB_BytsPerSec; /* 每扇区字节数 */
UINT8 BPB_SecPerClus; /* 每簇扇区数 */
UINT16 BPB_RsvdSecCnt; /* 保留扇区数 */
UINT8 BPB_NumFATs; /* FAT表个数 */
UINT16 BPB_RootEntCnt; /* 根目录文件最大数,FAT32中为0 */
UINT16 BPB_TotSec16; /* 扇区总数,FAT32中为0 */
UINT8 BPB_Media; /* 介质描述符 */
UINT16 BPB_FATSz16; /* 每FAT扇区数 */
UINT16 BPB_SecPerTrk; /* 每磁道扇区数 */
UINT16 BPB_NumHeads; /* 磁头数(面数) */
UINT32 BPB_HiddSec; /* 隐藏扇区数 */
UINT32 BPB_TotSec32; /* 若 BPB_TotSec16=0,记录总扇区数 */
UINT8 BS_DrvNum; /* 中断13的驱动器 */
UINT8 BS_Reserved1; /* 保留 */
UINT8 BS_BootSig; /* 扩展引导标记 */
UINT32 BS_Vo1ID; /* 卷序列号 */
UINT8 BS_Vo1Lab[11]; /* 卷标 */
UINT8 BS_FilSysType[8]; /* 文件系统类型 */
UINT8 Code[448]; /* 引导代码 */
UINT16 Over; /* 结束标志 */
} BOOT16;
typedef struct
{
UINT16 Sec:5; /* 秒 */
UINT16 Min:6; /* 分钟 */
UINT16 Hour:5; /* 小时 */
} TIME; /* 时间结构 */
typedef struct
{
UINT16 Day:5; /* 天 */
UINT16 Mon:4; /* 月份 */
UINT16 Year:7; /* 年份 */
} DATA; /* 日期结构 */
typedef struct
{
UINT8 DIR_Name[11]; /* 条目名称,短文件名格式 */
UINT8 DIR_Attr; /* 属性,按位确定,最大数字为0X3f */
UINT8 DIR_No; /* 保留位,应为0 */
UINT8 DIR_MinCrtTime; /* 创建时间精确到10毫秒 */
TIME DIR_CrtTime; /* 创建时间 */
DATA DIR_CrtData; /* 创建日期 */
DATA DIR_RedData; /* 最近访问日期 */
UINT16 DIR_HFstClus; /* 此条目对应开始簇号高16字节 */
TIME DIR_WrtTime; /* 最后修改时间 */
DATA DIR_WrtData; /* 最后修改日期 */
UINT16 DIR_LFstClus; /* 此条目对应开始簇号底16字节 */
UINT32 DIR_FileSize; /* 文件大小 */
} DIR; /* 条目格式结构 */
/* 自实现文件结构 */ /* 暂不支持文件位置指针移动 */
typedef struct
{
UINT32 FDT_Num; /* 记录此文件条目所在扇区号 */
UINT32 FDT_Index; /* 记录此文件条目所在扇区的位置0-15 */
INT32 FileSeek; /* 文件位置指针 */
UINT32 FileSize; /* 记录此文件的当前字节数 */
UINT32 FileStart; /* 记录此文件的开始簇号 */
} SD_FILE;
UINT8 FatBpbStart = 0; /* 记录BPB开始位置,实际为4字节。而U盘实际用一字节可存储 */
UINT8 FatSecPerClus; /* 记录簇的扇区数 */
UINT8 FatRsvdSecCnt; /* 记录保留扇区数,即FAT表开始逻辑扇区 */
UINT16 FatFATSz; /* 记录FAT表占多少扇区,可知备份FAT表开始地方及根目录扇区开始 */
UINT16 FatRootEntCnt; /* 记录根目录项最大数 */
void SD_InitMyFat(UINT8 Mode); /* 进行SDK初始化 */
void SD_DiskWrite(void *buffer, UINT32 start, UINT16 count); /* 写入数据到指定扇区 */
void SD_DiskRead(void *buffer, UINT32 start, UINT16 count); /* 读取指定扇区数据 */
SD_FILE *SD_fopen(UINT8 *Dir, UINT8 Mode); /* 文件打开函数 */
void SD_fseek(SD_FILE *fp, INT32 offset, UINT8 Mode); /* 调整文件位置指针 */
UINT32 SD_fread(UINT8 *buf, UINT16 size, UINT16 count, SD_FILE *fp); /* 文件读取函数 */
UINT32 SD_fwrite(UINT8 *buf, UINT16 size, UINT16 count, SD_FILE *fp); /* 文件写入函数 */
UINT8 SD_fclose(SD_FILE *fp); /* 文件关闭函数 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -