首页 > 编程知识 正文

鼠标usb设备描述符失败代码43,win10usb设备描述符失败

时间:2023-05-04 02:29:27 阅读:44356 作者:3286

我们的第一个学习点是USB描述符,描述符其实是c语言中的结构体或数组,数组中包含的信息说明当前设备具有什么特征。 USB描述符为设备描述符配置描述符接口描述符,http://www.com /,http://www.Sina 我写得非常详细简洁。 然后,在学习USB枚举时,通过抓住数据包和波形来学习每个描述符在总线上的作用。 然后,介绍各描述符是什么时候以什么方式在总线上传输的。 今天主要学习端点描述符的构成。

设备描述符是USB主机枚举USB设备申请的第一个描述符,每个设备都有一个设备描述符,并且只有一个。 也就是说,接下来看到的USB设备只有一个字符串描述符数组。 设备描述符的长度为18字节。 现在,让我们学习设备描述符数据结构,看看USB设备具有什么样的特点及其结构。 请参考下表

STM32设备描述符代码实现如下:

# define USB _ device _ descriptor _ type0x 01//设备描述符类别# define USB _ otg _ max _ ep0 _ size 64//端点0支持defineusbd_idx_MFC_str0x01//供应商字符串的索引# define usbd _ idx _ product _ str0x 02//产品字符串的索引# define usbd _ /设备配置数量/* usbstandarddevicedescriptor */uint8_ tusbd _ device desc [ USB _ siz _ device ]/* blength */USB _ device /*BCDUSB*/0x02,/* bdevicececo0/* bdeviceprotocol */USB _ otg _ max _ ep0 _ size,/* bmax包大小*/lobbbet /*idvendorlow )/lobyte/* idvendor low */hibyte (usbd _ PID ),/*idVendor high*/0x00,/* BCD device rel.2.00 * usbd _ idx _ MFC/* indexofmanufacturerstring */usbd _ idx _ product _ str,/* indexofproductstring */usbd _ idx (所有描述符都是小端序格式,从低到高。 )HID描述符

描述符的长度(18字节,以十六进制表示为0x12 ) ) ) ) )。

,就是标志描述符数据结构的长度。
(2)bDescriptorType
    bDescriptorType代表了本描述符的类型,设备描述符为0x01。所有的描述符类型表示如下图,大家以后也可以速查:


(3)bcdUSB
    USB协议版本,表示形式0xgsdhsMN版本gsdhs.M.N(gsdhs  - 主要版本号,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查看。

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

(6)idVender
    厂商ID,就是个2字节的编号,由USB协议分配,厂商申请时需要交费。自己随便写的话,仅限于学习、测试的情况下,不能用做产品。
(7)idProduct
    产品ID,厂家自己随便定义。
(8)bcdDevice
    产品版本号,厂家自己随便定义。
(9)iManufacturer
    描述厂商的字符串的索引,为0则表示没有,后面详细讲解。
(10)iProduct
    描述产品的字符串的索引,为0则表示没有,后面详细讲解。
(11)iSerialNumber
    产品序列号字符串的索引,为0则表示没有,后面详细讲解。
(12)bNumConfigurations
    指示设备由多少个配置,前面提到过,一个USB可能有多个配置,一般USB产品都是1个配置。

 

1.版权归本作者(一个早起的程序员)所有;

2.未经原作者允许不得转载本文内容,否则将视为侵权;

3.转载或者引用本文内容请注明来源及原作者;

4.对于不遵守此声明或者其他违法使用本文内容者,本人依法保留追究权等。

下面是我的个人微信公众号,关注【一个早起的程序员】精彩系列文章每天不断。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。