打印
[其他]

FATFS文件系统的移植

[复制链接]
646|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
51xlf|  楼主 | 2023-1-29 10:43 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

首先从官网上下载FATFS源码(版本为0.13)
下载后如下文件夹:
其中documents文件夹是所有函数使用说明和扩展功能,一般不需要,source文件夹是移植需要的文件。打开source文件夹有如下文件:

其中00history文本文件是所有版本的说明,00readme文本文件是下载这个版本的说明,剩下的文件是非常重要的,其中diskio.c和diskio.h文件是底层IO接口的驱动程序,这两个文件只写出的外部接口,函数中的代码需要用户自己写驱动,ff.h和ff.c文件是供用户使用的操作文件的函数,ffconf.h是文件系统的配置文件,这个文件是一些功能的开关,比如需要用到长文件名,就必须在这个文件中设置响应的值。ffsystem.c文件是动态内存分配文件,这个文件一般可以不使用,因为一般用静态内存分配池就够用了,除非是特殊场合。ffunicode.c文件是文件系统的文字编码表,其中有英文和部分中文编码,简单的说就是字库文件。integer.h文件是字符说明文件,因为在MDK中的字符类型与FATFS字符类型不同,因此需要这个文件来声明字符类型之间的转换。
总的来说,这次我们只需要使用以下文件:
这7个文件是必须要使用的。
由于这次使用的是SD卡来做试验,因此这次还需要两个文件:sd_spi.c和sd_spi.h文件。这两个文件需要自己写,就是SD卡的驱动程序,其中需要对SD卡进行扇区读写操作。这里使用的是SPI协议,而且使用的是IO口模拟方式。原因是因为IO口模拟方式很容易一直到低端单片机上进行实验,这里我们使用STM32F103ZET6来进行实验。
现在开始移植:
首先新建一个文件夹FATFS作为这次实验的存放位置,然后建立三个文件夹,分别是CMSIS,USER,FATFS。其中CMSIS用来存放STM32相关的内核文件,USER存放用户的其他外设程序,其中主函数也存放在这个文件夹中,FATFS用来存放文件系统相关的文件,以为就是以上7个源码文件和2个SD卡驱动文件。如下9个文件:
然后打开MDK新建一个工程,命名为test。
选择响应的芯片,然后添加必要的文件以及文件的路径:

接下来需要修改diskio.c文件中的函数。打开该文件,看到第一个函数,这个函数是获取存储卡状态的函数,这里我们认为SD卡状态是正常的,直接注释函数里面的所有代码,最后返回0即可。
接下来修改下一个函数,这个函数是初始化存储卡,由于这里只有SD卡,所以注释其他情况,修改如下:
接下来修改读扇区函数:
然后修改写扇区函数:
还有一个函数需要修改,由于这个函数是获取SD卡的基本信息,因此也可以直接注释,直接返回0即可:
因为文件系统必须提供时间,但这里虽然没有写出时间函数,我们也必须要增加时间函数,只是写一个函数名,供上层调用,其没有实际意义,但是没有这个函数名就会报错:
接下来我们修改配置文件ffconf.h文件:
开放扩展功能,因为长文件名就是扩展功能。
接下来开放长文件名,打开长文件名。
注意:打开长文件名的主要作用就是区分大小写,如果不开放长文件名,在建文件夹时都是大写,无法建立小写的文件夹名,因此开放长文件名很有必要
为了减小编译出来的代码大小,我们使用美国的ASCII编码:
此时所有需要修改的部分全部完成了。
接下来我们需要写主函数进行测试,新建一个主函数文件,测试代码如下:
至此文件系统的移植完成了,



loading.gif (1.07 KB )

loading.gif

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

534

主题

9339

帖子

19

粉丝