USB描述符的分類與介紹
USB的符述符分爲幾類?有人可能會答:設備描述符、配置描述符、接口描述符、端點描述符、字符串描述符等。但這裏說的不是這樣的。上面的幾類描述符屬於USB標準描述符。另外還有HID描述符和Hub描述符。所以分類是這樣的:
1. 標準描述符
1) 設備描述符
2) 配置描述符
3) 字符串描述符
4) 接口描述符
5) 端點描述符
6) 設備限定描述符
7) 其他速率配置描述符
2. HID描述符
3. Hub描述符
1 標準描述符
標準描述符是指一組設備描述符,包括設備描述符、配置描述符、字符串描述符、接口描述符、端點描述符、設備限定描述符和其他速率配置描述符。這七種 描述符具有類似的格式,比如說它們的第一個字段都是bLength,第二個字段都是bDescriptorType。七種描述符在使用時以 bDescriptorType字段來區分。描述符類型與對應的bDescriptorType字段值對應關係爲:
設備描述符描述的是設備的整體信息,與設備本身一一對應,一個設備只能有一個設備描述符。在主機對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。
bLength:字符串描述符的長度,其值應爲N+2。
bDescriptorType:字符串描述符的類型值,爲0x03。
bString:UNICODE編碼的字符串。