最近在调试STM32F4的USB Mass storage例程.
以前只用到最多虚拟出2个磁盘.一直用着,没什么问题.
不过,这次由于项目需要,得虚拟出3个磁盘.结果就出问题了.
修改步骤:
1,修改STORAGE_LUN_NBR的值为3:
- #define STORAGE_LUN_NBR 3
复制代码
2,修改STORAGE_Inquirydata数组,添加3个磁盘的描述
如下:
- /* 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 */
- };
复制代码
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个以上磁盘的? 希望能指导下. 谢谢.
|