在移植FatFs文件系统到开发板之前,我们先要到FatFs的官网获取源码,最新版本为R0.11a,官网有对FatFs做详细的介绍,有兴趣可以了解。解压之后可看到里面有 doc 和 src 这两个文件夹,见图 25-1。doc 文件夹里面是一些使用帮助文档; src 才是FatFs文件系统的源码。
图 25-1 FatFs文件目录
25.2.2 FatFs帮助文档打开 doc 文件夹,可看到如图 25-2的文件目录:
图 25-2 doc文件夹的文件目录
其中 en 和 ja 这两个文件夹里面是编译好的html文档,讲的是FATFS里面各个函数的使用方法,这些函数都是封装得非常好的函数,利用这些函数我们就可以操作SPI Flash芯片。有关具体的函数我们在用到的时候再讲解。这两个文件夹的唯一区别就是 en 文件夹下的文档是英文的,ja 文件夹下的是日文的。img文件夹包含en和ja文件夹下文件需要用到的图片,还有四个名为app.c文件,内容都是FatFs具体应用例程。00index_e.html和00index_j.html是一些关于FATFS的简介,至于另外两个文件可以不看。
25.2.3 FATFS源码打开 src 文件夹,可看到如图 25-3的文件目录:
图 25-3 src文件夹的文件目录
option 文件夹下是一些可选的外部c文件,包含了多语言支持需要用到的文件和转换函数。
diskio.c文件是FatFs移植最关键的文件,它为文件系统提供了最底层的访问QSPI Flash芯片的方法,FatFs有且仅有它需要用到与QSPI Flash芯片相关的函数。diskio.h定义了FatFs用到的宏,以及diskio.c文件内与底层硬件接口相关的函数声明。
00history.txt介绍了FatFs的版本更新情况。
00readme.txt说明了当前目录下 diskio.c 、diskio.h、ff.c、ff.h、integer.h的功能。
src文件夹下的源码文件功能简介如下:
q integer.h:文件中包含了一些数值类型定义。
q diskio.c:包含底层存储介质的操作函数,这些函数需要用户自己实现,主要添加底层驱动函数。
q ff.c: FatFs核心文件,文件管理的实现方法。该文件独立于底层介质操作文件的函数,利用这些函数实现文件的读写。
q cc936.c:本文件在option目录下,是简体中文支持所需要添加的文件,包含了简体中文的GBK和Unicode相互转换功能函数。
q ffconf.h:这个头文件包含了对FatFs功能配置的宏定义,通过修改这些宏定义就可以裁剪FatFs的功能。如需要支持简体中文,需要把ffconf.h中的_CODE_PAGE 的宏改成936并把上面的cc936.c文件加入到工程之中。
建议阅读这些源码的顺序为:integer.h --> diskio.c --> ff.c 。
阅读文件系统源码ff.c文件需要一定的功底,建议读者先阅读FAT32的文件格式,再去分析ff.c文件。若仅为使用文件系统,则只需要理解integer.h及diskio.c文件并会调用ff.c文件中的函数就可以了。本章主要讲解如何把FATFS文件系统移植到开发板上,并编写一个简单读写操作范例。
25.3 FatFs文件系统移植实验 25.3.1 FatFs程序结构图移植FatFs之前我们先通过FatFs的程序结构图了解FatFs在程序中的关系网络,见图 25-4。