主機是通過標準的USB請求命令中的GET_DESCRIPTOR獲得一個USB設備屬性的描述符的。關于Descriptor即描述符,是一個完整的數(shù)據(jù)結構,可以通過C語言等編程實現(xiàn),并存儲在USB設備中,用于描述一個USB設備的所有屬性。它的作用就是通過響應主機的請求命令操作來給主機傳遞信息,從而讓主機知道設備具有什么功能、屬于哪一類設備、要占用多少帶寬、使用哪類傳輸方式及數(shù)據(jù)量的大小,只有主機確定了這些信息,并為設備分配資源后,設備才能真正開始工作。標準的描述符有5種,USB為這些描述符定義了編號:
1——設備描述符
2——配置描述符
3——字符描述符
4——接口描述符
5——端點描述符
一個設備只有一個設備描述符,而一個設備描述符可以包含多個配置描述符,而一個配置描述符可以包含多個接口描述符,一個接口使用了幾個端點,就有幾個端點描述符。這些描述符是用一定的字段構成的,分別如下說明:
1.設備描述符
struct_DEVICE_DEscriptOR_STRUCT
{
BYTE bLength;
BYTE bDescriptorType;
WORD bcdUSB;
BYTE bDeviceClass;
BYTE bDeviceSubClass;
BYTE bDeviceProtocl;
BYTE bMaxPacketSize0;
WORD idVendor;
WORD idProduct;
WORD bcdDevice;
BYTE iManufacturer;
BYTE iProduct;
BYTE iSeialNumber;
BYTE bNumConfiguration;
}
2.配置描述符
struct_CONFIGURATION_DEscriptOR_STRUCT
{
BYTE bLength;
BYTE bDescriptorType;
WORD wTotalLength;
BYTE bNumlnterface;
BYTE bConfigurationValue;
BYTE iConfiguration:
BYTE bmAttribute;
BYTE MaxPower;
}
3.字符描述符
struct_STRING_DEscriptOR_STRUCT
{
BYTE bLength;
BYTE bDescriptorType;
BYTE SomeDes criptor[36];
}
4.接口描述符
struct_INTERFACE_DEscriptOR_STRUCT
{
BYTE bLength;
BYTE bDescriptorType;
BYTE bInterfaceNumber;
BYTE bAlternateSetting;
BYTE bNumEndpoints:
BYTE bInterfaceSubClass;
BYTE bInterfaceProtocol;
BYTE iInterface;
}
5.端點描述符
struct_ENDPOINT_DescriptOR_STRUCT
{
BYTE bLength;
BYTE bDescriptorType;
BYTE bEndpointAddress;
BYTE bmAttribute;
WORD wMaxPacketSize;
BYTE bInterval;
}