关于usb描述符

来源:互联网 发布:金再来实战指标源码 编辑:程序博客网 时间:2024/06/15 07:26

USB的描述符主要有设备描述符,设备限定描述符,接口描述符,端点描述符,字符串描述符等等,usb的描述符之间的关系是一层一层的,首先最上层的是设备描述符,然后是配置描述符,在下面的是接口描述符,最后是端点描述符.

描述符在一个usb的设备中所起的作用是十分重要的,在设备连接到usb主机以后,主机首先是通过默认的通道发送要取得设备描述符的请求,然后设备在枚举的数据阶段发送设备描述符给主机,主机会根据设备描述符里面的一些信息来决定给usb设备加载相关的驱动程序。

下面详细介绍有关这些描述符的定义:

1 设备描述符:

typedef struct _DEVICE_DCEs criptOR_STRUCT
{
 BYTE blength;                               //
设备描述符的字节数大小
 BYTE bDes criptorType;                      //
设备描述符类型编号
 WORD bcdUSB;                                //USB
版本号
 BYTE bDeviceClass;                          //USB
分配的设备类代码
 BYTE bDeviceSubClass;                       //USB
分配的子类代码
 BYTE bDeviceProtocol;                       //USB
分配的设备协议代码
 BYTE bMaxPacketSize0;                       //
端点0的最大包大小
 WORD idVendor;                              //
厂商编号
 WORD idProduct;                             //
产品编号
 WORD bcdDevice;                             //
设备出厂编号
 BYTE iManufacturer;                         //
设备厂商字符串的索引
 BYTE iProduct;                              //
描述产品字符串的索引
 BYTE iSerialNumber;                         //
描述设备序列号字符串的索引
 BYTE bNumConfigurations;                    //
可能的配置数量
}

2 配置描述符

typedef struct _CONFIGURATION_DEs criptOR_STRUCT
{
 BYTE bLength;                               //
配置描述符的字节数大小
 BYTE bDes criptorType;                       //
配置描述符类型编号
 WORD wTotalLength;                          //
此配置返回的所有数据大小
 BYTE bNumInterfaces;                        //
此配置所支持的接口数量
 BYTE bConfigurationValue;                   //Set_Configuration
命令所需要的参数值
 BYTE iConfiguration;                        //
描述该配置的字符串的索引值
 BYTE bmAttributes;                          //
供电模式的选择
 BYTE MaxPower;                              //
设备从总线提取的最大电流
}

3 接口描述符

typedef struct _INTERFACE_DEs criptOR_STRUCT
{
 BYTE bLength;                               //
接口描述符的字节数大小
 BYTE bDes criptorType;                       //
接口描述符的类型编号
 BYTE bInterfaceNumber;                      //
该接口的编号
 BYTE bAlternateSetting;                     //
备用的接口描述符编号
 BYTE bNumEndpoints;                         //
该接口使用的端点数,不包括端点0
 BYTE bInterfaceClass;                       //
接口类型
 BYTE bInterfaceSubClass;                    //
接口子类型
 BYTE bInterfaceProtocol;                    //
接口遵循的协议
 BYTE iInterface;                            //
描述该接口的字符串索引值
}

4 端点描述符

typedef struct _ENDPOINT_DEs criptOR_STRUCT
{
 BYTE bLegth;                                //
端点描述符字节数大小
 BYTE bDes criptorType;                       //
端点描述符类型编号
 BYTE bEndpointAddress;                      //
端点地址及输入输出属性
 BYTE bmAttributes;                          //
端点的传输类型属性
 WORD wMaxPacketSize;                        //
端点收、发的最大包大小
 BYTE bInterval;                             //
主机查询端点的时间间隔
}

在设计程序的时候,除了在.c主文件中配置端点以外,在设备描述符的文件中也不要忘记配置端点的特性,这点十分的重要。

原创粉丝点击