1 前言
本文将根据我的一些理解,针对elm FatFs文件系统做一个初步总结。
2 elm FatFs文件系统介绍
顾名思义FatFs文件系统就是针对FAT文件系统来的,主要是应用于MCU中,STM32官方提供的文件系统就是这个,STM32CubeMx工具也集成了这个文件系统,同时一些国产MCU操作系统中也集成了这个文件系统,比如RTT(rt-thread),它是第三方提供的开源代码,是一个日本人开发的,开源官网为: http://elm-chan.org/fsw/ff/00index_e.html .
FatFs文件系统之所以这么流行,主要是因为它简单易用,移植非常方便。
如上图,中间绿色部分为FatFs文件系统模块。APP通过FatFs模块来实现对存储模块的读写访问。FatFs模块不但可以管理单个存储设备,同时也可以管理多个,如下图所示:
如上图,蓝色部分为FatFs模块,绿色部分为读写外部存储设备的驱动接口。蓝色部分与绿色部分是分开的,也就是说,FatFs是与底层分开的,它是完全抽象出来的独立于HAL层之上的中间件模块。上层APP正是通过这个中间件模块来实现对底层存储模块的访问,而访问的手段或接口集合我们称之为驱动。一个驱动往往与一个具体的存储设备对应,FatFs与驱动是分开的,那么,我们需要将存储设备对应的操作驱动注册或链接到文件系统中,这样,文件系统才知道它底层有这个一个存储设备,并且可以通过这个驱动来操作它,当然,也可以注册多个设备的驱动,如上图右边的图b,这样,文件系统就知道它底层有多个存储设备,并在注册的过程中,为每个驱动分配一个唯一的卷号,以便后面使用卷号来操作存储设备中的文件。
3 FatFs文件系统移植
如上图,蓝色部分为FatFs文件系统,ff.h负责对APP提供使用接口,ffconf.h为FatFs文件系统的配置参数,integer.h为FatFs文件系统内部通用数据类型定义,便于跨平台移植,diskio.h负责连接FatFs与存储设备驱动。因此,基于不同的存储设备,实现FatFs与底层驱动的对接是关键。
要实现FatFs与底层驱动的对接,我们首先得为底层存储设备实现一套驱动接口,FatFs为这个底层存储设备驱动专门定义了一个数据结构:
typedef struct
{
DSTATUS (*disk_initialize) (BYTE); /*!< Initialize Disk Drive */
DSTATUS (*disk_status) (BYTE);