嵌入式FAT文件系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
嵌入式FAT文件系统
嵌入式FAT文件系统
1.总则
本文件是嵌入式FAT文件系统技术资料,嵌入式FA T文件系统开发,应用人员均可通过阅读本文件,以掌握文件系统的原理,和应用。
2.参考文件
1)Microsoft Hardware White Paper FAT: General Overview of On-Disk Format
2)Microsoft Hardware White Paper Long Filename Specification
3.命名规范
1)盘符命名规范
a)盘符以物理磁盘分区的先后次序分配,从C开始到Z结束
2)文件命名规范(支持长文件名)
a)文件名由文件名和扩展名两部分组成,其中1)短文件名长度不超过8个字符,长
文件名长度不超过255个字符2)文件扩展名不超过3个字符
b)文件名统一使用英文字母、数字和下划线的组合
c)文件名称必须由字母开始
d)文件名不区分大小写
4.文件寻址路径规范
1)文件寻址路径规范采用与Windows/DOS兼容的规范,其中
a)在路径的开始在“:\”前面用一个英文字母表示寻址盘符,盘符从C开
始到Z结束;路径以字符“\”开始,则表示从当前打开盘符根目录开始寻址;
路径以字符“A”“Z”开始,第二个字符不是“:”,为相对路径,表示从文件系
统的当前目录开始寻址;
b)父目录与子目录之间用“\”分符,“\”后面的目录是子目录,其父目录在“\”之前。
c)文件名应放在文件寻址路径之后,相对路径文件寻址路径默认为文件系统的当前
目录
d)使用进入目录函数char cd_folder(char * foldername,char mode)可改变文件系统
的当前目录
e)路径实例--“c:\dos\program files\arv.c”表示寻址c盘根目录,dos子目录,program
files子目录的文件avr.c
f)路径最大长度占用字节数不超过260,如路径”c:\program
files\system32\.....\Jsmart Memory Stick AVR”占用字节数不能超过260;
相对路径如” system32\.....\Jsmart Memory Stick A VR”加上当前目录之和占用字节数
不超过260
g)文件寻址路径不区分大小写
5.源程序文件规范
1)fat.c—file system 源代码
2)fat.h—file system include文件
3)Fat_cfg.h—file system 配置文件*.h
4)Types.h—数据类型重定义文件
5)Flash_management_sys.h—Sector读写include文件
6.其它
1)兼容FAT16文件系统,长文件名,最大路径长度260个字节,符合Microsoft Longfilename
specification。
2)可移植于各种平台,只需编写sector驱动驱动,共计两个函数:1)read_flash_sector() 2)
write_flash_sector()。
3)文件缓冲功能:1)读文件时,读位置在文件缓冲区内,则可直接读文件缓冲区,不需
要读物理磁盘;文件缓冲区大小可使用编译宏EnableFileBuf,TotalFileBUFsQTYeachFCB,FileBUFSize来控制。
4)可同时打开多个文件;最大打开文件数可使用编译宏MaximumFCB设定,
MaximumFCB最大值限定为254。
5)文件保护功能:文件可同时打开多个FCB,而只有其中一个FCB可以得到文件RD/WR
权限。该功能完全由文件系统代码来完成,上层应用无需编写额外代码
6)所有编译宏存放于文件fat_cfg.h
7.核心文件系统数据结构(仅供参考,实际定义于配置文件fat_cfg.h)
1)分区数据结构—支持FAT16
struct partition_BPB{
char partition_id; //从C开始到Z结束
char system_id; //分区类型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 externded flag;// 扩展标志,供FAT32使用
int file_system_version; //文件系统版本
long root_cluster_number;//根目录簇号
int file_system_information_sectornumber; //文件系统信息扇区号
int copy_of_boot_sector;//备份引导扇区
char reserved[12];//保留,,供FAT32使用
};