📄 fat.h
字号:
/*
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 + -