参考文档 《Universal Serial Bus Specification Revision 2.0》 April 27, 2000
参考文档 《STM32Cube USB 设备库 用户手册 UM1734》
供电:设备连接到 USB 并由其供电,但还未接到复位请求。
默认:设备连接到 USB,由其供电并复位,但并未分配唯一地址。
地址:设备连接到 USB,由其供电,已复位并被分配唯一地址。
配置:设备已处于地址状态,被配置,且处在挂起状态。
挂起:设备被连接并配置,但在总线上已 3ms 未激活
(1) Setup Request
(2) bRequest 定义
(3)wIndex 定义
(3)wValue定义
枚举流程分为设备请求/接口请求/端点请求三个层级。此处先只讨论设备请求层级。
(1) 获取设备描述符
HOST: Req=0x6 Type=0x80 Index=0x0 Len=0x40 Value=0x100
DEVICE : 12 01 10 01 00 00 00 40 40 2d 12 00 10 01 01 02 03 01
wIndex 指定 EP0 , wValue 高四位指定类型为Device , Type/Req 指定为 GET Descriptor, 即获取设备描述符
(2)设置设备在总线地址为 0x200
Req=0x5 Type=0x0 Index=0x0 Len=0x0 Value=0x200
(3) 按照该总线地址去获取设备描述符
Req=0x6 Type=0x80 Index=0x0 Len=0x12 Value=0x100
12 01 10 01 00 00 00 40 40 2d 12 00 10 01 01 02 03 01
(4) 获取配置描述符以及配置描述符和接口描述符的总长度 (Value = 2)
Req=0x6 Type=0x80 Index=0x0 Len=0x9 Value=0x200
09 02 29 00 01 01 00 c0 32
(5) 根据上一步的长度信息获取配置描述符 和 Interface 描述符
Req=0x6 Type=0x80 Index=0x0 Len=0x29 Value=0x200
09 02 29 00 01 01 00 c0 32 09 04 00 00 02 03 00 00 00 09 21 11 01 00 01 22 9b 00 07 05 81 03 40 00 01 07 05 01 03 40 00 01
(6)获取LANGID STRING,语言为英语 (Value = 3)
Req=0x6 Type=0x80 Index=0x0 Len=0xff Value=0x300
04 03 09 04 (USER_USB_LANGID_STRING = 0x409)
(7)获取PRODUCT STRING,(STRING = 3 , USBD_IDX_PRODUCT_STR = 2)
Req=0x6 Type=0x80 Index=0x409 Len=0xff Value=0x302
14 03 50 00 69 00 63 00 6f 00 20 00 57 00 69 00 6e 00 67 00
P i c o ' ' W i n g
(8) 获取MFC_STR (STRING = 3 ,USBD_IDX_MFC_STR = 1 )
Req=0x6 Type=0x80 Index=0x409 Len=0xff Value=0x301
30 03 50 00 69 00 63 00 6f 00 20 00 54 00 65 00 63 00 68 00 6e 00 6f 00 6c 00 6f 00 67 00 79 00 20 00 43 00 6f 00 2e 00 4c 00 74 00 64 00 2e 00
P i c o T e c h n o l o g y C o .L t d.
(9) 获取USBD_IDX_SERIAL_STR(STRING = 3 ,USBD_IDX_SERIAL_STR = 3 )
Req=0x6 Type=0x80 Index=0x409 Len=0xff Value=0x303
0c 03 41 00 33 00 37 00 37 00 30 00
A 3 7 7 0
(10)SetUP 特定的 configuration 一般为1
Req=0x9 Type=0x0 Index=0x0 Len=0x0 Value=0x1
然后开始Interface 和 Endpoint 的 request 处理流程。