OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6878|回复: 5

FatFS文件系统(U盘)

[复制链接]

260

主题

809

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1894
金钱
1894
注册时间
2012-10-28
在线时间
357 小时
发表于 2015-10-22 09:33:49 | 显示全部楼层 |阅读模式
5金钱
你好,我把  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

最佳答案

查看完整内容[请看2#楼]

同时支持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  ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

347

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
2082
金钱
2082
注册时间
2014-12-19
在线时间
711 小时
发表于 2015-10-22 09:33:50 | 显示全部楼层
同时支持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;
}
回复

使用道具 举报

260

主题

809

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1894
金钱
1894
注册时间
2012-10-28
在线时间
357 小时
 楼主| 发表于 2015-10-22 11:40:23 | 显示全部楼层
回复【2楼】lvehe:
---------------------------------
你好,这个是我的 

DSTATUS disk_status (
BYTE pdrv /* hysical drive nmuber (0..) */
)
{
DSTATUS stat = STA_NOINIT;

switch (pdrv)
{
case FS_SD:
stat = 0;
break;

case FS_NAND:
stat = 0;
break;

case FS_USB:
stat = 0;
break;

default:
break;
}
return stat;
}
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2015-10-22 22:31:02 | 显示全部楼层
根据函数返回值,应该要会定位问题.
仿真一下吧.没什么难度.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

260

主题

809

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1894
金钱
1894
注册时间
2012-10-28
在线时间
357 小时
 楼主| 发表于 2015-10-23 11:01:43 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
这个搞定了,
回复

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
171
金钱
171
注册时间
2018-8-1
在线时间
52 小时
发表于 2020-4-22 21:24:20 | 显示全部楼层
hpdell 发表于 2015-10-23 11:01
回复【4楼】正点原子:
---------------------------------
这个搞定了,

楼主怎么解决的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-2 09:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表