嵌入式FAT16/32文件系统大揭秘

2019-08-20 18:13发布

 这个是本人写的一个文件系统,它的功能比较全,如支持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)        实现了文件读写的缓冲内存:文件缓冲内存越大,读写文件越快,其大小可以编译宏EnableFileBufTotalFileBUFsQTYeachFCBFileBUFSize设置(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为返回上层目录。
0条回答

一周热门 更多>