RT-Thread论坛
直播中

王焕锁

8年用户 1029经验值
私信 关注
[问答]

SD卡无法挂载怎么解决?

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


更多回帖

发帖
×
20
完善资料,
赚取积分