USB描述符介绍



  标准的USB设备有5USB描述符:设备描述符,配置描述符,字符串描述符,接口描述符,端点描述符。下面详解:

1、设备描述符:一个设备只有一个设备描述符

typedef struct _USB_DEVICE_DESCRIPTOR_
{
BYTE bLength,
BYTE bDescriptorType,
WORD bcdUSB,
BYTE bDeviceClass,
BTYE bDeviceSubClass,
BYTE bDeviceProtol,
BYTE bMaxPacketSize0,
WORD idVenderI,
WORD idProduct,
WORD bcdDevice,
BYTE iManufacturer,
BYTE iProduct,
BYTE iSerialNumber,
BYTE iNumConfiguations
}USB_DEVICE_DESCRIPTOR;

bLength : 描述符大小.固定为0x12
bDescriptorType :
设备描述符类型.固定为0x01
bcdUSB : USB
规范发布号.表示了本设备能适用于那种协议,如2.0=02001.1=0110等.

bDeviceClass : 类型代码(由USB指定)。当它的值是0时,表示所有接口在配置描述符里,并且所有接口是独立的。当它的值是1FEH时,表示不同的接口关联的。当它的值是FFH时,它是厂商自己定义的.
bDeviceSubClass :
子类型代码(由USB分配).如果bDeviceClass值是0,一定要设置为0.其它情况就跟据USB-IF组织定义的编码.
bDeviceProtocol :
协议代码(由USB分配).如果使用USB-IF组织定义的协议,就需要设置这里的值,否则直接设置为0。如果厂商自己定义的可以设置为FFH
bMaxPacketSize0 :
端点0最大分组大小(只有8,16,32,64有效).
idVendor :
供应商ID(由USB分配).

idProduct : 产品ID(由厂商分配).由供应商ID和产品ID,就可以让操作系统加载不同的驱动程序.
bcdDevice :
设备出产编码.由厂家自行设置.

iManufacturer : 厂商描述符字符串索引.索引到对应的字符串描述符.为0则表示没有.
iProduct : :
产品描述符字符串索引.同上.
iSerialNumber :
设备序列号字符串索引.同上.
bNumConfigurations :
可能的配置数.指配置字符串的个数
2
、配置描述符:配置描述符定义了设备的配置信息,一个设备可以有多个配置描述符
typedef struct _USB_CONFIGURATION_DESCRIPTOR_
{
BYTE bLength,
BYTE bDescriptorType,
WORD wTotalLength,
BYTE bNumInterfaces,
BYTE bConfigurationValue,
BYTE iConfiguration,
BYTE bmAttributes,
BYTE MaxPower
}USB_CONFIGURATION_DESCRIPTOR;

bLength : 描述符大小.固定为0x09
bDescriptorType :
配置描述符类型.固定为0x02
wTotalLength :
返回整个数据的长度.指此配置返回的配置描述符,接口描述符以及端点描述符的全部大小.
bNumInterfaces :
配置所支持的接口数.指该配置配备的接口数量,也表示该配置下接口描述符数量.
bConfigurationValue :
作为Set Configuration的一个参数选择配置值.
iConfiguration :
用于描述该配置字符串描述符的索引.
bmAttributes :
供电模式选择.Bit4-0保留,D7:总线供电,D6:自供电,D5:远程唤醒.
MaxPower :
总线供电的USB设备的最大消耗电流.以2mA为单位.
3
、接口描述符:接口描述符说明了接口所提供的配置,一个配置所拥有的接口数量通过配置描述符的bNumInterfaces决定
typedef struct _USB_INTERFACE_DESCRIPTOR_
{
BYTE bLength,
BYTE bDescriptorType,
BYTE bInterfaceNumber,
BYTE bAlternateSetting,
BYTE bNumEndpoint,
BYTE bInterfaceClass,
BYTE bInterfaceSubClass,
BYTE bInterfaceProtocol,
BYTE iInterface
}USB_INTERFACE_DESCRIPTOR;

bLength : 描述符大小.固定为0x09
bDescriptorType :
接口描述符类型.固定为0x04
bInterfaceNumber:
该接口的编号.
bAlternateSetting :
用于为上一个字段选择可供替换的位置.即备用的接口描述符标号.
bNumEndpoint :
使用的端点数目.端点0除外.
bInterfaceClass :
类型代码(由USB分配).
bInterfaceSunClass :
子类型代码(由USB分配).
bInterfaceProtocol :
协议代码(由USB分配).
iInterface :
字符串描述符的索引
4
、端点描述符:USB设备中的每个端点都有自己的端点描述符,由接口描述符中的bNumEndpoint决定其数量
typedef struct _USB_ENDPOINT_DESCRIPTOR_
{
BYTE bLength,
BYTE bDescriptorType,
BYTE bEndpointAddress,
BYTE bmAttributes,
WORD wMaxPacketSize,
BYTE bInterval
}USB_ENDPOINT_DESCRIPTOR;

bLength : 描述符大小.固定为0x07
bDescriptorType :
接口描述符类型.固定为0x05
bEndpointType : USB
设备的端点地址.Bit7,方向,对于控制端点可以忽略,1/0:IN/OUTBit6-4,保留.BIt3-0:端点号.
bmAttributes :
端点属性.Bit7-2,保留.BIt1-000控制,01同步,02批量,03中断.
wMaxPacketSize :
本端点接收或发送的最大信息包大小.
bInterval :
轮训数据传送端点的时间间隔.对于批量传送和控制传送的端点忽略.对于同步传送的端点,必须为1,对于中断传送的端点,范围为1-255.
5
、字符串描述符:其中字符串描述符是可选的.如果不支持字符串描述符,其设备,配置,接口描述符内的所有字符串描述符索引都必须为0
typedef struct _USB_STRING_DESCRIPTION_
{
BYTE bLength,
BYTE bDescriptionType,
BYTE bString[1];
}USB_STRING_DESCRIPTION;

bLength : 描述符大小.由整个字符串的长度加上bLengthbDescriptorType的长度决定.
bDescriptorType :
接口描述符类型.固定为0x03
bString[1] : Unicode
编码字符串.

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值