一、使用ENV配置工程
1、使能SDCARD。
2、修改可挂载文件系统数量为4。
3、修改卷的数量为3。在这里插入图片描述
4、退出保存,重新生成工程。
二、修改源码和添加用户代码
1、禁止系统启动自动挂载sd卡,因为我们要自己使用用户代码去挂载到指定路径下。
2、新建sdcard.h和sdcard.c文件,并添加以下代码。
sdcard.c
#include "sdcard.h"
int sdcard_mount(void)
{
if(rt_device_find("sd0") != RT_NULL)
{
if (dfs_mount("sd0", SDCARD_MOUNTPOINT, "elm", 0, 0) == RT_EOK)
{
rt_kprintf("sd card mount success.\r\n");
}
else
{
rt_kprintf("sd card mount failed!\r\n");
return -1;
}
}
else
{
rt_kprintf("no find sd0 device!\r\n");
return -2;
}
return RT_EOK;
}
MSH_CMD_EXPORT(sdcard_mount,sdcard mount);
int sdcard_unmount(void)
{
if(rt_device_find("sd0") != RT_NULL)
{
if (dfs_unmount(SDCARD_MOUNTPOINT) == RT_EOK)
{
rt_kprintf("sd card unmount");
}
else
{
rt_kprintf("sd card unmount failed!\r\n");
return -1;
}
}
else
{
rt_kprintf("no find sd0 device!\r\n");
return -2;
}
return RT_EOK;
}
MSH_CMD_EXPORT(sdcard_unmount,sdcard unmount);
sdcard.h
#ifndef __SDCARD_H
#define __SDCARD_H
#include <rtthread.h>
#include <dfs_elm.h>
#include <dfs_fs.h>
#include <dfs_posix.h>
#define SDCARD_MOUNTPOINT "/sdcard"
int sdcard_mount(void);
int sdcard_unmount(void);
#endif
3、在根目录下新建sdcard文件夹,以后的sd卡就挂载在这。
4、编译下载运行,先输入命令w25q128_mount进行挂载才有本地磁盘,然后再输入命令sdcard_mount挂载SD卡,插上U盘可以进行自动挂载U盘了。
5、其实SD卡的代码还有BUG,发现如果上电前不事先把SD卡插上就会无法识别,即使已经识别到SD卡,也不能二次拔插,后面再解决这个BUG,看看到底咋回事…
原作者:小破孩 != ERR