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字節。其格式如下:

發佈了33 篇原創文章 · 獲贊 16 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章