STM32F407+RT_Thread使用FATFS文件系统操作SD卡

STM32F407+RT_Thread使用FATFS文件系统操作SD卡

前言

最近在搞基于rt_thread操作系统的项目,其中使用了fatfs文件系统操作SD卡,过程中遇到了一些问题,解决之后想在这里和大家分享一下。

menuconfig配置

rt_thread下使用SD和FATFS不需要像裸机时那样照着SD卡初始化流程图去抠,直接使用相对应的组件,在env中的menuconfig配置好就可以使用了,这个是真的太舒服了!
1.使能SDIO设备:
Hardware Drivers Config —>
On-chip Peripheral Drivers —>
[*] Enable SDIO
2.配置DFS:
这里在使能SDIO设备后,会自动开启。具体可参考官方文档中的说明。
RT-Thread Components —>
Device virtual file system —>;
这里如果只使用一个SD,那使用默认配置就可以。
3.开启FATFS:
因为rt_thread默认使用fatfs文件系统,所以这个配置也是已经自动开启的。

RT-Thread Components  --->
      Device virtual file system  --->
	 			[*] Enable elm-chan fatfs
	 					elm-chan's FatFs, Generic FAT Filesystem Moudle --->
	 					
这里也使用默认配置就可以,具体可以参考官方文档。

至此menuconfig中的配置就完成了。但可能有的资料里会让你再进行一步操作:

Hardware Drivers Config  --->
		Onboard Peripheral Drivers  --->
				[*] Enable File System --->

这里如果你只使用一个SD卡的话,我建议就不要开启了,这只会徒增你的烦恼还没有用。

文件系统初始化

文件系统的初始化过程一般分为以下几个步骤:

1.初始化 DFS 组件:
这里使用dfs_init()
实际上在开启DFS功能后,rt_thread已经自动开启了DFS的初始化,并不需要我们人为再次初始化一次,当然如果你不放心的可以手动再初始化一次。
2.初始化具体类型的文件系统:
这里其实就是对所需的文件系统进行注册,使用对应文件系统初始化函数即可,如elm_init()。同样和上面一样使能对应文件系统后在rt_thread内部会自动开启对应的初始化,不需要人为再次初始化一次,并且,在这里如果你人为进行一次初始化时,控制台就会报错
在这里插入图片描述
所以当你出现这种错误时不一定是你最大可使用文件系统数目DFS_FILESYSTEM_TYPES_MAX小了,还有可能是重复进行初始了。
3.在存储器上创建块设备:
这一步是rt_thread内部完成的无需用户操作。
4.格式化块设备:
在第一次使用SD卡时,要先将SD卡格式化为FAT或FAT32格式,否则可能会无法识别SD卡。这里建议使用int dfs_mkfs(const char * fs_name, const char * device_name);再进行一次格式化确保没问题,小编本人在最开始使用时就出现了未知问题,在使用上诉方法再次格式化后成功了。
5.挂载块设备到 DFS 目录中:
这一步是唯一需要用户自行操作的一步。

	rt_thread_mdelay(100);
    if(dfs_mount("sd","/","elm",0,0)==0)
        rt_kprintf("File System initialized\n");
    else
        rt_kprintf("File System init failed\n");

注意在进行挂载前的延时函数,这里一定要加上,在SD初始化时需要先识别到SD后,再进行挂载,而这个识别过程稍微有点久,所以需要延时进行一下等待,如果不延时的话大概率会挂载失败(小编在这里苦了好久)。

至此DFS的初始化就结束了,接下来就可以进行文件的各种管理操作了。

文件操作

相关函数较为简单,请自行参考官方说明文档。在这里包括上述的格式化过程可能会出现如下错误在这里插入图片描述
这种情况就检查一下板子的电气连接有没有问题,一般不会是软件问题,如果是电脑USB口供电,也可能是供电不足的原因。(小编在裸机spi操作SD时就因为这个卡了好久)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值