首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

学习分享Usb协议分析(2)

学习分享Usb协议分析(2)

12.     收到字符串描述符包
USB_EVT_OUT
Setup m=0,n=0,val=37
80 06 00 03 00 00 FF 00
这里收到字符串描述符。
REQUEST_STANDARD=0x6
USB_STRING_DESCRIPTOR_TYPE(10)(Offset=0x0)
USB_DataInStage,cnt=4,EP0Data.Count=4
04 03 09 04
返回语言标识。
USB_EVT_IN,USB_DataInStage
USB_DataInStage,cnt=0,EP0Data.Count=0
1.         收到字符串描述符包
Setup m=0,n=0,val=45
80 06 2C 03 09 04 FF 00
收到PC需要产品字符串。
REQUEST_STANDARD=0x6
USB_STRING_DESCRIPTOR_TYPE(11)(Offset=0x2C)
USB_DataInStage,cnt=30,EP0Data.Count=30
1E 03 42 00 69 00 67 00 53 00 6C 00 6F 00 70 00 65 00 33 00 44 00 20 00 48 00 49 00 44 00
这里USB设备返回产品字符串给PC了
USB_EVT_IN,USB_DataInStage
USB_DataInStage,cnt=0,EP0Data.Count=0
2.         收到字符串描述符包
Setup m=0,n=0,val=45
80 06 00 03 00 00 FF 00
REQUEST_STANDARD=0x6
USB_STRING_DESCRIPTOR_TYPE(12)(Offset=0x0)
USB_DataInStage,cnt=4,EP0Data.Count=4
04 03 09 04
USB_EVT_IN,USB_DataInStage
USB_DataInStage,cnt=0,EP0Data.Count=0
Setup m=0,n=0,val=45
80 06 2C 03 09 04 FF 00
REQUEST_STANDARD=0x6
USB_STRING_DESCRIPTOR_TYPE(13)(Offset=0x2C)
USB_DataInStage,cnt=30,EP0Data.Count=30
1E 03 42 00 69 00 67 00 53 00 6C 00 6F 00 70 00 65 00 33 00 44 00 20 00 48 00 49 00 44 00
USB_EVT_IN,USB_DataInStage
USB_DataInStage,cnt=0,EP0Data.Count=0
3.         收到字符串描述符包
USB_EVT_OUT
Setup m=0,n=0,val=45
80 06 00 01 00 00 12 00
这里收到需要返回厂商字符串的请求。
REQUEST_STANDARD=0x6
USB_DEVICE_DESCRIPTOR_TYPE(14)
USB_DataInStage,cnt=18,EP0Data.Count=18
12 01 10 01 00 00 00 40 00 80 00 80 00 01 04 2C 4A 01
在这里返回设备的厂商字符串给PC。
USB_EVT_IN,USB_DataInStage
USB_DataInStage,cnt=0,EP0Data.Count=0
4.         收到第三个配置描述符包
Setup m=0,n=0,val=45
80 06 00 02 00 00 09 00
REQUEST_STANDARD=0x6
USB_CONFIGURATION_DESCRIPTOR_TYPE(15)(Offset=0x0)
USB_DataInStage,cnt=9,EP0Data.Count=9
09 02 22 00 01 01 00 01 32
USB_EVT_IN,USB_DataInStage
USB_DataInStage,cnt=0,EP0Data.Count=0
5.         收到第四个配置描述符包
Setup m=0,n=0,val=45
80 06 00 02 00 00 22 00
REQUEST_STANDARD=0x6
USB_CONFIGURATION_DESCRIPTOR_TYPE(16)(Offset=0x0)
USB_DataInStage,cnt=34,EP0Data.Count=34
09 02 22 00 01 01 00 01 32 09 04 00 00 01 03 00 00 6E 09 21 00 01 00 01 22 24 00 07 05 81 03 40 00 20
根据长度返回不同的数据。
USB_EVT_IN,USB_DataInStage
USB_DataInStage,cnt=0,EP0Data.Count=0
6.         收到设置描述符包
Setup m=0,n=0,val=45
00 09 01 00 00 00 00 00
REQUEST_STANDARD=0x9
USB_SetConfiguration WB.L =1
USB_Configure(TRUE)
USB_SetConfiguration true
由上面可以知道经过这么多次来回后,主控器已经配置完成,对这个设备可以使用了。这时,如果在WINDOWS里就会看到可以设备安装完成,可以使用了。
7.         收到设置空闲描述符包
Setup m=0,n=0,val=37
21 0A 00 00 00 00 00 00
收到这个描述符,就表明设备在空闲状态。
8.         收到HID的报告描述符包
Setup m=0,n=0,val=37
81 06 00 22 00 00 64 00
由于在配置描述符里,我把这个设备描述成HID的设备,所以会收到HID的报告描述符。
REQUEST_STANDARD=0x6
REQUEST_TO_INTERFACE (0x22)
HID_REPORT_DESCRIPTOR_TYPE
USB_DataInStage,cnt=36,EP0Data.Count=36
06 00 FF 09 01 A1 01 19 01 29 08 15 00 25 FF 95 3F 75 08 81 02 19 01 29 08 15 00 25 FF 95 3F 75 08 91 02 C0
这里就返回报告描述的类型,说明每次发送数据报告的大小,还有数据的格式。这里是返回63个字节输出,63个输入的描述符。
USB_EVT_IN,USB_DataInStage
USB_DataInStage,cnt=0,EP0Data.Count=0
USB_EVT_OUT
继承事业,薪火相传
返回列表