嵌入式FAT文件系统

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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使用

};

相关文档
最新文档