FatFS文件系统(U盘)

2019-07-21 01:21发布

你好,我把  FatFS文件系统(U盘)的磁盘号分配为0,可以正常读写u盘了,但是分配磁盘号为

1、2、3 等就不行了,

请教下是什么情况啊 ??

相关定义如下:
#define _VOLUMES    3        /* 【由0 修改 3, 支持3个盘符】 */
#define    _FS_LOCK    3    /* 0isable or >=1:Enable 【由0 修改 3, 支持同时打开3个文件】*/


#define FS_USB 2

在diskio 里面也是使用 这个宏定义FS_USB的
fatfs 版本 v0.11
你好,我把  FatFS文件系统(U盘)的磁盘号分配为0,可以正常读写u盘了,但是分配磁盘号为

1、2、3 等就不行了,

请教下是什么情况啊 ??

相关定义如下:
#define _VOLUMES    3        /* 【由0 修改 3, 支持3个盘符】 */
#define    _FS_LOCK    3    /* 0isable or >=1:Enable 【由0 修改 3, 支持同时打开3个文件】*/

#define FS_USB        2

在diskio 里面也是使用 这个宏定义FS_USB的

当程序执行到 FRESULT  find_volume 这个函数里面时,返回 if (fmt) return FR_NO_FILESYSTEM;                /* No FAT volume is found */
                                                                                                                            // 这个 fmt 的值为2
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
lvehe
1楼-- · 2019-07-21 04:40
同时支持3个盘的话,只能定义为0、1、2。
例如:
#define ATA 0
#define MMC 1
#define USB 2

同时要修改diskio.c中的函数。
只支持单个盘的时候函数这样写:
DSTATUS disk_status (
BYTE pdrv /* hysical drive number to identify the drive */
)
{
if (pdrv) return STA_NOINIT; /* Supports only single drive */
return 0;
}
但支持多个盘的时候就要这样写
DSTATUS disk_status (
BYTE pdrv /* hysical drive nmuber to identify the drive */
)
{
DSTATUS stat;
int result;

switch (pdrv) {
case ATA:
result = ATA_disk_status();

// translate the reslut code here

return stat;

case MMC:
result = MMC_disk_status();

// translate the reslut code here

return stat;

case USB:
result = USB_disk_status();

// translate the reslut code here

return stat;
}
return STA_NOINIT;
}
hpdell
2楼-- · 2019-07-21 05:30
 精彩回答 2  元偷偷看……
正点原子
3楼-- · 2019-07-21 10:55
根据函数返回值,应该要会定位问题.
仿真一下吧.没什么难度.
hpdell
4楼-- · 2019-07-21 13:12
回复【4楼】正点原子:
---------------------------------
这个搞定了,

一周热门 更多>