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

[复制链接]
1987|3
 楼主| 正点原子 发表于 2016-1-20 16:00 | 显示全部楼层 |阅读模式
最近在调试STM32F4的USB Mass storage例程.
以前只用到最多虚拟出2个磁盘.一直用着,没什么问题.
不过,这次由于项目需要,得虚拟出3个磁盘.结果就出问题了.

修改步骤:
1,修改STORAGE_LUN_NBR的值为3:
  1. #define STORAGE_LUN_NBR                  3  


2,修改STORAGE_Inquirydata数组,添加3个磁盘的描述
如下:
  1. /* USB Mass storage Standard Inquiry Data */
  2. int8_t STORAGE_Inquirydata[] = { /* 36 */
  3.   /* LUN 0 */
  4.   0x00,               
  5.   0x80,               
  6.   0x02,               
  7.   0x02,
  8.   (STANDARD_INQUIRY_DATA_LEN - 5),
  9.   0x00,
  10.   0x00,       
  11.   0x00,
  12.   'S', 'T', 'M', ' ', ' ', ' ', ' ', ' ', /* Manufacturer: 8 bytes  */
  13.   'P', 'r', 'o', 'd', 'u', 'c', 't', ' ', /* Product     : 16 Bytes */
  14.   ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  15.   '0', '.', '0','1',                      /* Version     : 4 Bytes  */
  16.   /* LUN 1 */
  17.   0x00,               
  18.   0x80,               
  19.   0x02,               
  20.   0x02,
  21.   (STANDARD_INQUIRY_DATA_LEN - 5),
  22.   0x00,
  23.   0x00,       
  24.   0x00,
  25.   'S', 'T', 'M', '3', '2', ' ', ' ', ' ', /* Manufacturer: 8 bytes  */
  26.   'P', 'r', 'o', 'd', 'u', 'c', 't', ' ', /* Product     : 16 Bytes */
  27.   ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  28.   '0', '.', '0','1',                      /* Version     : 4 Bytes  */
  29.   /* LUN 2 */
  30.   0x00,               
  31.   0x80,               
  32.   0x02,               
  33.   0x02,
  34.   (STANDARD_INQUIRY_DATA_LEN - 5),
  35.   0x00,
  36.   0x00,       
  37.   0x00,
  38.   'S', 'T', 'M', '3', '2', ' ', ' ', ' ', /* Manufacturer: 8 bytes  */
  39.   'P', 'r', 'o', 'd', 'u', 'c', 't', ' ', /* Product     : 16 Bytes */
  40.   ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
  41.   '0', '.', '0','1',                      /* Version     : 4 Bytes  */
  42. };


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个以上磁盘的? 希望能指导下. 谢谢.



 楼主| 正点原子 发表于 2016-1-21 15:22 | 显示全部楼层
自己解决了
解决办法:
  1. static void  MSC_BOT_CBW_Decode (USB_OTG_CORE_HANDLE  *pdev)
  2. {

  3.   MSC_BOT_csw.dTag = MSC_BOT_cbw.dTag;
  4.   MSC_BOT_csw.dDataResidue = MSC_BOT_cbw.dDataLength;
  5.   
  6.   if ((USBD_GetRxCount (pdev ,MSC_OUT_EP) != BOT_CBW_LENGTH) ||
  7.       (MSC_BOT_cbw.dSignature != BOT_CBW_SIGNATURE)||
  8.         (MSC_BOT_cbw.bLUN > USBD_MSC_MaxLun) ||
  9.           (MSC_BOT_cbw.bCBLength < 1) ||
  10.             (MSC_BOT_cbw.bCBLength > 16))
  11.   {
  12.    
  13.     SCSI_SenseCode(MSC_BOT_cbw.bLUN,
  14.                    ILLEGAL_REQUEST,
  15.                    INVALID_CDB);
  16.      MSC_BOT_Status = BOT_STATE_ERROR;   
  17.     MSC_BOT_Abort(pdev);

  18.   }
qq245868243 发表于 2016-1-21 16:29 | 显示全部楼层
哥们 可见你真的很急 各大论坛都见你发帖了
 楼主| 正点原子 发表于 2016-1-22 15:13 | 显示全部楼层
qq245868243 发表于 2016-1-21 16:29
哥们 可见你真的很急 各大论坛都见你发帖了

还是靠自己解决了.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:我的STM32开发板店铺:http://openedv.taobao.com 我的技术论坛论坛:www.openedv.com

91

主题

264

帖子

71

粉丝
快速回复 在线客服 返回列表 返回顶部