关于STM32F4XX的FATFS移植

关于FATFS系统

FATFS系统是一种免费开源,专门为小型嵌入式系统设计的文件系统。它完全用C语言编写,支持FAT16与FAT32等多种文件系统模式,支持多种存储媒介,有独立的缓冲区,可对多个文件进行读写,方便裁剪。在使用STM32F4XX的嵌入式系统设计中使用FATFS是较为常见的,由于STM32F系列芯片多数具备SDIO接口,因此一般使用SD卡或miniSD卡作为存储媒介。

使用STM32CubeMX配置和移植FATFS系统

这方面的博文很多,多数写得很详细。这里不再阐述具体配置方法。仅从MX配置出来的文件角度进行说明。一般来说,配置后的STM32工程(MDK开发环境下)会将fatfs的多数文件放入“middlewares/fatfs”文件夹下。这其中的文件一般都被设置为写保护,也无开发人员再次编辑。另一部分文件放入到“application/user”文件夹下,这部分文件是移植中需要开发人员编辑完善的部分。包括:
1.fatfs_platform.h和fatfs_platform.c文件;
2.bsp_driver_sd.h和bsp_driver_sd.h文件;
3.sd_diskio.h和sd_diskio.c文件;
4.fatfs.h和fatfs.c文件;
5.ffconf.h文件。
在很多博文中提到,diskio.c和ffconf.h是移植中需要用户维护的最主要文件。但MX配置后给出的这个工程文件却做了一些调整。
首先,ffconf.h文件的配置项目,在MX配置过程中已经自动完成了调整和设置,因此,实际开发过程中,一般不需要再调整这部分内容了。
第二,diskio.c被作为被保护的文件,实际上是不能被编辑。这个文件实际上是通过调用其他文件,来实现移植的。

diskio.c的移植

阅读源码可知,diskio.c实现了6个存储盘控制的基本功能函数,实现包括初始化,状态检查,读/写控制,io控制和操作时间获取。这个文件引用了ff_gen_drv.h文件。那么ff_gen_drv.h文件实现了什么呢?他定义了两个结构体:
1-Diskio_drvTypeDef结构体实现了对于diskio.c内5个函数的关联,可通过结构体内的成员变量以指针调用相关函数;
2- Disk_drvTypeDef结构体实际上是将多个存储盘纳入统一管理,阅读源码可知,此类型的变量只有一个disk全局变量,并会根据挂载的存储对象,关联几个Diskio_drvTypeDef类型的变量。所以disk是存储盘控制的核心变量;
diskio.c内的几个基本函数都是通过控制disk的成员来调用实现的。在ff_gen_drv.c内,实现五个函数完成disk挂载和卸载Diskio_drvTypeDef类型变量的功能。
到这里我们看,diskio.c实现的是存储盘级别的控制。并且貌似没有与其他文件产生关系。但实际上,一个平行存在的sd_diskio.c才是其中关键。

sd_diskio简介

sd_diskio.c引用了ff_gen_drv.h和bsp_driver_sd.h两个头文件,将bsp_driver_sd.c内的基础驱动函数关联到了disk的相关成员上。这样在diskio.c内相关操作实现是,实际上调用的是bsp_driver_sd.c内的功能函数。
sd_diskio.c内实现 SD_initialize(BYTE lun)等函数,与diskio.c实现的几个函数一一对应,开头以SD_替代了disk_很容易看出对应关系。本文件的内容可以由开发人员编辑补充。

bsp_driver_sd的简介

该文件是sdio接口应用于fatfs移植时的真正底层驱动函数实现,通过查看代码可看到,其中调用的是HAL库函数。这里的函数以BSP_SD_开头,都是weak函数,开发者还可以修改或重写覆盖相关函数,以达到项目中的特殊目的。

fatfs.c文件

可以将该文件视为app层的文件,其内部默认实现一个void MX_FATFS_Init(void)函数来完成文件系统的初始化建立。开发者可以在此文件中添加一些其他常用的app层函数来封装调用ff.c和一些BSP层的操作,达到项目应用目的。

fatfs_platform文件

该文件主要就是实现存储设备的检查,默认实现一个uint8_t BSP_PlatformIsDetected(void)函数。

总结

MX自动生成代码后,主要的工作就是按需改写bsp_driver_sd(或其他存储介质的bsp层文件)文件内的基础函数。并在fatfs.c内实现一些基本的app层函数。当然,也可以另行建立app层文件类承载相关函数,方便其他项目再次使用相关函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值