这个是本人写的一个文件系统,它的功能比较全,如支持FAT16,FAT32,支持长文件名,支持子目录,支持中文,支持文件的读取,写入,创建,删除,等许多有用的功能!
最初这个文件系统是为深圳的一个公司开发的,后来索性把这个文件系统公布出来,供更多的人学习,使用,研究!以期它能够得到大家的认可,得到大家的赞予!
下面是这个文件系统的说明书,供大家学习和了解这个文件系统的功能,使用。我还可以提供它的免费的FAT16源代码,你可以用于学习,用于项目上,都没有限制的,
如果你需要源代码,就与我联系吧,我的联系方式是e-mail:tony_yang123@sina.com.cn,qq:292942278.欢迎啦
嵌入式FAT16/32文件系统
1. 总则fficeffice" />
本文件系统兼容FAT16/FAT32文件系统格式,兼容长文件名,兼容GB2312/UNICODE汉字编码(支持中文),并且实现了对子目录的支持,实现了文件的读取,写入,创建,删除等文件系统的常用功能。另外,代码都使用C编写,可以移植到各种单片机平台上来实现文件系统模块。
2. 文件系统字符串规则
1) 盘符规则
a) 盘符规则,盘符的命名从C开始到Z结束
2) 文件名规则(长文件名不超过255字节)
a) 文件名是由文件名和扩展名组成, 1)短文件名不超过8个字节,长文件名不超过255字节 2)扩展名一般为3个字节
b) 文件名为英文字母、数字和下划线的组合
c) 文件名首字符不能为数字
d) 文件名字符不区分大小写
3. 文件系统的功能列举
1) 该文件系统实现了兼容FAT16/FAT32,兼容长文件名,兼容GB2312/UNICODE汉字编码,并且实现了对子目录的支持,实现了文件的读取,写入,创建,删除等文件系统的常用功能。
2) 代码都使用C编写,可以移植到单片机上运行。在单片机上运行程序员需要把虚拟磁盘驱动替换为SD卡或磁盘驱动。
3) 实现了文件读写的缓冲内存:文件缓冲内存越大,读写文件越快,其大小可以编译宏EnableFileBuf,TotalFileBUFsQTYeachFCB,FileBUFSize来设置(fat_cfg.h)。
4. 程序源文件说明
1) fat.c—文件系统的源代码
2) fat.h—文件系统API函数的declare文件
3) Fat_cfg.h—文件系统配置文件
4) Types.h—文件系统的数据类型替换定义
5) Flash_management.c—虚拟磁盘的驱动
6) Time.c—RTC时钟驱动,提供文件的存储,创建,修改时间
5. 文件系统的数据结构(仅供参考,实际的情况可参考文件系统配置文件fat_cfg.h)
1) 分区数据结构—支持FAT16/FAT32
struct partition_BPB{
char partition_id; //从C开始到Z结束
char system_id; //分区类型 ffice:smarttags" />0C-FAT32,06-FAT16 ect..
long relative_sector; //分区起始扇区号
long total_sector; //分区总扇区数
int bytes_per_sector;//每扇区字节数
char sector_per_cluster; //每簇扇区数
int reserved sector; //保留扇区数
char numbers_of_FAT;//FAT副本数
int boot_entries;//根目录项数,供FAT12/16使用
int small_sector; //小扇区簇
char media_descriptor; //媒体描述符
int sectors_per_FAT; //每FAT扇区数,供FAT12/16使用
int sectors_per_track; //每道扇区数
int number_of_head; //磁头数
long hidden_sectors; //隐藏扇区数
long large_sector;//总扇区数,包含FAT32总扇区数
long sector_per_FAT32;//每FAT扇区数,供FAT32使用
int extended flag;// 扩展标志,供FAT32使用
int file_system_version; //文件系统版本
long root_cluster_number;//根目录簇号
int file_system_information_sectornumber; //文件系统信息扇区号
int copy_of_boot_sector;//备份引导扇区
char reserved[12];//保留,,供FAT32使用
};
2) 文件数据结构—支持FAT16/FAT32
struct file_{
char filename[256];//支持长文件名
char file_extention[3]; //文件扩展名
char file_attribute;//属性
char reserved;
char create_time_10ms;//创建时间的10毫秒位
int file_created_time;//文件创建时间
int file_created_date;//文件创建日期
int last_access_date;//文件最后访问日期
int first_cluster_number_high2bytes; //文件首簇号高16位
int recent_modified_time;//文件最近修改时间
int recent_modified_data;//文件最近修改日期
int first_cluster_number_low2bytes; //文件首簇号低16位
long file_length;//文件长度
3) Core数据结构
struct core_{
current_folder[256];//存放当前目录
char file_openned_flag;//标记struct file_已打开
}
6. 文件API函数
1) 自动格式化FAT16函数FAT16_filesystem_autoformat()—该函数在U盘启动时运行,它首先会读取Flash 0扇区的MBR,判断MBR有效标记0x55aa,如果MBR有效标记不是0x55aa,该函数将把Flash自动格式化成FAT16文件系统;起用自动格式化处理,Flash上原有的数据将被迫丢失,因此从安全的角度考虑,建议慎用本函数。
2) FAT文件系统初始化函数char FAT_filesystem_initialiation()—该函数是在U盘启动时调用,它将Flash中默认的第一个分区的信息读入struct partition_BPB中,和初始化struct CORE。
3) 文件建立函数u8 create_file(u8 * filename)—该函数用于在文件系统中建立一个文件,文件名及其路径通过形参char *filename来指定;
4) 目录建立函数u8 create_floder(u8 * foldername)—该函数用于在文件系统建立一个目录,目录名通过形参char *foldername来指定;
5) 文件重命名函数u8 rename_file(u8 * oldfilename,u8 * newfilename)—该函数用于对文件系统中的一个文件重命名,原文件名由参数u8 * oldfilename来指定,新文件名由参数u8 * newfilename来指定;
6) 文件打开函数u8 open_file(u8 * filename)—该函数用于在文件系统中的打开一个文件,文件名通过参数u8 * filename来指定,如果打开文件成功,返回值为当前文件操作句柄FCBsn(FCB sequential number),或0xff—文件打开错误,在错误打开的情况下,建议先使用close_file关闭一个打开的文件后再打开文件。
7) 文件关闭函数u8 close_file(u8 FCBsn)—该函数调用关闭一个已打开的文件,并释放当前文件占用的文件操作句柄,文件操作句柄由FCBsn指定。
8) 当前目录改变函数u8 cd_folder(u8 * foldername,u8 mode)—该函数用于改变文件系统的当前目录,改变至目录由参数u8 * foldername来指定。函数有两种的操作模式分别为:1)参数mode= 0:为进入目录;2)参考mode=1为返回上层目录。
一周热门 更多>