usb裝置的描述符和命令 讀後解

2021-07-10 15:50:04 字數 2883 閱讀 6369

在usb裝置中,主要的工作部分為主機和裝置之前資料傳輸過程,其中包含描述符(如,裝置,配置,字串,介面,端點描述符),具體如下

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

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

在usb1.x中,規定了5種標準描述符:裝置描述符(device descriptor)、配置描述符(configuration descriptor)、字串描述符(string descriptor)、介面描述符(inte***ce descriptor)和端點描述符(endpoint descriptor)。

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

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

1、裝置描述符

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

bdescriptortype

為描述符的型別,其含義可查下表(此表也適用於標準命令

get_descriptor

中wvalue

域高位元組的取值含義):

裝置類**

bdeviceclass

可查下表:

下表列出了乙個

usb2

、配置描述符

配置描述符中包括了描述符的長度(屬於此描述符的所有介面描述符和端點描述符的長度的和)、供電方式(自供電

/匯流排供電)、最大耗電量等。主果主機發出

usb標準命令

get_descriptor

要求得到裝置的某個配置描述符,那麼除了此配置描述符以外,此配置包含的所有介面描述符與端點描述符都將提供給

usb主機。

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

3、介面描述符

配置描述符中包含了乙個或多個介面描述符,這裡的「介面」並不是指物理存在的介面,在這裡把它稱之為「功能」更易理解些,例如乙個裝置既有錄音的功能又有揚聲器的功能,則這個裝置至少就有兩個「介面」。

如果乙個配置描述符不止支援乙個介面描述符,並且每個介面描述符都有乙個或多個端點描述符,那麼在響應usb主機的配置描述符命令時,usb裝置的端點描述符總是緊跟著相關的介面描述符後面,作為配置描述符的一部分被返回。介面描述符不可直接用set_descriptor和get_descriptor來訪問。

如果乙個介面僅使用端點0,則介面描述符以後就不再返回端點描述符,並且此介面表現的是乙個控制介面的特性,它使用與端點0相關聯的預設管道進行資料傳輸。在這種情況下bnumberendpoints域應被設定成0。介面描述符在說明端點個數並不把端點0計算在內。 對於

binte***ceclass

字段,表示介面所屬的類別,

usb協議根據功能將不同的介面劃分成不的類,其具體含義如下表所示:

4

、端點描述符

端點是裝置與主機之間進行資料傳輸的邏輯介面,除配置使用的端點

0(控制端點,一般乙個裝置只有乙個控制端點)為雙向埠外,其它均為單向。端點描述符描述了資料的傳輸型別、傳輸方向、資料報大小和端點號(也可稱為端點位址)等。

除了描述符中描述的端點外,每個裝置必須要有乙個預設的控制型端點,位址為

0,它的資料傳輸為雙向,而且沒有專門的描述符,只是在裝置描述符中定義了它的最大包長度。主機通過此端點向裝置傳送命令,獲得裝置的各種描述符的資訊,並通過它來配置裝置。

下表是一種滑鼠的端點描述符的示例,該端點是乙個中斷端點:

5

、字串描述符

字串描述符是一種可選的

usb標準描述符,描述了如製商、裝置名稱或序列號等資訊。如果乙個裝置無字串描述符,則其它描述符中與字串有關的索引值都必須為

0。字串使用的是

unicode

編碼。主機請示得到某個字串描述符時一般分成兩步:首先主機向裝置發出

usb標準命令

get_descriptor

,其中所使用的字串的索引值為

0,裝置返回乙個字串描述符,此描述符的結構如下:

該字串描述符雙位元組的語言

id的陣列,

wlangid[0]~wlangid[x]

指明了裝置支援的語言,具體含義可檢視

usb_langids.pdf

。主機根據自己需要的語言,再次向裝置發出

usb標準命令

get_descriptor

,指明所要求得到的字串的索引值和語言。這次裝置所返回的是

unicode

編號的字串描述符,其結構如下:

bstring

域為裝置實際返回的以

unicode

編碼的字串流,我們在編寫裝置端硬體驅動的時候需要將字串轉換為

unicode

編碼,您可以通過一些

unicode

轉換工具進行轉換。

USB裝置開發 usb描述符概述

說到usb裝置,不得不提到各種描述符 descriptors 一般來說,描述符有如下幾種 1 裝置描述符 device descriptors 2 配置描述符 configuration descriptors 2 介面描述符 inte ce descriptors 3 端點描述符 endpoint...

USB裝置開發 usb描述符概述

說到usb裝置,不得不提到各種描述符 descriptors 一般來說,描述符有如下幾種 1 裝置描述符 device descriptors 2 配置描述符 configuration descriptors 2 介面描述符 inte ce descriptors 3 端點描述符 endpoint...

USB 列舉和裝置描述符之學習筆記

無論何時,當usb裝置連線到usb匯流排時,usb子系統都會進行列舉 enumeration 操作。usb裝置被分配到乙個唯一的裝置編號值 1 127 然後裝置描述符被讀出。usb裝置描述符是乙個包含有裝置資訊和屬性的資料結構。usb規範定義描述符的層次結構如下 標準描述符 例如,乙個帶有micro...