STM32的FATFS文件系统移植

准备工作

        本移植基于STM32HAL库,在开始移植之前准备好一个Cubemx、一个待移植的FATFS源码和一张文件格式为FAT32且大小小于等于32G的SD卡。本项目用的是正点原子的F103开发板。

        源码下载:FatFs - Generic FAT Filesystem Module

移植开始

        cubemx代码

        此处配置为SD 1bit(正点原子的开发板有bug,配置为四线后用不了)。

主意,这里的SDIO读写速度计算公式如下

        时钟树下此处的频率(36MHz/(4+2))除以用户自定义的分频系数+2才是真实输出的读写时钟频率,此处为8MHz。

        Fatfs库移植

        库文件导入以后 先打开diskio.c文件内先把diskio.c里的头文件引用全部移到.h里,并添加我们cubemx生成的sdio的头文件。

        随后回去修改 diskio.c里的函数,具体修改后的效果如下图:

        此处初始化由于在cubemx的代码中已经帮我们完成,此处就没必要重复初始化,我在这里实现的是打印SD卡有关的信息。 

        disk_ioctl因为没有用到,暂时不实现内部的功能。

        这里SD卡的读写全是用阻塞方式进行的。 

        下一步,便是修改ffconfi.h里的配置项,分别打开两个,一个是允许文件名为长字符串,一个是运行同时挂载多少个设备。

        改为1.

        这里是支持挂载多少个设备1-10大家可以自行修改。

        这里还有一个设置块大小的,如果是用到一些其他的存储ic的话,这里可以适当修改,由于SD卡一个块就是512byte所以这里也不用改。 

        修改完以后移植工作就完成了。接下来是挂载和测试。

测试

这是挂载的代码,特别提一嘴,这里的第二个变量“0:”很重要,这里的函数会把这个0给提取出来,并作为后续读写函数的pdrv参数传递下去。

        此处我定义了DEV_SD为 0那么我f_mount的时候就应该为“0:”对应的,以读函数为例

这里的参数传递也为0,即我们可以通过0:这个0去索引我们对应的设备进行操作。所以挂载不能乱挂。 

        最后这是测试代码和测试结果,这里有一点不够完善的是,在我们mount以后没有给他unmount掉释放资源。

  • 16
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值