USB通信涉及的描述符及其结构详解

USB描述符

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

下面详解: 

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=0200,1.1=0110等.

 

bDeviceClass : 类型代码(由USB指定)。当它的值是0时,表示所有接口在配置描述符里,并且所有接口是独立的。当它的值是1到FEH时,表示不同的接口关联的。当它的值是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/OUT.Bit6-4,保留.BIt3-0:端点号.

bmAttributes : 端点属性.Bit7-2,保留.BIt1-0:00控制,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 : 描述符大小.由整个字符串的长度加上bLength和bDescriptorType的长度决定.

bDescriptorType : 接口描述符类型.固定为0x03.

bString[1] : Unicode编码字符串.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值