一、使用ENV配置工程
1、使能SDCARD。
![1.jpg](//file.elecfans.com/web2/M00/6E/75/poYBAGNBFTiAaB-3AAEoOxBYlx0578.jpg)
2、修改可挂载文件系统数量为4。
![1.jpg](//file.elecfans.com/web2/M00/6F/0A/pYYBAGNBFU2ANq5oAAFOauMecyg383.jpg)
3、修改卷的数量为3。在这里插入图片描述
![1.jpg](//file.elecfans.com/web2/M00/6F/0A/pYYBAGNBFWKAIeitAAE6CPb8duI469.jpg)
4、退出保存,重新生成工程。
二、修改源码和添加用户代码
1、禁止系统启动自动挂载sd卡,因为我们要自己使用用户代码去挂载到指定路径下。
![1.jpg](//file.elecfans.com/web2/M00/6F/0B/pYYBAGNBFdaAEZ7AAADrExrFy0Q310.jpg)
![2.jpg](//file.elecfans.com/web2/M00/6E/76/poYBAGNBFdqANkvRAADXFsBacrw130.jpg)
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卡就挂载在这。
![1.jpg](//file.elecfans.com/web2/M00/6F/0B/pYYBAGNBFh2AYPeLAAAdWFi4VS8416.jpg)
4、编译下载运行,先输入命令w25q128_mount进行挂载才有本地磁盘,然后再输入命令sdcard_mount挂载SD卡,插上U盘可以进行自动挂载U盘了。
![1.jpg](//file.elecfans.com/web2/M00/6F/0B/pYYBAGNBFjaAbkdJAADVxXhFeHc184.jpg)
5、其实SD卡的代码还有BUG,发现如果上电前不事先把SD卡插上就会无法识别,即使已经识别到SD卡,也不能二次拔插,后面再解决这个BUG,看看到底咋回事…
原作者:小破孩 != ERR