[求助]STM32F4的USB mass storage例程,无法支持2个以上磁盘.

2019-07-20 07:32发布

最近在调试STM32F4的USB Mass storage例程.
以前只用到最多虚拟出2个磁盘.一直用着,没什么问题.
不过,这次由于项目需要,得虚拟出3个磁盘.结果就出问题了.

修改步骤:
1,修改STORAGE_LUN_NBR的值为3:
[mw_shl_code=c,true]#define STORAGE_LUN_NBR 3[/mw_shl_code]

2,修改STORAGE_Inquirydata数组,添加3个磁盘的描述
如下:
[mw_shl_code=c,true]/* USB Mass storage Standard Inquiry Data */
int8_t STORAGE_Inquirydata[] = { /* 36 */
/* LUN 0 */
0x00,        
0x80,        
0x02,        
0x02,
(STANDARD_INQUIRY_DATA_LEN - 5),
0x00,
0x00,        
0x00,
'S', 'T', 'M', ' ', ' ', ' ', ' ', ' ', /* Manufacturer: 8 bytes */
'P', 'r', 'o', 'd', 'u', 'c', 't', ' ', /* Product : 16 Bytes */
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
'0', '.', '0','1', /* Version : 4 Bytes */
/* LUN 1 */
0x00,        
0x80,        
0x02,        
0x02,
(STANDARD_INQUIRY_DATA_LEN - 5),
0x00,
0x00,        
0x00,
'S', 'T', 'M', '3', '2', ' ', ' ', ' ', /* Manufacturer: 8 bytes */
'P', 'r', 'o', 'd', 'u', 'c', 't', ' ', /* Product : 16 Bytes */
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
'0', '.', '0','1', /* Version : 4 Bytes */
/* LUN 2 */
0x00,        
0x80,        
0x02,        
0x02,
(STANDARD_INQUIRY_DATA_LEN - 5),
0x00,
0x00,        
0x00,
'S', 'T', 'M', '3', '2', ' ', ' ', ' ', /* Manufacturer: 8 bytes */
'P', 'r', 'o', 'd', 'u', 'c', 't', ' ', /* Product : 16 Bytes */
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
'0', '.', '0','1', /* Version : 4 Bytes */
}; [/mw_shl_code]

3,修改磁盘初始化/磁盘读取/磁盘写入等函数,增加对3个磁盘的操作.


修改完以后,下载.发现直接进入Suspend状态了.
而一旦将STORAGE_LUN_NBR的数值改为2或者1,就没有任何问题.可以正常识别2个或者1个磁盘出来.
只要改为3,就进入Suspend状态.


我试过使用STM32_USB-Host-Device_Lib_V2.2.0和stm32cubef4的例程,都测试过.同样都只支持最大2个磁盘,只要定义3个,立即进入Suspend状态.

然后,我试过103的USB例程,却是可以支持3个磁盘.所以,想请教下有没有搞过F407 USB MSC支持2个以上磁盘的? 希望能指导下. 谢谢.

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
21条回答
whxiao王
1楼-- · 2019-07-22 16:06
 精彩回答 2  元偷偷看……
jeffwei
2楼-- · 2019-07-22 20:54
官方cubmax软件使用的STM32 USB Device Library V2.42里面也有这个bug,不支持3个; 修改usbd_msc_bot.c文件中(hmsc->cbw.bLUN > 1)改成(hmsc->cbw.bLUN > STORAGE_LUN_NBR) 把usbd_storage_if.c中#define STORAGE_LUN_NBR                  3移到头文件中去, 再usbd_msc_bot.c增加usbd_storage_if.h引用
种萝卜的兔子
3楼-- · 2019-07-23 00:31
我使用 STMCube 生成的 USB device MSC 工程挂载 一个SPIFLASH和 一个SD卡,能看到2个盘符,读写时电脑总是弹MS-DOS无效,请问你们有遇到过吗?或者方不方便发一个 使用SMT Cube 生成挂两个设备的参考例程

一周热门 更多>