一,简介
我们在使用stm32进行usb设备配置的过程中,需要修改USB设备描述符,配置对应的设备,然后告诉电脑自己是什么设备,让电脑调对应的设备驱动来进行连接。本文主要介绍如何查看usb枚举的过程,及SET_UP建立过程的协议分析。供相关人员开发进行参考。
二,相关工具
1,USB monitor:抓取usb协议;
2,协议解析网站:用来在线解析抓取到的usb包;
网址:https://www.usbzh.com/tool/usb.html
三,准备知识
3.1 枚举过程和特点
3.2 枚举的详细过程
3.3 控制传输介绍
3.4 控制传输过程
3.5 控制传输过程SET_UP包具体格式
四,实例分析
4.1 使用usb monitor抓取到数据如下格式所示:
4.2 将具体协议命令复制到在线解析网站进行解析
在线解析如下图所示:
可以看出,该命令是主机发送获取设备描述符,从机返回设备描述符的一个通信过程:
//1,主机发送:
80 06 00 01 00 00 40 00
//命令解析结果:
0x80, // bmRequestType: Dir: D2H, Type: Standard, Recipient: Device
0x06, // bRequest (Get Descriptor)
0x00, // wValue[0:7] Desc Index: 0
0x01, // wValue[8:15] Desc Type: (Device)
0x00, 0x00, // wIndex Language ID: 0x00
0x40, 0x00, // wLength = 64
// 8 bytes
// best guess: USB Standard Request
//2,从机返回:
12 01 00 02 00 00 00 40 83 04 50 57 00 01 01 02 03 02
//命令解析结果:
0x12, // bLength
0x01, // bDescriptorType (Device)
0x00, 0x02, // bcdUSB 2.00
0x00, // bDeviceClass (Use class information in the Interface Descriptors)
0x00, // bDeviceSubClass
0x00, // bDeviceProtocol
0x40, // bMaxPacketSize0 64
0x83, 0x04, // idVendor 0x0483
0x50, 0x57, // idProduct 0x5750
0x00, 0x01, // bcdDevice 2.00
0x01, // iManufacturer (String Index)
0x02, // iProduct (String Index)
0x03, // iSerialNumber (String Index)
0x02, // bNumConfigurations 2
// 18 bytes
// best guess: USB Standard Descriptor
其他命令同样方法进行解析,不再赘述。
五,总结
本文主要介绍如何使用usb monitor和usb协议在线解析工具进行usb设备枚举过程分析,供参考。