USB设备参数分析

本文介绍了USB设备参数结构体USB_DEVICE_INFO及其成员,包括USB_DEVICE_DESCRIPTOR、USB_CONFIGURATION_DESCRIPTOR和USB_INTERFACE_DESCRIPTOR等描述符的含义和作用。在UKEY开发过程中,详细讨论了attachdevice函数中读取设备参数的步骤,特别是设备描述表、配置描述表、接口描述表和端点描述表在设备识别和资源配置中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

USB设备参数结构体的定义

 

USB_DEVICE_INFO类的定义在

D:/WINCE420/PUBLIC/COMMON/OAK/DRIVERS/USB/HCD/COMMON/globals.hpp

 

typedef struct _USB_DEVICE_INFO {

    DWORD                                   dwCount;

 

    USB_DEVICE_DESCRIPTOR                   Descriptor;

    LPNON_CONST_USB_CONFIGURATION           lpConfigs;

    LPNON_CONST_USB_CONFIGURATION        lpActiveConfig;

} USB_DEVICE_INFO, * LPUSB_DEVICE_INFO;

 

1 成员USB_DEVICE_DESCRIPTOR  Descriptorglobals.hpp中没有定义,但在USB协议中有定义.

2 成员LPNON_CONST_USB_CONFIGURATION  lpConfigs,lpActiveConfig的定义

typedef struct _NON_CONST_USB_CONFIGURATION {

    DWORD                                   dwCount;

 

    USB_CONFIGURATION_DESCRIPTOR            Descriptor;

    LPBYTE                                  lpbExtended;

    // Total number of interfaces (including alternates)

    DWORD                                   dwNumInterfaces;

    LPNON_CONST_USB_INTERFACE               lpInterfaces;

} NON_CONST_USB_CONFIGURATION,LPNON_CONST_USB_CONFIGURATI;

  UKEY开发中涉及的几个描述符

UKEY驱动开发的过程中,主要在attachdevice函数中读取设备的参数,有时读取的参数可能是错的,这是就必须对参数进行强行赋值,然后传到pdatabuffer.主要涉及的参数有以下几个:

(1)    deviceInfo. Descriptor//设备描述表, attachdevice的第6/7步读取.

(2)    deviceInfo. lpConfigs. Descriptor//配置描述表,attachdevice的第9步读取.

(3)    deviceInfo. lpConfigs. lpInterfaces. Descriptor//接口描述表第10步读取

(4) deviceInfo. lpConfigs. lpEndpoints. Descriptor//接口描述表第10步读取

1设备

设备描述表给出了USB设备的一般信息。这包括对设备及所有设备配置起全程作用的信息。一个USB设备只能有一个设备描述表。

 

设备描述表(USB_DEVICE_DESCRIPTOR  Descriptor)

偏移量

大小

描述

0

bLength

1

数字

此描述表的字节数

1

bDecriptorType

1

常量

描述表种类为设备

2

bcdUSB

2

BCD

此设备与描述表兼容的USB设备说明版本号(BCD 码)

4

bDeviceClass

1

设备类码

如果此域的值为0则一个设置下每个接口指出它自己的类,并个接口各自独立工作。

如果此域的值处于1~FEH之间,则设备在不同的接口上支持不同的类。并这些接口可能不能独立工作。此值指出了,这些接口集体的类定义。

如果此域设为FFH,则此设备的类由厂商定义。

5

bDeviceSubClass

1

子类

子类码

   这些码值的具体含义根据bDeviceClass 域来看。

   bDeviceClass 域为零,此域也须为零

bDeviceClass 域为FFH,此域的所有值保留。

6

bDevicePortocol

1

协议

协议码

   这些码的值视bDeviceClass bDeviceSubClass 的值而定。

     如果设备支持设备基础上的类相关的协议,此码标志了设备类说明上的值。

     如果此域的值为零,则此设备不在设备基础上支持设备类相关的协议。然而,它可能在接口基础上支持设备类相关的协议。

    如果此域的值为FFH,此设备使用厂商定义的协议。

7

bMaxPacketSize0

1

数字

端点0的最大包大小(仅8,16,32,64

为合法值)

8

idVendor

2

ID

厂商标志(由USB标准付值)

10

idProduct

2

ID

产品标志(由厂商付值)

   12

bcdDevice

        2

BCD

设备发行号(BCD 码)

   14

iManufacturer

        1

索引

描述厂商信息的字串的索引。

   15

iProduct

        1

索引

描述产品信息的字串的索引。

   16

