USB Device 基本枚举流程

4 篇文章 0 订阅

参考文档 《Universal Serial Bus Specification Revision 2.0》 April 27, 2000

参考文档 《STM32Cube USB 设备库 用户手册 UM1734》

1.  USB基本状态

供电:设备连接到 USB 并由其供电,但还未接到复位请求。
默认:设备连接到 USB,由其供电并复位,但并未分配唯一地址。
地址:设备连接到 USB,由其供电,已复位并被分配唯一地址。
配置:设备已处于地址状态,被配置,且处在挂起状态。
挂起:设备被连接并配置,但在总线上已 3ms 未激活

 

2.  USB请求数据定义 

(1) Setup Request

(2) bRequest 定义

(3)wIndex 定义

(3)wValue定义

3.  枚举流程(设备请求阶段)

枚举流程分为设备请求/接口请求/端点请求三个层级。此处先只讨论设备请求层级。

(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 处理流程。

 

 

 

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值