FATFS 文件系统剖析1: FAT16: 数据按照其不同的特点和作用大致可分为5 部分:MBR 区、DBR 区、FAT 区、DIR 区和DATA 区,相比 fat12 多了 DBR 区 Main boot record: MBR(0--1bdh) 磁盘参数存放 DPT(1beh--1fdh) 磁盘分区表 55,aa 分区结束标志 DBR(Dos Boot Record)是操作系统引导记录区的意思 FAT 区(有两个,一个备份):对于 fat16,每一个 fat项 16 位,所以可寻址的簇项数为65535(2 的16 次方)。而其每簇大小不超 过 32k,所以其每个分区最大容量为2G。fat32,每一个 fat项 32 位,可寻址簇数目为2 的32 次方。 DIR 区(根目录区):紧接着第二 FAT 表(即备份的FAT 表)之后,记录着根目录下每个文件(目录)的起始单元,文件的属性等。定位文件位置时,操作系统根据DIR 中的起始单元,结合 FAT 表就可以知道文件在硬盘中的具体位置和大小了。 DATA 区:实际文件内容存放区。 FAT32: 暂时放在这里,不讨论! Fatfs:嵌入式 fat文件系统,支持 fat16,fat32。 包含有 ff.h,diskio.h,integer.h,ffconf.h 四个头文件以及 ff.c 文件系统实现。当然要实现具体的应用移植,自己要根据diskio.h 实现其diskio。c 底层驱动。 diskio.h : 底层驱动头文件 ff.h : 文件系统实现头文件,定义有文件系统所需的数据结构 ff.c : 文件系统的具体实现 如下开始逐个文件加以分析: integer.h :仅实现数据类型重定义,增加系统的可移植性。 ffconf.h : 文件系统配置---逐个配置,先配置实现一个最小的fat 文件系统,下面来分析各配置选项: #define _FFCONF 8255 //版本号 #define _FS_TINY 0 /* 0:Normal or 1:Tiny */ //在这里与先前版本有些许变化,是通过配置头配置两种不同大小的文件系统 ,这里配置为 0。 #define _FS_READONLY 1 //定义文件系统只读,也就不能写修改,在此定义为 1,这样文件系统会大大缩小,简化学习理解过程。 #define _FS_MINIMIZE 3 /* 0 to 3 */ 这个选项是用于过滤掉一些文件系统功能,为 0 时是全功能,3 是功能实现最小 #define _USE_STRFUNC 0 /* 0:Disable or 1/2:Enable */ 是否使用字符串文件接口,为 0,不使用 #define _USE_MKFS 0 /* 0:Disable or 1:Enable */ 制作文件系统,这个功能实现是还要_FS_READONLY=0 #define _USE_FORWARD 0 /* 0:Disable or 1:Enable ...