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

📄 fat.h

📁 基于U(375)盘及SD(SPI模式)卡集成文件系统(包括底层驱动)
💻 H
📖 第 1 页 / 共 2 页
字号:
/* 
2007-4-11 2008-1-30
Web:  http://www.wch.cn

FAT文件系统接口 V1.4
支持: FAT12/FAT16/FAT32 支持大扇区U盘 
*/
#ifndef __FAT_H__
#define __FAT_H__

#ifdef __cplusplus
extern "C" {
#endif

#define F_FAT_VER           0X14                            /*程序版本定义*/

/*包含文件*/
#include <LIMITS.H>                                         /*提供类型的大小定义*/
#include "TYPE.H"                                           /*完成对类型的定义*/
#include "CH375.H"                                          /*提供磁盘操作函数*/

/*程序配置*/
/******************************************************************************/
/*命令缓冲区长度(与字节缓冲区共用)从9到256*/
#define FAT_CMD_BUF_LEN     30

/*定义支持扇区的最大字节数 为512的倍数*/
#define FAT_SECTOR_SIZE_DEF 512

/*文件缓冲区从( 1到255 ) * FAT_SECTOR_SIZE*/
#define FAT_FILE_BUF_LEN    (16*FAT_SECTOR_SIZE_DEF)

/*构建有用簇链表的深度2到254*/
#define FAT_CHAIN_LENGTH    2
/*以上配置根据需要进行改写*/

/*大小端配置及是否使用DSP*/
#define MCU_USE_BIG_ENDIAN  0                               /*1(CHAR_BIT=8)大端的MCU,0为小端*/
#define MCU_USE_DSP         0                               /*1(CHAR_BIT=16),否则不是*/

/*以下 1为加入对此类型的文件系统支持,0 取消支持,减少占用空间(确定所用磁盘的文件系统
类型时使用)*/
#define F_USE_FAT32         1                               /*是否支持FAT32文件系统*/
#define F_USE_FAT16         1                               /*是否支持FAT16文件系统*/
#define F_USE_FAT12         1                               /*是否支持FAT12文件系统*/

/*其它配置*/
#define F_EN_DISK_BUF       1                               /*1开启磁盘缓冲,0为关闭*/
#define F_EN_ENUM_BACK      0                               /*1为允许枚举文件时 调用回调函数,0为禁止*/
#define F_EN_WRITE          1                               /*1为允许写磁盘,0为禁止写*/
#define F_EN_BYTE           1                               /*1为允许字节方式操作 0为禁止*/
#define F_RE_TIME           0X03                            /*读写扇区重试次数*/

#define F_EN_LONG_NAME      0                               /*1为在fat_fopen时收集长文件名,0为不收集*/

#if     F_EN_LONG_NAME == 1
#define F_LNAME_BUF_LEN     (10*26)                         /*存放显示长文件名缓冲区长度从1*26到20*26*/
#endif

#define STATIC static
/******************************************************************************/

/*基础宏定义*/
/******************************************************************************/
#define F_CREATE_NEW        0X00                            /*创建一个文件,存在返回错误*/
#define F_CREATE_ALWAYS     0X01                            /*文件存在,删除后再建*/

#define F_TYPE_FAT12        0X01                            /*文件系统为FAT12*/
#define F_TYPE_FAT16        0X02                            /*文件系统为FAT16*/
#define F_TYPE_FAT32        0X03                            /*文件系统为FAT32*/
#define DEF_ATTR            0XFF                            /*不修改属性*/
#define DEF_TIME            0XFFFF                          /*不修改时间*/
#define DEF_DATE            0XFFFF                          /*不修改日期*/
#define DEF_LEN             0XFFFFFFFF                      /*不修改文件长度*/
#define END_FILE            0XFFFFFFFF                      /*文件末尾*/

#define SEC_SIZE            fat_sector_size                 /*当前扇区大小*/

/*文件属性定义*/
#define ATTR_FILE           ((UINT8)0X00)                   /*通常属性*/
#define ATTR_READ_ONLY      ((UINT8)0X01)                   /*只读属性*/
#define ATTR_HIDDEN         ((UINT8)0X02)                   /*隐藏属性*/
#define ATTR_SYSTEM         ((UINT8)0X04)                   /*系统属性*/
#define ATTR_VOLUME_ID      ((UINT8)0X08)                   /*卷标属性*/
#define ATTR_DIRECTORY      ((UINT8)0X10)                   /*目录属性*/
#define ATTR_ARCHIVE        ((UINT8)0X20)                   /*存档属性*/
#define ATTR_LFN_ENTRY      ((UINT8)0X0F)                   /*长文件名属性*/
#define ATTR_ROOT_DIR       ((UINT8)0X90)                   /*根目录属性*/

#define FILE_EMPTY          ((UINT8)0X00)                   /*文件空*/
#define FILE_DELETED        ((UINT8)0XE5)                   /*文件删除标志*/

/*函数宏*/
#define MDATE( y, m, d )    (((y-1980)<<9) + (m<<5) + d )   /*生成文件时间*/
#define MTIME( h, m, s )    ((h<<11) + (m<<5) + (s>>1) )    /*生产文件日期*/

/*函数返回定义*/
#define F_OK                0X00                            /*正确返回*/
#define F_ERROR             0X01                            /*错误返回*/

#define PARAMETER_CMD_ERR   0X02                            /*参数错误*/
#define READ_DATA_ERR       0X03                            /*读数据出错*/
#define WRITE_DATA_ERR      0X04                            /*写数据出错*/
#define NO_FREE_ROOM_ERR    0X05                            /*磁盘空间不够*/
#define BUFFER_OVERFLOW_ERR 0X06                            /*存放簇链的数组缓冲区溢出错误*/
#define NO_FREE_DIR_ERR     0X07                            /*在根目录下没有空间来创建文件(FAT12/16)*/
#define CMDBUF_OVERFLOW_ERR 0X08                            /*命令缓冲区溢出错误*/
#define NO_DISK_BUF_ERR     0X09                            /*没有开启磁盘缓冲区错误*/

#define FILE_EXIST_ERR      0X0A                            /*文件或文件夹存在错误*/
#define NOT_FIND_FILE_ERR   0X0B                            /*没有发现文件*/
#define NOT_FIND_DIR_ERR    0X0C                            /*没有发现目录*/
#define FILE_DIR_FAT_ERR    0X0E                            /*文件或目录的FAT表破坏*/
#define FILE_NOT_OC_ERR     0X0F                            /*文件没有打开或以关闭错误*/

#define NO_DEF_FAT_ERR      0X10                            /*此文件系统支持,但没有使用此文件系统错误*/
#define NO_SUPPORT_FS_ERR   0X11                            /*不支持此类型的文件系统*/
#define SET_ENDIAN_ERR      0X13                            /*大小端设置错误*/
#define PART_ACTIVE_ERR     0x14                            /*MBR分区激活标志错误*/
#define SECTOR_SIZE_ERR     0x15                            /*定义磁盘缓冲区太小*/
#define END_OF_FILE_ERR     0X16                            /*到达文件末尾*/
#define FAT12_SIZE_ERR      0X17                            /*FAT12只支持512字节扇区的盘*/

#define NO_LONG_NAME_ERR    0X20                            /*没有发现长文件名*/
#define BAD_LONG_NAME_ERR   0X21                            /*坏的长文件名*/
#define LNAME_BUFF_OVER_ERR 0X22                            /*长件名缓冲区溢出错误*/

#define ENUM_FILE_OK        0XFF                            /*成功枚举到一个文件*/

/******************************************************************************/

/*程序使用全局变量*/
/******************************************************************************/
/*定义结构体类型*/
typedef union
{
    struct
    {
        UINT8   buffer[ FAT_CMD_BUF_LEN ];
    } all;
    struct
    {
        UINT8   buffer[ FAT_CMD_BUF_LEN ];                  /*打开文件*/
    } open;
    struct
    {
        UINT8   buffer[ FAT_CMD_BUF_LEN ];                  /*创建文件*/
    } create;
    struct
    {
        UINT8   buffer[ FAT_CMD_BUF_LEN ];                  /*删除文件*/
    } del;
    struct
    {
        UINT8   sector;                                     /*每次读出扇区数,返回实际读取扇区数*/
    } read;
    struct
    {
        UINT16   sector;                                    /*写入总扇区数*/
    } write;
    struct
    {
        UINT8   sector;                                     /*每次读出扇区数,返回实际读取扇区数*/
        UINT8   reserv[3];
        PUINT8  buffer;                                     /*读取数据存放缓冲区*/
    } readx;
    struct
    {
        UINT16  sector;                                     /*写入总扇区数,返回剩余扇区数*/
        UINT8   reserv[2];
        PUINT8  buffer;                                     /*写入数据存放缓冲区*/
    } writex;
    struct
    {
        UINT32  sector;                                     /*扇区偏移*/
    } locate;
    struct
    {
        UINT32  size;                                       /*文件长度 0XFFFFFFFF则不修改*/
        UINT16  date;                                       /*文件访问日期 0XFFFF则不修改*/
        UINT16  time;                                       /*文件访问时间 0XFFFF则不修改*/
        UINT8   attr;                                       /*文件属性     0XFF则不修改*/
    } modify;                                               /*修改文件目录数据*/

⌨️ 快捷键说明

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