图 25-4 FatFs程序结构图
用户应用程序需要由用户编写,想实现什么功能就编写什么的程序,一般我们只用到f_mount()、f_open()、f_write()、f_read()就可以实现文件的读写操作。
FatFs组件是FatFs的主体,文件都在源码src文件夹中,其中ff.c、ff.h、integer.h以及diskio.h四个文件我们不需要改动,只需要修改ffconf.h和diskio.c两个文件。
底层设备输入输出要求实现存储设备的读写操作函数、存储设备信息获取函数等等。我们使用QSPI Flash芯片作为物理设备,在上一章节已经编写好了QSPI Flash芯片的驱动程序,这里我们就直接使用。
25.3.2 硬件设计FatFs属于软件组件,不需要附带其他硬件电路。我们使用QSPI Flash芯片作为物理存储设备,其硬件电路在上一章已经做了分析,这里就直接使用。
25.3.3 FatFs移植步骤上一章我们已经实现了QSPI Flash芯片驱动程序,并实现了读写测试,为移植FatFs方便,我们直接拷贝一份工程,我们在工程基础上添加FatFs组件,并修改main函数的用户程序即可。
1) 先拷贝一份QSPI Flash芯片测试的工程文件(整个文件夹),并修改文件夹名为“QSPI—FatFs文件系统”。将FatFs源码中的src文件夹整个文件夹拷贝一份至“QSPI—FatFs文件系统\USER\”文件夹下并修改名为“FATFS”,见图 25-5。
图 25-5 拷贝FatFs源码到工程
2) 使用KEIL软件打开工程文件(..\QSPI—FatFs文件系统\Project\RVMDK(uv5)\ BH-F767.uvprojx),并将FatFs组件文件添加到工程中,需要添加有ff.c、diskio.c和cc936.c三个文件,见图 25-6。
图 25-6 添加FatFS文件到工程
3) 添加FATFS文件夹到工程的include选项中。打开工程选项对话框,选择“C/C++”选项下的“Include Paths”项目,在弹出路径设置对话框中选择添加“FATFS”文件夹,见图 25-7。
图 25-7 添加FATFS路径到工程选项
4) 如果现在编译工程,可以发现有两个错误,一个是来自diskio.c文件,提示有一些头文件没找,diskio.c文件内容是与底层设备输入输出接口函数文件,不同硬件设计驱动就不同,需要的文件也不同;另外一个错误来自cc936.c文件,提示该文件不是工程所必需的,这是因为FatFs默认使用日语,我们想要支持简体中文需要修改FatFs的配置,即修改ffconf.h文件。至此,将FatFs添加到工程的框架已经操作完成,接下来要做的就是修改diskio.c文件和ffconf.h文件。
25.3.4 FatFs底层设备驱动函数