32 usb 配置描述符_USB协议详解第3讲(USB描述符设备描述符)

本文详细解读了USB设备描述符的各个字段,包括bLength、bDescriptorType、bcdUSB、设备类型和子类、bMaxPacketSize0、厂商ID、产品ID、版本号、字符串索引及配置数量等,旨在帮助读者理解USB协议的基础知识。
摘要由CSDN通过智能技术生成

关注+星标公众,不错过精彩内容

ef6442dd7e16977acdebe24bb3abd1bc.png

编排 | 一个早起的程序员

一个早起的程序员

1

描述符概述 我们第一个学习要点就是USB描述符,所谓描述符其实就是C语言里面的结构体或者数组,数组包含的信息说明当前的设备具有哪些特征。USB描述符有设备描述符标准 配置描述符接口描述符端点描述符字符串描述符,HID设备有HID描述符报告描述符物理描述符。我们先学会每个描述符的细节,我会写的非常详细且简洁,后面在学习USB枚举的时候会通过抓包和波形来学习每一个描述符在总线上的作用,并且会介绍每一个描述符是在什么时候以哪种方式在总线上进行传输的, 今天主要是学习USB设备描述符的组成 一个早起的程序员

2

设备描述符组成 设备描述符是USB主机枚举USB设备申请的第1个描述符,每个设备有且仅有一个设备描述符,也就是大家以后看到的任何的USB设备都只有一个设备描述符数组,设备描述符的长度是18字节,下面我们来学习设备描述符数据结构,看看USB设备具有哪些特征,它的结构我们可以通过下面的表格来逐一了解。 f0d507afa26d62ceee856b3ac65cf1be.png一个早起的程序员

3

设备描述符STM32代码实现 STM32 设备描述符代码实现如下:
  #define   USB_DEVICE_DESCRIPTOR_TYPE                0x01    // 设备描述符类别  #define   USB_OTG_MAX_EP0_SIZE                     64      // 端点0支持的最大包长  #define   USBD_VID                              0x0483    // 厂商ID      #define   USBD_PID                                0xDF11    // 产品ID  #define    USBD_IDX_MFC_STR                            0x01     // 厂商字符串的索引  #define    USBD_IDX_PRODUCT_STR                        0x02    // 产品字符串的索引  #define    USBD_IDX_SERIAL_STR                         0x03    // 产品序列号字符串的索引  #define   USBD_CFG_MAX_NUM                      1       // 设备的配置数    /* USB Standard Device Descriptor */  uint8_t USBD_DeviceDesc[USB_SIZ_DEVICE_DESC] =    {      0x12,                       /*bLength */      USB_DEVICE_DESCRIPTOR_TYPE, /*bDescriptorType*/      0x00,                       /*bcdUSB */      0x02,      0x00,                       /*bDeviceClass*/      0x00,                       /*bDeviceSubClass*/      0x00,                       /*bDeviceProtocol*/      USB_OTG_MAX_EP0_SIZE,      /*bMaxPacketSize*/      LOBYTE(USBD_VID),           /*idVendor low*/      HIBYTE(USBD_VID),           /*idVendor high*/      LOBYTE(USBD_PID),           /*idVendor low*/      HIBYTE(USBD_PID),           /*idVendor high*/      0x00,                       /*bcdDevice rel. 2.00*/      0x02,      USBD_IDX_MFC_STR,           /*Index of manufacturer  string*/      USBD_IDX_PRODUCT_STR,       /*Index of product string*/      USBD_IDX_SERIAL_STR,        /*Index of serial number string*/      USBD_CFG_MAX_NUM            /*bNumConfigurations*/    } ; /* USB_DeviceDescriptor */
一个早起的程序员

4

设备描述符组成详解

下面来介绍设备描述符每一个内容的详细含义(所有的描述符都是小端格式,先低后高)

1.bLength   

 描述符长度(18字节,十六进制为0x12),就是标志描述符数据结构的长度。

2.bDescriptorType   

bDescriptorType代表了本描述符的类型,设备描述符为0x01。所有的描述符类型表示如下图,大家以后也可以速查:

fc6e987f61e74a35b713994b60e58d65.png

3.bcdUSB    

USB协议版本,表示形式0xJJMN版本JJ.M.N(JJ  - 主要版本号,M  - 次要版本号,N  - 次要版本)    

例子:如果是USB2.0,写成:0200H;如果是USB1.1,写成:0110H 如果是USB3.11,写成:0311H

4.bDeviceClass、bDeviceSubClass、bDeviceProtocol

bDeviceClass、bDeviceSubClass、bDeviceProtocol分别代表设备类型,子类型,设备使用的协议,USB-IF区分设备类分了三个等级(类-子类-协议码)其中,类包含人机交互类、图像类、无线类、音频类等等,子类比如音频类的音频控制、音频流等等,协议比如人机接口类中的鼠标、键盘、触摸屏等,为何会有这么多USB的Class分类,子分类,设备协议。我们要知道,USB协议设计的目的,就是为实现通用,用单一的USB接口取代之前种类繁多的各种其他接口。而为了取代其他各种接口,那意味着就要实现各种设备所对应的各种功能。如下图显示USB设备的各种类别,USB设备类信息更详细内容可进入https://www.usb.org/defined-class-codes查看。

a3ce16e7ddfea24fea6c7e0db15aa846.png

5.bMaxPackeSize0    

就是端点一次最大传多少个字节。USB协议里有规定,端点0最低8字节,端点的最大传输大小和USB速度等级以及传输类型有关,控制传输一般使用端点0,低速最大8字节,全速和高速最大传输64字节,如下图:

108eec3d5527c33e2cae89599ace5ce4.png

6.idVender   

 厂商ID,就是个2字节的编号,由USB协议分配,厂商申请时需要交费。自己随便写的话,仅限于学习、测试的情况下,不能用做产品。

7.idProduct   

 产品ID,厂家自己随便定义。

8.bcdDevice    

产品版本号,厂家自己随便定义。

9.iManufacturer   

 描述厂商的字符串的索引,为0则表示没有,后面详细讲解。

10.iProduct    

描述产品的字符串的索引,为0则表示没有,后面详细讲解。

11.iSerialNumber   

 产品序列号字符串的索引,为0则表示没有,后面详细讲解。

12.bNumConfigurations    

标识当前设备有多少个配置,前面提到过,一个USB可能有多个配置,一般USB产品都是1个配置。

免责声明: 本文素材来源网络,版权归原作者所有。如涉及作品版权问题,请与我联系删除。 ------------ END ------------ ce141b68a68659440beaa58d6a8ae495.gif

点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值