Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
USB
MSC_MassStroage_U盘
USB设备枚举过慢的问题解决
发布于 2022-03-31 16:04:14 浏览:2079
订阅该版
1、最近在一个项目中使用STM32虚拟U盘功能,外接SPI flash,连接到电脑上面后虚拟出一个U盘出来,软件使用RT thread的usb device, mass storte大容量存储设备。代码移植很简单,使用menuconfig打开设置一下。 2、这个代码在测试过程中发现U盘枚举过长,通过增加打印信息观察到如下: ``` msh />message type 5 reset the port reset 0 message type 0 请求设备描述符:80 06 00 01 00 00 40 00 [ setup_request : 0x80 request : 0x06 value : 0x0100 index : 0x0000 length : 0x0040 ] _get_device_descriptor message type 2 ep0 out notify message type 5 reset reset 0 message type 0 set address 00 05 3d 00 00 00 00 00 [ setup_request : 0x00 request : 0x05 value : 0x003d 设备地址00 3d index : 0x0000 length : 0x0000 ] _set_address message type 0 获取设备描述符 80 06 00 01 00 00 12 00 [ setup_request : 0x80 request : 0x06 value : 0x0100 index : 0x0000 length : 0x0012 设备描述符长度 ] _get_device_descriptor message type 2 message type 0 获取配置描述符 80 06 00 02 00 00 ff 00 [ setup_request : 0x80 request : 0x06 value : 0x0200 0x02获取配置描述符 index : 0x0000 length : 0x00ff ] _get_config_descriptor message type 2 message type 0 获取字符串描述符 80 06 03 03 09 04 ff 00 [ setup_request : 0x80 request : 0x06 value : 0x0303 0x03 获取字符串描述符 index:03 获取03位置的字符串,即是320219198301 index : 0x0409 语言ID length : 0x00ff ] _get_string_descriptor message type 2 message type 0 获取字符串描述符 80 06 00 03 00 00 ff 00 [ setup_request : 0x80 request : 0x06 value : 0x0300 0x03 获取字符串描述符 index:00 获取语言ID, 返回04 03 09 04 index : 0x0000 length : 0x00ff ] _get_string_descriptor message type 2 message type 0 获取字符串描述符 80 06 02 03 09 04 ff 00 [ setup_request : 0x80 request : 0x06 value : 0x0302 0x03 获取字符串描述符 index:02 获取03位置的字符串,即是RTT Composite Device index : 0x0409 length : 0x00ff ] _get_string_descriptor message type 2 message type 0 获取设备限定描述符 80 06 00 06 00 00 0A 00 全速设备不响应此请求 [ setup_request : 0x80 request : 0x06 value : 0x0600 06:设备限定描述符 index : 0x0000 length : 0x000a ] 这里会有5秒时间 message type 0 [ setup_request : 0x80 request : 0x06 value : 0x0100 index : 0x0000 length : 0x0012 ] _get_device_descriptor message type 2 message type 0 [ setup_request : 0x80 request : 0x06 value : 0x0200 index : 0x0000 length : 0x0009 ] _get_config_descriptor ``` 根据以上打印信息发现,主机会获取设备限定描述符,对于STM32虚拟U盘来说是全速设备,端点0回复STALL即可,可是这里产生了较长时间的等待,大约5秒,就是这5秒导致U盘枚举过慢。 3、解决办法 通过查看处理设备限定描述符的代码,对比ST 虚拟U盘示例程序代码分析,在对端点0的STALL处理不一样,修改如下,增加对IN端点0的处理: ![meiju.jpg](https://oss-club.rt-thread.org/uploads/20220331/c80b5f3d824af70093097236f0fefa92.jpg.webp) 4、再次测试枚举过程,这个5秒的延时没有了,枚举变快了。 ``` usb reset:111.287s usb connect:111.288s message type 5 reset 0 message type 6 usb reset:111.675s message type 5 reset 1 usb ep0_setup_handler:111.712s message type 0 [time:111.716 setup_request : 0x80 request : 0x06 value : 0x0100 index : 0x0000 length : 0x0040 ] _get_device_descriptor usb ep0 data in stage:111.730s message type 2 usb reset:111.751s message type 5 reset 0 usb ep0_setup_handler:111.787s message type 0 [time:111.791 setup_request : 0x00 request : 0x05 value : 0x0021 index : 0x0000 length : 0x0000 ] usb ep0 data in stage:111.804s _sb ep0 data usb ep0_setup_handler:111.815s message type 0 [time:111.819 setup_request : 0x80 request : 0x06 value : 0x0100 index : 0x0000 length : 0x0012 ] _get_device_descriptor usb ep0 data in stage:111.833s message type 2 usb ep0_setup_handler:111.838s message type 0 [time:111.842 setup_request : 0x80 request : 0x06 value : 0x0200 index : 0x0000 length : 0x00ff ] _get_config_descriptor usb ep0 data in stage:111.857s usb ep0_setup_handler:111.859s message type 2 message type 0 [time:111.865 setup_request : 0x80 request : 0x06 value : 0x0303 index : 0x0409 length : 0x00ff ] _get_string_descriptor usb ep0 data in stage:111.880s usb ep0_setup_handler:111.882s message type 2 message type 0 [time:111.888 setup_request : 0x80 request : 0x06 value : 0x0300 index : 0x0000 length : 0x00ff ] _get_string_descriptor usb ep0 data in stage:111.902s usb ep0_setup_handler:111.905s message type 2 message type 0 [time:111.911 setup_request : 0x80 request : 0x06 value : 0x0302 index : 0x0409 length : 0x00ff ] _get_string_descriptor usb ep0 data in stage:111.926s usb ep0_setup_handler:111.928s message type 2 message type 0 处理获取设备限定描述符操作 [time:111.934 setup_request : 0x80 request : 0x06 value : 0x0600 index : 0x0000 length : 0x000a ] EP0 stall set 不响应读取设备限定描述符, 这里和下面的请求设备描述符时间只有70ms间隔了,枚举变快了。 usb ep0_setup_handler:111.953s message type 0 [time:111.957 setup_request : 0x80 request : 0x06 value : 0x0100 index : 0x0000 length : 0x0012 ] _get_device_descriptor usb ep0 data in stage:111.972s usb ep0_setup_handler:111.975s message type 2 message type 0 [time:111.980 setup_request : 0x80 request : 0x06 value : 0x0200 index : 0x0000 length : 0x0009 ] _get_config_descriptor usb ep0 data in stage:111.995s usb ep0_setup_handler:111.998s message type 2 message type 0 [time:112.003 setup_request : 0x80 request : 0x06 value : 0x0200 index : 0x0000 length : 0x0020 ] _get_config_descriptor usb ep0 data in stage:112.18s usb ep0_setup_handler:112.20s message type 2 message type 0 [time:112.026 setup_request : 0x80 request : 0x06 value : 0x0300 index : 0x0000 length : 0x0002 ] _get_string_descriptor usb ep0 data in stage:112.41s usb ep0_setup_handler:112.43s message type 2 message type 0 [time:112.049 setup_request : 0x80 request : 0x06 value : 0x0300 index : 0x0000 length : 0x0004 ] _get_string_descriptor usb ep0 data in stage:112.63s usb ep0_setup_handler:112.66s message type 2 message type 0 [time:112.071 setup_request : 0x80 request : 0x06 value : 0x0303 index : 0x0409 length : 0x0002 ] _get_string_descriptor usb ep0 data in stage:112.86s usb ep0_setup_handler:112.89s message type 2 message type 0 [time:112.094 setup_request : 0x80 request : 0x06 value : 0x0303 index : 0x0409 length : 0x001a ] _get_string_descriptor usb ep0 data in stage:112.109s usb ep0_setup_handler:112.112s message type 2 message type 0 [time:112.117 setup_request : 0x00 request : 0x09 value : 0x0001 index : 0x0000 length : 0x0000 ] _set_config rt_usbd_set_config rt_usbd_find_config Mass storage function enabled usb ep0 data in stage:112.137s usb ep0_setup_handler:112.140s message type 0 [time:112.144 setup_request : 0xa1 request : 0xfe value : 0x0000 index : 0x0000 length : 0x0001 ] rt_usbd_find_interface mstorage_interface_handler USBREQ_GET_MAX_LUN usb ep0 data in stage:112.163s message type 2 message type 1 _ep_out_handler 31 ep_out reside 36 _inquiry_cmd usb ep1 data in stage:112.173s message type 1 _ep_in_handler _send_status usb ep1 data in stage:112.180s message type 1 _ep_in_handler return to cbw status message type 1 _ep_out_handler 31 ep_out reside 36 _inquiry_cmd usb ep1 data in stage:112.193s message type 1 _ep_in_handler _send_status usb ep1 data in stage:112.200s```
4
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
fhqmcu
个人博客:https://blog.csdn.net/fhqlongteng
文章
16
回答
60
被采纳
1
关注TA
发私信
相关文章
1
请教USB Host
2
STM32F4调试USB 读卡器(Slave)提示格式化
3
急求 STM32F4 USB Device MSC+SD 的相关问题
4
USB 框架问题
5
USB键盘
6
LPC17xx 如何添加USB HOST设备
7
RT-Thread目前支持USB HOST了吗?
8
USB HOST的支持问题
9
RTT 2.0.1 USB存储设备问题,枚举到USBREQ_GET_MAX_LUN后复位
10
USB库已经很久没更新了
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
xiaorui
1
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
YZRD
1
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部