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主文件中配置端点以外,在设备描述符的文件中也不要忘记配置端点的特性,这点十分的重要。