本人的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
0
|
|
|
|
|
|