USB基礎知識(下)

 

問題八:在標準的USB請求命令中,經常會看到Descriptor,這是什麼來的呢?

回答八:Descriptor即描述符,是一個完整的數據結構,可以通過C語言等編程實現,並存儲在USB設備中,用於描述一個USB設備的所有屬性,USB主機是通過一系列命令來要求設備發送這些信息的。它的作用就是通過如問答節中的命令操作來給主機傳遞信息,從而讓主機知道設備具有什麼功能、屬於哪一類設備、要佔用多少帶寬、使用哪類傳輸方式及數據量的大小,只有主機確定了這些信息之後,設備才能真正開始工作,所以描述符也是十分重要的部分,要好好掌握。標準的描述符有5種,USB爲這些描述符定義了編號:

1——設備描述符

2——配置描述符

3——字符描述符

4——接口描述符

5——端點描述符

上面的描述符之間有一定的關係,一個設備只有一個設備描述符,而一個設備描述符可以包含多個配置描述符,而一個配置描述符可以包含多個接口描述符,一個接口使用了幾個端點,就有幾個端點描述符。這間描述符是用一定的字段構成的,分別如下說明:

1、設備描述符

struct _DEVICE_DEscriptOR_STRUCT

{

 BYTE bLength;          //設備描述符的字節數大小,爲0x12

 BYTE bDescriptorType;  //描述符類型編號,爲0x01

 WORD bcdUSB;           //USB版本號

 BYTE bDeviceClass;     //USB分配的設備類代碼,0x01~0xfe爲標準設備類,0xff爲廠商自定義類型

                        //0x00不是在設備描述符中定義的,如HID

    BYTE bDeviceSubClass;   //usb分配的子類代碼,同上,值由USB規定和分配的

    BYTE bDeviceProtocl;    //USB分配的設備協議代碼,同上

    BYTE bMaxPacketSize0;   //端點0的最大包的大小

    WORD idVendor;          //廠商編號

    WORD idProduct;         //產品編號

    WORD bcdDevice;         //設備出廠編號

    BYTE iManufacturer;     //描述廠商字符串的索引

    BYTE iProduct;          //描述產品字符串的索引

    BYTE iSerialNumber;     //描述設備序列號字符串的索引

    BYTE bNumConfiguration; //可能的配置數量   

}

2、配置描述符

struct _CONFIGURATION_DEscriptOR_STRUCT

{

 BYTE bLength;          //設備描述符的字節數大小,爲0x12

 BYTE bDescriptorType;  //描述符類型編號,爲0x01

 WORD wTotalLength;     //配置所返回的所有數量的大小

 BYTE bNumInterface;    //此配置所支持的接口數量

 BYTE bConfigurationVale;   //Set_Configuration命令需要的參數值

 BYTE iConfiguration;       //描述該配置的字符串的索引值

 BYTE bmAttribute;          //供電模式的選擇

 BYTE MaxPower;             //設備從總線提取的最大電流

}

3、字符描述符

struct _STRING_DEscriptOR_STRUCT

{

 BYTE bLength;          //設備描述符的字節數大小,爲0x12

 BYTE bDescriptorType;  //描述符類型編號,爲0x01

 BYTE SomeDescriptor[36];          //UNICODE編碼的字符串

}

4、接口描述符

struct _INTERFACE_DEscriptOR_STRUCT

{

 BYTE bLength;          //設備描述符的字節數大小,爲0x12

 BYTE bDescriptorType;  //描述符類型編號,爲0x01

 BYTE bInterfaceNunber; //接口的編號

 BYTE bAlternateSetting;//備用的接口描述符編號

 BYTE bNumEndpoints;    //該接口使用端點數,不包括端點0

 BYTE bInterfaceClass;  //接口類型

 BYTE bInterfaceSubClass;//接口子類型

 BYTE bInterfaceProtocol;//接口所遵循的協議

 BYTE iInterface;        //描述該接口的字符串索引值

}

5、端點描述符

struct _ENDPOIN_DEscriptOR_STRUCT

{

 BYTE bLength;          //設備描述符的字節數大小,爲0x12

 BYTE bDescriptorType;  //描述符類型編號,爲0x01

 BYTE bEndpointAddress; //端點地址及輸入輸出屬性

 BYTE bmAttribute;      //端點的傳輸類型屬性

 WORD wMaxPacketSize;   //端點收、發的最大包的大小

 BYTE bInterval;        //主機查詢端點的時間間隔

}

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章