1. FatFS文件系统介绍
1.1 简要介绍
文件系统,它是为了存储和管理数据,而在存储介质建立的一种组 织结构,这些结构包括操作系统引导区、目录和文件。常见的 windows 下的文件系统格式 包括 FAT32、NTFS、exFAT。在使用文件系统前,要先对存储介质进行格式化。格式化先 擦除原来内容,在存储介质上新建一个文件分配表和目录。这样,文件系统就可以记录数 据存放的物理地址,剩余空间。
文件系统庞大而复杂,它 需要根据应用的文件系统格式而编写,而且一般与驱动层分离开来,很方便移植,所以工 程应用中一般是移植现成的文件系统源码。
FatFs 是面向小型嵌入式系统的一种通用的 FAT 文件系统。它完全是由 ANSI C 语言编 写并且完全独立于底层的 I/O 介质。因此它可以很容易地不加修改地移植到其他的处理器 当中,如 8051、PIC、AVR、SH、Z80、H8、ARM 等。FatFs 支持 FAT12、FAT16、 FAT32 等格式,所以我们利用前面写好的 SPI Flash 芯片驱动,把 FatFs 文件系统代码移植 到工程之中,就可以利用文件系统的各种函数,对 SPI Flash 芯片以“文件”格式进行读写 操作了。
FatFs 文件系统的源码可以从 fatfs 官网下载: http://elm-chan.org/fsw/ff/00index_e.html
1.2 源码分析
包括doc/ 和 src/ 两个文件夹,doc 是帮助文档,直接双击 00index_e.html 即可查看。
src 文件夹下的源码文件功能简介如下:
integer.h:文件中包含了一些数值类型定义。
diskio.c:包含底层存储介质的操作函数,这些函数需要用户自己实现,主要添加 底层驱动函数。
ff.c: FatFs 核心文件,文件管理的实现方法。该文件独立于底层介质操作文件的 函数,利用这些函数实现文件的读写。
cc936.c:本文件在 option 目录下,是简体中文支持所需要添加的文件,包含了简 体中文的 GBK 和 Unicode 相互转换功能函数。
ffconf.h:这个头文件包含了对 FatFs 功能配置的宏定义,通过修改这些宏定义就可 以裁剪 FatFs 的功能。
如需要支持简体中文,需要把 ffconf.h 中的_CODE_PAGE 的宏改成 936 并把上面的 cc936.c 文件加入到工程之中。
建议阅读这些源码的顺序为:integer.h --> diskio.c --> ff.c 。
阅读文件系统源码 ff.c 文件需要一定的功底,建议读者先阅读 FAT32 的文件格式(关于FAT文件系统,可以参考FAT32: