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

📄 sd_fat.h

📁 本代码主要是完成了一套基于FAT16
💻 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 + -