注册 登录
查看: 674|回复: 2

[其他] 5种USB描述符的定义详解

[复制链接]
发表于 2013-9-20 17:36:29 | 显示全部楼层 |阅读模式
本帖最后由 风落小鱼 于 2013-9-20 17:39 编辑

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

设备描述符:

  1. typedef struct _USB_DEVICE_DESCRIPTOR_
  2. {
  3.     BYTE        bLength,
  4.     BYTE        bDescriptorType,
  5.     WORD      bcdUSB,
  6.     BYTE        bDeviceClass,
  7.     BTYE        bDeviceSubClass,
  8.     BYTE        bDeviceProtol,
  9.     BYTE        bMaxPacketSize0,
  10.     WORD     idVenderI,
  11.     WORD      idProduct,
  12.     WORD      bcdDevice,
  13.     BYTE        iManufacturer,
  14.     BYTE        iProduct,
  15.     BYTE        iSerialNumber,
  16.     BYTE        iNumConfiguations
  17. }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 : 可能的配置数.指配置字符串的个数.

配置描述符:

  1. typedef struct _USB_CONFIGURATION_DESCRIPTOR_
  2. {
  3.     BYTE      bLength,
  4.     BYTE      bDescriptorType,
  5.     WORD    wTotalLength,
  6.     BYTE      bNumInterfaces,
  7.     BYTE      bConfigurationValue,
  8.     BYTE      iConfiguration,
  9.     BYTE      bmAttributes,
  10.     BYTE      MaxPower
  11. }USB_CONFIGURATION_DESCRIPTOR;


bLength : 描述符大小.固定为0x09.
bDescriptorType : 配置描述符类型.固定为0x02.
wTotalLength : 返回整个数据的长度.指此配置返回的配置描述符,接口描述符以及端点描述符的全部大小.
bNumInterfaces : 配置所支持的接口数.指该配置配备的接口数量,也表示该配置下接口描述符数量.
bConfigurationValue : 作为Set Configuration的一个参数选择配置值.
iConfiguration : 用于描述该配置字符串描述符的索引.
bmAttributes : 供电模式选择.Bit4-0保留,D7:总线供电,D6:自供电,D5:远程唤醒.
MaxPower : 总线供电的USB设备的最大消耗电流.以2mA为单位.

接口描述符:

  1. typedef struct _USB_INTERFACE_DESCRIPTOR_
  2. {
  3.     BYTE      bLength,
  4.     BYTE      bDescriptorType,
  5.     BYTE      bInterfaceNumber,
  6.     BYTE      bAlternateSetting,
  7.     BYTE      bNumEndpoint,
  8.     BYTE      bInterfaceClass,
  9.     BYTE      bInterfaceSubClass,
  10.     BYTE      bInterfaceProtocol,
  11.     BYTE      iInterface
  12. }USB_INTERFACE_DESCRIPTOR;


bLength : 描述符大小.固定为0x09.
bDescriptorType : 接口描述符类型.固定为0x04.
bInterfaceNumber: 该接口的编号.
bAlternateSetting : 用于为上一个字段选择可供替换的位置.即备用的接口描述符标号.
bNumEndpoint : 使用的端点数目.端点0除外.
bInterfaceClass : 类型代码(由USB分配).
bInterfaceSunClass : 子类型代码(由USB分配).
bInterfaceProtocol : 协议代码(由USB分配).
iInterface : 字符串描述符的索引.

端点描述符:

  1. typedef struct _USB_ENDPOINT_DESCRIPTOR_
  2. {
  3.     BYTE        bLength,
  4.     BYTE        bDescriptorType,
  5.     BYTE        bEndpointAddress,
  6.     BYTE        bmAttributes,
  7.     WORD      wMaxPacketSize,
  8.     BYTE        bInterval
  9. }USB_ENDPOINT_DESCRIPTOR;

bLength : 描述符大小.固定为0x07.
bDescriptorType : 接口描述符类型.固定为0x05.
bEndpointAddress : USB设备的端点地址.Bit7,方向,对于控制端点可以忽略,1/0:IN/OUT.Bit6-4,保留.BIt3-0:端点号.
bmAttributes : 端点属性.Bit7-2,保留.BIt1-0:00控制,01同步,02批量,03中断.
wMaxPacketSize : 本端点接收或发送的最大信息包大小.
bInterval : 轮训数据传送端点的时间间隔.对于批量传送和控制传送的端点忽略.对于同步传送的端点,必须为1,对于中断传送的端点,范围为1-255.

字符串描述符:

  1. typedef struct _USB_STRING_DESCRIPTION_
  2. {
  3.     BYTE      bLength,
  4.     BYTE      bDescriptionType,
  5.     BYTE      bString[1];
  6. }USB_STRING_DESCRIPTION;


bLength : 描述符大小.由整个字符串的长度加上bLength和bDescriptorType的长度决定.
bDescriptorType : 接口描述符类型.固定为0x03.
bString[1] : Unicode编码字符串.
  1. 出自 :http://blog.renren.com/share/242774692/959639406
回复

使用道具 举报

发表于 2013-9-21 10:23:26 | 显示全部楼层
抢沙发~我来顶楼主的
学习一下
回复 支持 反对

使用道具 举报

发表于 2014-8-7 10:41:20 | 显示全部楼层
走过路过,不能错过
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回列表 返回顶部