iSerialNumber

        1

索引

描述设备序列号信息的字串的索引。

   17

bNumConfigurations

        1

数字

可能的设置数

 

 

2         配置

 

配置描述表给出了一设备配置的信息, 此描述表给出了此配置下的接口数一个USB设备有一个或多个配置。每个配置只有一个或多个接口。而每个接口又有0个或多个端节点。

配置描述表(lpConfigs. Descriptor)

   偏移量

    

 大小

  

   描述

      0

     bLength

   1

   数字

此描述表的字节数。

      1

bDescriptorType

   1

   常量

配置描述表类型

      2

wTotalLength

   2

   数字

此配置信息的总长(包括配置,接口,端点和设备类及厂商定义的描述表)

      4

bNumInterfaces

   1

   数字

此配置所支持的接口个数

      5

bCongfigurationValue

   1

   数字

SetConfiguration()请求中用作参数来选定此配置。

      6

iConfiguration

   1

   索引

描述此配置的字串描述表索引

      7

bmAttributes

   1

   位图

配置特性:

D7 保留(设为一)

D6 自给电源

D5 远程唤醒

D4..0:保留(设为一)

一个既用总线电源又有自给电源的设备会在MaxPower域指出需要从总线取的电量。并设置D6为一。运行时期的实际电源模式可由GetStatus(DEVICE) 请求得到。

      8

MaxPower

   1

    mA

在此配置下的总线电源耗费量。以 2mA 为一个单位。

 

3         接口

 

此描述表在一个配置内给出一个接口的信息

 

接口描述表(lpConfigs. lpInterfaces   . Descriptor)

偏移量

大小

说明

       0

bLength

   1

      数字

此表的字节数

       1

bDescriptorType

   1

      常量

接口描述表类

       2

bInterfaceNumber

   1

      数字

接口号,当前配置支持的接口数组索引(从零开始)

       3

bAlternateSetting

  1

      数字

可选设置的索引值。

       4

bNumEndpoints

  1

      数字

此接口用的端点数量,如果是零则说明此接口只用缺省控制管道。

       5

bInterfaceClass

        1

     

类值

  零值为将来的标准保留。

  如果此域的值设为FFH,则此接口类由厂商说明。

  所有其它的值由USB 说明保留。

       6

bInterfaceSubClass

        1

      子类

子类码

   这些值的定义视bInterfaceClass域而定。

如果bInterfaceClass域的值为零则此域的值必须为零。

bInterfaceClass域不为FFH则所有值由USB 所保留。

       7

bInterfaceProtocol

        1

      协议

协议码:bInterfaceClass bInterfaceSubClass 域的值而定.如果一个接口支持设备类相关的请求此域的值指出了设备类说明中所定义的协议.

 

       8

iInterface

        1

       索引

描述此接口的字串描述表的索引值。

 

4 节点

 

每个接口使用的结点都有自己的描述表,此描述表被主机用来决定每个节点的带宽需求。每个结点的描述表总是作为配置描述的一部分返回的,结点0无描述表。

 

标准端点描述表deviceInfo. lpConfigs. lpEndpoints. Descriptor

偏移量

大小

说明

0

bLength

1

数字

此描述表的字节数

1

bDescriptorType

1

常量

端点描述表类

     2

bEndpointAddress

    1

         端点

此描述表所描述的端点的地址。此地址的编码如下:

 Bit 3..0 : 端点号.

 Bit 6..4 : 保留,为零

 Bit 7:    方向,如果控制端点则略。

      0:出端点

      1:入端点

     3

bmAttributes

    1

     位图

此域的值描述的是在bConfigurationValue域所指的配置下端点的特性。

   Bit 1..0 :传送类型

     00=控制传送

     01=同步传送

     10=批传送

     11=中断传送

所有其它的位都保留。

 

     4

wMaxPacketSize

    2

     数字

当前配置下此端点能够接收或发送的最大数据包的大小。

  对与同步传送此值用于为每幀的数据净负荷预留时间。而通道可能在实际运行时不需要预留的带宽。实际带宽可由设备通过一种非USB定义的机制汇报给主机.

  对于中断传送,批传送,控制传送.端点可能发送较小的数据包。并且在结束传送后既有可能间隙时间来重启,也有可能不需要这段时间。具体请参照第五章。

  

     6

bInterval

    1

     数字

轮寻数据传送端点的时间间隙。

   此域的值对于批传送的端点及控制传送的端点忽略。对于同步传送的端点此域必需为1。对于中断传送的端点此域值的范围为1255

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值