usb-descriptor(一 )

迷霧綠洲發表於2016-12-29

USB協議為USB裝置定義了一套描述裝置功能和屬性的有固定結構的描述符,包括標準的描述符:
1. 裝置描述符
2. 配置描述符
3. 介面描述符
4. 端點描述符
5. 字串描述符
6. 百標準描述符,如類描述符。
USB裝置通過這些描述符向USB主機彙報裝置的各種各樣屬性,主機通過對這些描述符的訪問對裝置進行型別識別、配置併為其提供相應的客戶端驅動程式。

  USB裝置通過描述符反映自己的裝置特性。USB描述符是由特定格式排列的一組資料結構組成。

  在USB裝置列舉過程中,主機端的協義軟體需要解析從USB裝置讀取的所有描述符資訊。在USB主向裝置傳送讀取描述符的請求後,USB裝置將所有的描述符以連續的資料流方式傳輸給USB主機。主機從第一個讀到的字元開始,根據雙方規定好的資料格式,順序地解析讀到的資料流。

  USB描述符包含標準描述符、類描述符和廠商特定描述3種形式。任何一種裝置必須USB標準描述符(隊字串描述符可選外)。

  在USB1.X中,規定了5種標準描述符:裝置描述符(Device Descriptor)、配置描述符(Configuration Descriptor)、介面描述符(Interface Descriptor)、端點描述符(Endpoint Descriptor)和字串描述符(String Descriptor)。

  每個USB裝置只有一個裝置描述符,而一個裝置中可包含一個或多個配置描述符,即USB裝置可以有多種配置。裝置的每一個配置中又可以包含一個或多個介面描述符,即USB裝置可以支援多種功能(介面),介面的特性通過描述符提供。

  在USB主機訪問USB裝置的描述符時,USB裝置依照裝置描述符、配置描述符、介面描述符、端點描述符、字串描述符順序將所有描述符傳給主機。一裝置至少要包含裝置描述符、配置描述符和介面描述符,如果USB裝置沒有端點描述符,則它僅僅用預設管道與主機進行資料傳輸。

裝置描述符

  裝置描述符給出了USB裝置的一般資訊,包括對裝置及在裝置配置中起全程作用的資訊,包括製造商標識號ID、產品序列號、所屬裝置類號、預設端點的最大包長度和配置描述符的個數等。一個USB裝置必須有且僅有一個裝置描述符。裝置描述符是裝置連線到匯流排上時USB主機所讀取的第一個描述符,它包含了14個欄位,結構如下:


偏移量 大小 描述
0 bLength 1 數字 此描述表的位元組數
1 bDecriptorType 1 常量 描述符的型別(此處應為0x01,即裝置描述符)
2 bcdUSB 2 BCD碼 此裝置與描述表相容的USB裝置說明版本號(BCD 碼)
4 bDeviceClass 1 裝置類碼: 如果此域的值為0則一個設定下每個介面指出它自己的類,各個介面各自獨立工作。 如果此域的值處於1~FEH之間,則裝置在不同的介面上支援不同的類。並這些介面可能不能獨立工作。此值指出了這些介面集體的類定義。 如果此域設為FFH,則此裝置的類由廠商定義。
5 bDeviceSubClass 1 子類 子類挖碼 這些碼值的具體含義根據bDeviceClass 域來看。 如bDeviceClass 域為零,此域也須為零 如bDeviceClass 域為FFH,此域的所有值保留。
6 bDevicePortocol 1 協議 協議碼 這些碼的值視bDeviceClass 和 bDeviceSubClass 的值而定。 如果裝置支援裝置類相關的協議,此碼標誌了裝置類的值。如果此域的值為零,則此裝置不支援裝置類相關的協議,然而,可能它的介面支援裝置類相關的協議。如果此域的值為FFH,此裝置使用廠商定義的協議。
7 bMaxPacketSize0 1 數字 端點0的最大包大小(僅8,16,32,64 為合法值)
8 idVendor 2 ID 廠商標誌(由USB-IF組織賦值)
10 idProduct 2 ID 產品標誌(由廠商賦值)
12 bcdDevice 2 BCD 碼 裝置發行號(BCD 碼)
14 iManufacturer 1 索引 描述廠商資訊的字串描述符的索引值。
15 iProduct 1 索引 描述產品資訊的字串描述符的索引值。
16 iSerialNumber 1 索引 描述裝置序列號資訊的字串描述符的索引值。
17 bNumConfigurations 1 數字 可能的配置描述符數目

其中bDescriptorType為描述符的型別,其含義可查下表(此表也適用於標準命令Get_Descriptor中wValue域高位元組的取值含義):

表5、USB描述符的型別值

型別 描述符 描述符值
標準描述符 裝置描述符(Device Descriptor) 0x01
配置描述符(Configuration Descriptor) 0x02
字串描述符(String Descriptor) 0x03
介面描述符(Interface Descriptor) 0x04
端點描述符(EndPont Descriptor) 0x05
類描述符 集線器類描述符(Hub Descriptor) 0x29
人機介面類描述符(HID) 0x21
廠商定義的描述符 0xFF

裝置類程式碼bDeviceClass可查下表:

表6、裝置的類別(bDeviceClass)

值(十進位制) 值(十六進位制) 說明
0 0x00 介面描述符中提供類的值
2 0x02 通訊類
9 0x09 集線器類
220 0xDC 用於診斷用途的裝置類
224 0xE0 無線通訊裝置類
255 0xFF 廠商定義的裝置類

下表列出了一個USB滑鼠的裝置描述符的例子,供大家分析一下:

表7、一種滑鼠的裝置描述符示例

欄位 描述符值(十六制)
bLength 0x12
bDecriptorType 0x01
bcdUSB x0110
DeviceClass 0x00
bDeviceSubClass 0x00
bDevicePortocol 0x00
bMaxPacketSize0 0x08
idVendor 0x045E(Microsoft Corporation)
idProduct 0x0047
bcdDevice 0x300
iManufacturer 0x01
iProduct 0x03
iSerialNumber 0x00
bNumConfigurations 0x01

2、配置描述符

  配置描述符中包括了描述符的長度(屬於此描述符的所有介面描述符和端點描述符的長度的和)、供電方式(自供電/匯流排供電)、最大耗電量等。主果主機發出USB標準命令Get_Descriptor要求得到裝置的某個配置描述符,那麼除了此配置描述符以外,此配置包含的所有介面描述符與端點描述符都將提供給USB主機。

表8、USB配置描述符的結構

偏移量 大小 描述
0 bLength 1 數字 此描述表的位元組數長度。
1 bDescriptorType 1 常量 配置描述表型別(此處為0x02)
2 wTotalLength 2 數字 此配置資訊的總長(包括配置,介面,端點和裝置類及廠商定義的描述符)
4 bNumInterfaces 1 數字 此配置所支援的介面個數
5 bCongfigurationValue 1 數字 在SetConfiguration()請求中用作引數來選定此配置。
6 iConfiguration 1 索引 描述此配置的字串描述表索引
7 bmAttributes 1 點陣圖 配置特性: D7: 保留(設為一) D6: 自給電源 D5: 遠端喚醒 D4..0:保留(設為一)
8 MaxPower 1 mA 在此配置下的匯流排電源耗費量。以 2mA 為一個單位。

下面是一種硬碟的配置描述符示例:

表9、一種硬碟的配置描述符示例

欄位 描述符值(十六進位制)
bLength 0x09
bDescriptorType 0x02
wTotalLength 0x01F
bNumInterfaces 0x01
bCongfigurationValue 0x01
iConfiguration 0x00
bmAttributes 0x0C
MaxPower 0x32

相關文章