本人的SD卡挂载文件系统一直不成功,论坛上的相关帖子的方法都尝试了也不行,请求大神支持,具体如下:
1.开发的工程基于XHSC官方推出的开发板EV_F4A0_LQ176的工程。
2.SD卡设备能找到如下:
msh />list_device
type ref count
-------- -------------------- ----------
pipe0 Pipe 2
sd0 Block Device 0
fs Block Device 1
norflash Block Device 0
spi_flas SPI Device 0
rtc RTC 0
e0 Network Interface 1
adc3 ADC Device 0
adc2 ADC Device 0
wdt WDT Device 0
uart8 Character Device 1
uart6 Character Device 0
uart5 Character Device 0
uart4 Character Device 1
uart2 Character Device 1
uart1 Character Device 2
spi4 SPI Bus 0
spi2 SPI Bus 0
spi1 SPI Bus 0
i2c1 I2C Bus 0
pin Pin Device 0
msh />
3.可以读到容量信息,用裸机程序SD卡可以正常读写buffer的数据
ROM file system initializated!
[I/FAL] The FAL block device (fs) created successfully
norflash0 filesystem block size: 4096, total blocks: 2809, free blocks: 2807.
[971] I/SDIO: SD card capacity 995328 KB.
mount sd filesystem fail.
[FlashDB][kv][env] (../packages/FlashDB-v1.0.0/src/fdb_kvdb.c:1885) KVDB size is 1048576 bytes.
[FlashDB] FlashDB V1.1.2 is initialize success.
4.SD卡已经用论坛上推荐的格式化工具SD Card Formatter格式化过也不行,指令mkfs -t elm sd0也不报错,但是挂载指令出错。
msh />mkfs -t elm sd0
msh />mount sd0 /sdcard elm
mount device sd0(elm) onto /sdcard ... failed!
msh />
5.挂载的代码如下,其中也有norFlash的挂载是成功的,SD卡的挂载不行
int mnt_init(void)
{
int fd, size;
struct statfs elm_stat;
struct fal_blk_device* blk_dev;
//根目录下挂载romfs
if (dfs_mount(RT_NULL, "/", "rom", 0, &(romfs_root)) == 0)
{
rt_kprintf("ROM file system initializated!\n");
}
else
{
rt_kprintf("ROM file system initializate failed!\n");
}
/* fal init */
fal_init();
/* create block device */
blk_dev = (struct fal_blk_device*)fal_blk_device_create("fs");
if (blk_dev == RT_NULL)
{
// rt_kprintf("Can't create a block device on '%s' partition.\n", "fs");
}
/* mount elmfat file system to FS_PARTITION_NAME */
if (dfs_mount("fs", "/norflash0", "elm", 0, 0) != 0)
{
/* make a elmfat format filesystem */
if (dfs_mkfs("elm", "fs") != 0)
{
// rt_kprintf("make elmfat filesystem fail.\n");
return RT_ERROR;
}
dfs_mount("fs", "/norflash0", "elm", 0, 0);
}
/* Get elmfat file system statistics */
if (statfs("/norflash0", &elm_stat) == 0)
rt_kprintf("norflash0 filesystem block size: %d, total blocks: %d, free blocks: %d.\n",
elm_stat.f_bsize, elm_stat.f_blocks, elm_stat.f_bfree);
rt_thread_mdelay(1000);
if (dfs_mount("sd0", "/sdcard", "elm", 0, 0) != 0)
{
/* make a elmfat format filesystem */
if (dfs_mkfs("elm", "sd0") != 0)
{
rt_kprintf("make sd filesystem fail.\n");
return RT_ERROR;
}
if(dfs_mount("sd0", "/sdcard", "elm", 0, 0) != 0)
{
rt_kprintf("mount sd filesystem fail.\n");
return RT_ERROR;
}
}
rt_kprintf("make sd filesystem success.\n");
if (statfs("/sdcard", &elm_stat) == 0)
rt_kprintf("sdcard filesystem block size: %d, total blocks: %d, free blocks: %d.\n",
elm_stat.f_bsize, elm_stat.f_blocks, elm_stat.f_bfree);
return RT_EOK;
}
6.跟踪了一下出错的地方在文件ff.c的FRESULT mount_volume()函数中返回的错误是FR NO FILESYSTEM.(第一次发帖子,不知道为啥图片传不上来,我在下面评论传截图吧)
以及挂载了romfs,就需要romfs中存在/sdcard文件夹作为SD卡的挂载点,可以把romfs文件贴出来看看
romfs可以看看我这篇:
https://club.rt-thread.org/ask/article/cc49819593bffa70.html
感谢回答,romfs中是有挂载点/sdcard的,挂载的代码如下:
可以加大DFS_FILESYSTEMS_MAX以及DFS_FILESYSTEM_TYPES_MAX试试
没看出来别的问题,贴出来的看起来都没问题😂
我两个都改成4了,也不行,帮忙再看看其他的配置有没有问题,感谢!

SDIO
文件系统
默认应该就是4,加大到8试试
或者试试不挂载spi flash,仅挂载SD卡看看是否能成功
还是不行,我换成SPI接口了😂,SPI接口可以
https://club.rt-thread.org/ask/article/b20524eede781832.html