FATFS文件系统的移植

首先从官网上下载FATFS源码(版本为0.13)网址:http://elm-chan.org/fsw/ff/00index_e.html

 

下载后如下文件夹:

其中documents文件夹是所有函数使用说明和扩展功能,一般不需要,source文件夹是移植需要的文件。打开source文件夹有如下文件:

 

 

其中00history文本文件是所有版本的说明,00readme文本文件是下载这个版本的说明,剩下的文件是非常重要的,其中diskio.cdiskio.h文件是底层IO接口的驱动程序,这两个文件只写出的外部接口,函数中的代码需要用户自己写驱动,ff.hff.c文件是供用户使用的操作文件的函数,ffconf.h是文件系统的配置文件,这个文件是一些功能的开关,比如需要用到长文件名,就必须在这个文件中设置响应的值。ffsystem.c文件是动态内存分配文件,这个文件一般可以不使用,因为一般用静态内存分配池就够用了,除非是特殊场合。ffunicode.c文件是文件系统的文字编码表,其中有英文和部分中文编码,简单的说就是字库文件。integer.h文件是字符说明文件,因为在MDK中的字符类型与FATFS字符类型不同,因此需要这个文件来声明字符类型之间的转换。

总的来说,这次我们只需要使用以下文件:

 

7个文件是必须要使用的。

由于这次使用的是SD卡来做试验,因此这次还需要两个文件:sd_spi.csd_spi.h文件。这两个文件需要自己写,就是SD卡的驱动程序,其中需要对SD卡进行扇区读写操作。这里使用的是SPI协议,而且使用的是IO口模拟方式。原因是因为IO口模拟方式很容易一直到低端单片机上进行实验,这里我们使用STM32F103ZET6来进行实验。

现在开始移植:

首先新建一个文件夹FATFS作为这次实验的存放位置,然后建立三个文件夹,分别是CMSIS,USER,FATFS。其中CMSIS用来存放STM32相关的内核文件,USER存放用户的其他外设程序,其中主函数也存放在这个文件夹中,FATFS用来存放文件系统相关的文件,以为就是以上7个源码文件和2SD卡驱动文件。如下9个文件:

 

然后打开MDK新建一个工程,命名为test

 

选择响应的芯片,然后添加必要的文件以及文件的路径:

 

 

接下来需要修改diskio.c文件中的函数。打开该文件,看到第一个函数,这个函数是获取存储卡状态的函数,这里我们认为SD卡状态是正常的,直接注释函数里面的所有代码,最后返回0即可。

 

接下来修改下一个函数,这个函数是初始化存储卡,由于这里只有SD卡,所以注释其他情况,修改如下:

 

接下来修改读扇区函数:

 

然后修改写扇区函数:

 

还有一个函数需要修改,由于这个函数是获取SD卡的基本信息,因此也可以直接注释,直接返回0即可:

 

因为文件系统必须提供时间,但这里虽然没有写出时间函数,我们也必须要增加时间函数,只是写一个函数名,供上层调用,其没有实际意义,但是没有这个函数名就会报错:

 

接下来我们修改配置文件ffconf.h文件:

开放扩展功能,因为长文件名就是扩展功能。

 

接下来开放长文件名,打开长文件名。

 

注意:打开长文件名的主要作用就是区分大小写,如果不开放长文件名,在建文件夹时都是大写,无法建立小写的文件夹名,因此开放长文件名很有必要

为了减小编译出来的代码大小,我们使用美国的ASCII编码:

 

此时所有需要修改的部分全部完成了。

接下来我们需要写主函数进行测试,新建一个主函数文件,测试代码如下:

 

至此文件系统的移植完成了,

 

posted @ 2018-07-27 18:35  LSWen  阅读(1721)  评论(1编辑  收藏  举报