您的位置:首页 > 教育 > 锐评 > STM32的FATFS文件系统移植

STM32的FATFS文件系统移植

2024/10/5 18:23:37 来源:https://blog.csdn.net/Norgin_1/article/details/140932541  浏览:    关键词: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掉释放资源。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com