1. 程式人生 > >USB中的描述符詳解【一】

USB中的描述符詳解【一】

USB描述符的分類與介紹

USB的符述符分為幾類?有人可能會答:裝置描述符、配置描述符、介面描述符、端點描述符、字串描述符等。但這裡說的不是這樣的。上面的幾類描述符屬於USB標準描述符。另外還有HID描述符和Hub描述符。所以分類是這樣的:
1. 標準描述符
1) 裝置描述符
             2) 配置描述符
             3) 字串描述符
             4) 介面描述符
             5) 端點描述符
             6) 裝置限定描述符
             7) 其他速率配置描述符
2. HID描述符
3. Hub描述符

1 標準描述符

標準描述符是指一組裝置描述符,包括裝置描述符、配置描述符、字串描述符、介面描述符、端點描述符、裝置限定描述符和其他速率配置描述符。這七種 描述符具有類似的格式,比如說它們的第一個欄位都是bLength,第二個欄位都是bDescriptorType。七種描述符在使用時以 bDescriptorType欄位來區分。描述符型別與對應的bDescriptorType欄位值對應關係為:

 1.1 裝置描述符

裝置描述符描述的是裝置的整體資訊,與裝置本身一一對應,一個裝置只能有一個裝置描述符。在主機對USB裝置列舉的過程中,首先要做的就是獲取裝置描述符,以對裝置有一個整體的瞭解。
裝置描述符由14個欄位組成,總長度18位元組:

 這些欄位都有一個小寫字母表示的字首,它們所表示的意思如下:
 b 表一個位元組,=8bits;
 w 表一個字,=16bits;
 bm 表按位定址;
 bcd 用BCD碼錶示;
 i 表索引值
 id 表標識碼
各欄位含義:
 bLength: 表示描述符的長度,對於裝置描述符來說,其值為18,即0x12。
 bDescriptorType: 描述符型別,對應表1中的值,裝置描述符為0x01。
 bcdUSB:該裝置遵循的USB版本號,以BCD碼錶示,USB1.1為0x0101,USB2.0為0x0200。
 bDeviceClass:該裝置所屬的標準裝置類,USB協議中對常見的裝置進行了分類。該欄位值為0x01~0xFE時,表示是USB協議中已定義的裝置類,常用的HID裝置類編號為0x03,其它裝置類編號參:
http://www.usb.org/developers/defined_class

 bDeviceProtocol:用於表示USB裝置類所採用的裝置類協議,其值和bDeviceClass和bDeviceSubClass有關。當此 欄位為0時,表示不使用任何裝置類協議。如果該USB裝置屬於某個裝置類和裝置子類,則應該繼續指明所採用的裝置類協議。當該欄位為0xFF時,表明裝置 類協議由供應商自定義。
 bMaxPacketSize0:用於表示在USB裝置中,端點0所支援最大資料包的長度,它以位元組為單位。對於低速USB設 備,bMaxPacketSize0為8;對於全速USB裝置,bMaxPacketSize0為8、16、32、64;對於高速USB設 備,bMaxPacketSize0為64。
 IdVendor:用於表示USB裝置供應商的ID。USB組織中規定每種產品都必須包含一個供應商ID,這樣可以使主機載入合適的驅動程式。
 idProduct:用於表示USB產品的ID,由裝置供應商提供。idProduct用於表示特定的USB裝置,在USB裝置上電的時候可以幫助USB主機選擇合適的驅動程式。
 bcdDevice:用於表示USB裝置的版本號,它以BCD碼的形式表示。一般來說bcdDevcie由裝置供應商指定,在USB裝置上電的時候可以幫助USB主機選擇合適的驅動程式。
 iManufacturer:用於表示供應商字串描述符的索引值。具體字串的內容在後面字串描述符中定義。如果沒有供應商字串,可以置0。
 iSerialNumber:用於表示裝置序列號字串描述符的索引值,如果沒有,可以置為0。
 bNumConfigurations:用於表示該USB裝置所支援的配置數。

1.2 配置描述符

一個USB裝置可以有多種配置,不同的配置使裝置工作在不同的狀態下,每個配置必須有一個配置描述符。其格式包括8個欄位,共9位元組。

 各個欄位含義:
 bLength:用於表示配置描述符的長度,固定為9個位元組,即0x09。
 bDescriptorType:用於表示配置描述符的型別值,固定為0x02。
 wTotalLength:用於表示配置資訊的總長度,包括配置描述符、介面描述符、端點描述符長度的總和。
 bNumInterfaces:用於表示配置所支援的介面數。一般來說,USB裝置的介面至少有一個,因此其最小值為1。
 bConfigurationValue:用於表示USB裝置的配置值。
 iConfiguration:用於指出配置字串描述符的索引值。具體字串的內容在後面字串描述符中定義。如果沒有配置字串,可以置為0。
 bmAttributes:用於表示USB裝置特性。bmAttributes是接位定址的,第6位置1表示使用匯流排電源;第5位置1表示支援遠端喚醒功能;該欄位其他位均保留,一般來說,第0~4位置0即可,第7位置1即可。
 bMaxPower:用於表示USB裝置執行時所需要消耗的匯流排電流,單位以2mA為基準。USB裝置可以從USB總線上獲得最大的電流為500mA,因此bMaxPower欄位的最大值可以設定為250。 1.3 字串描述符 在USB協議中字串描述符是可選的。字串描述符用於儲存一些供應商名稱、產品序列號等文字資訊。它的長度是不固定的,隨字串的數量和資訊的長度變化而變化。其格式如下:

 各欄位含義:
 bLength:字串描述符的長度,其值應為N+2。
 bDescriptorType:字串描述符的型別值,為0x03。
 bString:UNICODE編碼的字串。 1.4 介面描述符 介面是端點的集合,負責完成USB的特定功能,例如資料的輸入輸出。介面描述符用於描述一個介面,包含了介面的特性,如端點個數,所屬裝置類和子類等。它有9個欄位,共9位元組。其格式如下: