fat.h
来自「Atmega64单片机程序(完整工程)」· C头文件 代码 · 共 919 行 · 第 1/3 页
H
919 行
/****************************************Copyright (c)**************************************************
** 广州周立功单片机发展有限公司
** 研 究 所
** ARM开发组
**
** http://www.zlgmcu.com
**
**--------------文件信息--------------------------------------------------------------------------------
**文 件 名: fat.h
**创 建 人: 陈明计
**最后修改日期: 2003年9月3日
**描 述: FAT文件系统总头文件
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 陈明计
** 版 本: V1.0
** 日 期: 2003年9月3日
** 描 述: 原始版本
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人: 陈明计
** 日 期: 2004年4月10日
** 描 述: 修改注释
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#include "SYS_Config.h"
#include "FS_Config.h"
//可以同时打开的文件数目
#ifndef MAX_OPEN_FILES
#define MAX_OPEN_FILES 3
#endif
//文件系统Cache大小(字节),应当是最大的扇区所占字节数
#ifndef DISK_CACHE_SIZE
#define DISK_CACHE_SIZE 512
#endif
//文件系统Cache数目
#ifndef MAX_DISK_CACHES
#define MAX_DISK_CACHES 1
#endif
//可以同时加载的逻辑驱动器数目
#ifndef MAX_DRIVES
#define MAX_DRIVES 1
#endif
#if MAX_OPEN_FILES<0x80
typedef INT8S HANDLE ;
#else
#if MAX_OPEN_FILES<0x8000
typedef INT16S HANDLE ;
#else
typedef INT32S HANDLE ;
#endif
#endif
#define Not_Open_FILE -1
/* 底层驱动命令 */
#define DISK_INIT 0
#define DISK_CLOSE 1
#define DISK_READ_SECTOR 2
#define DISK_WRITE_SECTOR 3
/* 底层驱动返回值 */
#define DISK_READ_OK 0x01
#define DISK_READ_NOT_OK 0x80
#define DISK_WRITE_OK 0x02
#define DISK_WRITE_NOT_OK 0x82
#define DISK_INIT_OK 0x03
#define DISK_INIT_NOT_OK 0x83
#define BAD_DISK_COMMAND 0xffff
/* 函数返回值 */
#define RETURN_OK 0x00
/* 操作成功 */
#define NOT_FIND_DISK 0x01
/* 逻辑盘不存在 */
#define DISK_FULL 0x02
/* 逻辑盘满 */
#define SECTOR_NOT_IN_CACHE 0x03
/* 扇区没有被cache */
#define NOT_EMPTY_CACHE 0x04
/* 没有空闲cache */
#define SECTOR_READ_ERR 0x05
/* 读扇区错误 */
#define CLUSTER_NOT_IN_DISK 0x06
/* 逻辑盘中没有此簇 */
#define NOT_FIND_FDT 0x07
/* 没有发现文件(目录)*/
#define NOT_FAT_DISK 0x08
/* 非FAT文件系统 */
#define FDT_OVER 0x09
/* FDT索引超出范围 */
#define FDT_EXISTS 0x0a
/* 文件(目录)已经存在*/
#define ROOT_FDT_FULL 0x0b
/* 根目录满 */
#define DIR_EMPTY 0x0C
/* 目录空 */
#define DIR_NOT_EMPTY 0x0d
/* 目录不空 */
#define PATH_NOT_FIND 0x0e
/* 路径未找到 */
#define FAT_ERR 0x0f
/* FAT表错误 */
#define FILE_NAME_ERR 0x10
/* 文件(目录)名错误 */
#define FILE_EOF 0x11
/* 文件结束 */
#define FILE_LOCK 0x12
/* 文件被锁定 */
#define NOT_FIND_FILE 0x13
/* 没有发现指定文件 */
#define NOT_FIND_DIR 0x14
/* 没有发现指定目录 */
#define NOT_RUN 0xfd
/* 命令未执行 */
#define BAD_COMMAND 0xfe
/* 错误命令 */
#define PARAMETER_ERR 0xff
/* 非法参数 */
/* 未使用的逻辑盘 */
#define EMPTY_DRIVE 0xff
/* FAT类型 */
#define FAT12 0
#define FAT16 1
#define FAT32 2
/* FDT文件属性 */
#define ATTR_READ_ONLY 0x01
#define ATTR_HIDDEN 0x02
#define ATTR_SYSTEM 0x04
#define ATTR_VOLUME_ID 0x08
#define ATTR_DIRECTORY 0x10
#define ATTR_ARCHIVE 0x20
/* 簇类型 */
#define EMPTY_CLUS 0
#define EMPTY_CLUS_1 1
#define BAD_CLUS 0x0ffffff7L
#define EOF_CLUS_1 0x0ffffff8L
#define EOF_CLUS_END 0x0fffffffL
/* FDT类型 */
#define EMPTY_FDT 0
#define DEL_FDT ((char)(0xe5))
#define ESC_FDT 0x05
/* Cache状态 */
#define CACHE_READED 0x02
#define CACHE_WRITED 0x01
/* 文件指针状态 */
#define FILE_FLAGS_READ 1<<0
// 可读
#define FILE_FLAGS_WRITE 1<<1
// 可写
/* 文件指针调整方式 */
#define SEEK_SET 0
// 从文件开始处移动文件指针
#define SEEK_CUR 1
// 从文件当前位置移动文件指针
#define SEEK_END 2
// 从文件尾移动文件指针
/* 给底层驱动读写命令的参数结构体 */
typedef struct _Disk_RW_Parameter
{
INT8U Drive ; // 驱动器号
INT32U SectorIndex ;// 操作的扇区
INT32U RsvdForLow ; // 保留给底层驱动程序,由_Disk_Info中拷贝过来
INT8U *Buf ; // 数据存储位置
}
Disk_RW_Parameter ;
/* 文件系统cache数据结构 */
typedef struct _Disk_Cache
{
INT8U Drive ; // 驱动器号,EMPTY_DRIVE为空闲
INT8U Flag ; // 状态
INT16U RW_ID ; // 读写ID,用于释放Cache
// INT8U Lock; // 是否锁定扇区
INT32U SecIndex ; // 缓冲的扇区索引
INT8U buf[DISK_CACHE_SIZE];// 缓冲区
}
Disk_cache ;
/* 逻辑盘信息的数据结构 */
typedef struct _Disk_Info
{
INT8U Drive ; // 逻辑驱动器号,EMPTY_DRIVE为还未分配
INT8U FATType ; // 类型:FAT12、FAT16和FAT32
INT8U SecPerClus ; // 每簇扇区数
INT8U NumFATs ; // FAT表数目
INT32U FATStartSec ; // FAT表开始扇区号
INT32U FATSecCnt ; // 每个FAT占用扇区数
INT32U SecPerDisk ; // 逻辑驱动器包含扇区数
INT32U BytsPerSec ; // 每扇区字节数
INT32U RootDirTable ; // 根目录开始扇区号(FAT32为开始簇号)
INT32U RootSecCnt ; // 根目录占用扇区数
INT32U DataStartSec ; // 数据区开始扇区号
INT32U ClusPerData ; // 数据区包含簇数
INT32U PathClusIndex ;// 当前路径的FDT表开始簇号, 0为根目录
INT32U RsvdForLow ; // 保留给底层驱动程序
INT16U(*DiskCommand)(INT8U Command,void *Parameter);// 对应的驱动程序
}
Disk_Info ;
/* 目录表数据结构 */
typedef struct _FDT
{
char Name[11]; //短文件名主文件名
INT8U Attr ; //文件属性
INT8U NTRes ; //保留给NT
INT8U CrtTimeTenth ;//建立时间(fat16保留)
INT16U CrtTime ; //建立时间(fat16保留)
INT16U CrtDate ; //建立日期(fat16保留)
INT16U LstAccDate ; //最后访问日期(fat16保留)
INT16U FstClusHI ; //起始簇号高两个字节(fat16保留)
INT16U WrtTime ; //最后写时间
INT16U WrtDate ; //最后写日期
INT16U FstClusLO ; //起始簇(cluster)号低两个字节
INT32U FileSize ; //文件大小
}
FDT ;
/* 文件信息结构体 */
typedef struct _FILE
{
INT8U Flags ; // 一些标志
char Name[11]; // 文件名
INT8U Drive ; // 文件所在磁盘
INT32U DirClus ; // 所在目录开始簇号
INT32U FileSize ;// 文件大小
INT32U FstClus ; // 起始簇号
INT32U Clus ; // 当前簇号
INT32U Offset ; // 文件指针偏移量
}
MY_FILE ;
/*******************************************************************************************************/
#ifndef IN_FILE
extern void FileInit(void);
/*********************************************************************************************************
** 函数名称: FileInit
** 功能描述: 初始化文件指针系统
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
********************************************************************************************************/
extern INT8U RemoveFile(char *DirFileName);
/*********************************************************************************************************
** 函数名称: RemoveFile
** 功能描述: 删除文件
** 输 入: DirFileName:用户使用的文件名
** 输 出: RETURN_OK:成功
** 其它参考fat.h中关于返回值的说明
** 全局变量: 无
** 调用模块: strupr,_GetFileInfo,GetDrive,FindFDTInfo,FATDelClusChain,DelFDT
********************************************************************************************************/
extern HANDLE FileOpen(char *DirFileName,char *Type);
/*********************************************************************************************************
** 函数名称: FileOpen
** 功能描述: 以指定方式打开文件
** 输 入: DirFileName:用户使用的文件名
** Type:打开方式
** 输 出: 文件句柄,Not_Open_FILE为不能打开
** 全局变量: 无
** 调用模块: _FileOpenR,_FileOpenW,_FileOpenRW
********************************************************************************************************/
extern INT8U FileClose(HANDLE Handle);
/*********************************************************************************************************
** 函数名称: FileClose
** 功能描述: 关闭指定文件
** 输 入: Handle:文件句柄
** 输 出: RETURN_OK:成功
** 其它参考fat.h中关于返回值的说明
** 全局变量: 无
** 调用模块: 无
********************************************************************************************************/
extern INT8U FileGetCh(INT8U *Ch,HANDLE Handle);
/*********************************************************************************************************
** 函数名称: FileGetCh
** 功能描述: 从文件读一个字节
** 输 入: Ch:返回读到的数据
** Handle:文件句柄
** 输 出: RETURN_OK:成功
** 其它参考fat.h中关于返回值的说明
** 全局变量: 无
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?