USB 3.0規范中譯本第9章 設備框架


本文為CoryXie原創譯文,轉載及有任何問題請聯系cory.xie#gmail.com

設備框架可以被分成三層:

  • 最底層是總線接口層,傳送和接收包。
  • 中間層處理在總線接口和設備的各種端點之間路由數據。如同USB 2.0,端點時最終的數據消費者或提供者。它可以被想作是數據源或者目的。端點的特性在端點描述符中描述,例如,端點的傳輸類型,最大負載(MaxPacketSize),以及一次可以接收或者發送的包個數(Burst Size)。
  • 最上層是由串行總線設備提供的功能性,例如,鼠標或者視頻攝像頭接口。

本章描述設備的中間層的通用屬性以及操作。這些屬性和操作被設備的功能特定的部分用來通過總線接口並最終於之間進行通信。

9.1 USB設備狀態 【USB Device States】

一個設備具有幾個可能的狀態。有些狀態對於USB和主機是可見的,而其他的則在設備內部。本節描述那些狀態。

9.1.1 可見的設備狀態【Visible Device States】

本節描述外部可見的設備狀態(見圖9-1)。表9-1總結了這些可見的設備狀態。

注意:設備執行一個復位操作作為對上游面端口上的復位信號的響應。當復位信號以及完成,設備就被復位。復位信號依賴於鏈路狀態。參考7.3節的細節。

注意USB 3.0集線器有兩個獨立的狀態圖,一個是對於9-2顯示的SuperSpeed部分,另一個是對可以在USB 2.0的圖9-1中找到的非SuperSpeed部分。

9-1. 可見的SuperSpeed 設備狀態 Visible SuperSpeed Device States

 

Attached

Powered

Default

Address

Configured

Suspended【注1

State

No

--

--

--

--

--

設備沒有連接到USB。其他的屬性不重要。

Yes

No

--

--

--

--

設備連接到USB但是沒有被上電。其他的屬性不重要。

Yes

Yes

No

--

--

--

設備連接到USB並且被上電,而其上游鏈路還沒有成功完成訓練。

Yes

Yes

Yes

No

--

--

設備連接到USB並且被上電,並且已經被復位,但是還沒有被設定一個唯一的地址。設備在默認的地址上響應。

Yes

Yes

Yes

Yes

No

--

設備連接到USB並且被上電,並且已經被復位,並且已經被設定了一個唯一的地址。設備還沒有被配置。

Yes

Yes

Yes

Yes

Yes

No

設備連接到USB並且被上電,並且已經被復位,並且有一個唯一的地址,已經被配置。主機現在可以使用設備提供的功能。

Yes

Yes

Yes

--

--

Yes

設備,在最小程度上,處於默認狀態(連接在USB上,已經被上電,並且其上游鏈路已經成功被訓練),並且其上游鏈路已經被其上游鏈路伙伴設置到U3。它可能也具有一個唯一的地址,並且為了使用而被配置。然而,由於設備是被掛起的,主機不能使用設備的功能。

 

9.1.1.1 Attached

設備可以被連接到USB,或從USB上斷開。設備在從USB上斷開后的狀態沒有在本規范中定義。本規范只包括設備一旦被連接后的必要的操作和屬性。

9.1.1.2 Powered

設備可以從外部電源以及/或者從他們所連接着的USB上獲得電源。外部供電的設備被稱為自供電設備。盡管自供電設備可能已經在他們被連接到USB之前就已經被加電,他們還是不被認為是處於Powered狀態,直到他們被連接到USB,並且VBUS已經被應用於該設備。

一個設備可同時支持自供電和總線供電的配置。有些設備配置支持任何任何兩種電源之一。其他設備配置可能僅當該設備是自供電時才可用。設備通過配置描述符報告電源能力。當前電源作為設備狀態的一部分被報告。設備可能會在任何時候改變他們的電源,例如,從自供電到總線供電。如果配置有能力同時支持兩種電源模式,對該配置被報告的最大電源是該設備在任何模式下設備將從Vbus汲取的最大值。該裝置應遵守這個最大值,而無論它的模式如何。如果配置只支持一個電源模式而設備的電源發生了變化,設備將失去其當前的配置及地址,並返回到Powered狀態。如果在超高速模式運行的設備是自供電的,並且其目前的配置要求超過150毫安,那么如果該設備切換到總線供電,它應該返回到Powered狀態。使用Vbus為集線器控制器供電的自供電集線器被允許保持在Configured狀態,如果本地電源被丟失。請注意,超高速設備在非SuperSpeed操作時抽取的最大電源制約於在USB 2.0規范規定的限制。

集線器端口應被供電,以偵測端口狀態的變化,包括連接和斷開。總線供電集線器不提供任何下游的電源,直至它們被配置,在這一點上,他們將提供他們的配置和電源允許的電源。一個設備應能從最初應用電源后,在規定的時間內可以被尋址(參見第7章)。當連接到一個端口被檢測到之后,主機可以復位端口,這也將復位連接到端口的設備。

9.1.1.3 Default

當操作在SuperSpeed模式,在設備已經被上電之后,它不應該響應任何總線事務,直到鏈路被成功訓練。之后設備可以在默認地址上被尋址。

一個可以在SuperSpeed操作的設備判定它是否可以在SuperSpeed操作,作為連接過程的一部分(參見第10章的Device Connection State Diagram中更多的細節)。

當在只有USB 2.0電氣環境中,一個USB 3.0設備應成功復位為被支持的USB 2.0速度的其中一個。該設備復位成功后,該設備也應成功地應付設備和配置描述符請求, 根據USB 2.0規范的要求返回適當的信息。在USB 2.0模式下運行時,該設備可能,也可能無法支持其預期的功能。

9.1.1.4 Address

當最初上電或在該設備已被復位時,所有設備使用默認的地址。每個設備復位后被主機指派一個唯一的地址。當設備被掛起時,設備保持其被分配的地址。

不論是否當前已經分配了一個唯一地址或使用的是默認地址,設備都在默認管道上響應請求。

9.1.1.5 Configured

在設備的功能可以被使用之前,設備應該被配置。從設備的角度,配置包括正確地處理具有非0的配置值的SetConfiguration()請求。配置一個設備或者改變一個替換的設置,將導致與在被影響到的接口中的所有的端點的狀態和配置值被設置到他們的默認值。這包括復位被影響到的接口中任何的端點的序列號到0。在進入被配置狀態的最初入口處,設備應該默認進入全功能的D0狀態。

9.1.1.6 Suspended

為了節省功耗,器件自動進入掛起狀態(掛起,默認,地址,或配置之一),當觀察到其上游的鏈路正被驅動到U3的狀態(參考第7.1.4.2.4節)。當掛起時,該設備保持任何內部的地位,包括它的地址和配置。

連接的設備應准備隨時從Default, Address, 或者Configured進入掛起。當所連接的集線器端口被設置進入U3時,一個設備應該進入掛起狀態。這被稱為選擇性掛起。

當觀察到其上行端口上的喚醒信號時,設備退出掛起模式(參考第7.4.9節)。設備也可能通過驅動恢復信號(參考第7.4.9節)和發送功能喚醒通知(參閱第8.5.6節)在其上游鏈路來表示遠程喚醒,請求主機退出掛起模式或選擇性掛起。設備發送遠程喚醒信號的能力是可選的。如果一個設備可支持遠程喚醒能力,設備應支持主機啟用和禁用此功能。當設備復位,遠程喚醒應被禁用。請參閱第9.2.5節獲取更多信息。

9.1.2 總線枚舉 【Bus Enumeration】

當一個設備連接到或從USB刪除時,主機使用一個稱為總線枚舉的過程來識別和管理必要的設備狀態變化。當一個設備連接到一個供電的端口時,主機會采取以下行動:

1. 該設備現在所連接到的集線器通過在其狀態改變管道上的一個回復來通知主機這一連接事件(參考第10.11.1節)。在這一時間點上,該設備已被復位,並且處在默認(Default)狀態,和它所連接的端口是被使能的,並准備在默認的控制管道上響應控制傳輸請求。

2. 主機通過查詢集線器,判定變化的確切性質。

3. 一旦主機知道了新設備已經連接在哪個端口上,主機接着可能再次復位設備(如果它希望如此的話),但並不是必須這樣做。

4. 如果主機復位端口,集線器對該端口執行必要的復位處理(參考第10.3.1.6節)。當復位完成后,該端口將回到使能狀態。

5. 設備現在處在默認(Default)狀態,可以從Vbus抽取不超過150毫安的電流。它所有的寄存器和狀態都已被重置,並在默認地址上回應請求。

6. 主機分配一個唯一的地址給設備,將設備遷移到地址(Address)狀態。

7. 在該設備收到一個唯一的地址之前,其默認的控制管道仍然可以通過其默認地址訪問。主機讀取設備描述符,以確定此設備的默認管道實際可以使用的最大數據負載大小。

8. 主機應設置等時時延(isochronous delay),來通知設備從主機發送一個數據包,到被設備接收到的時間延遲。

9. 主機應使用Set SEL請求通知設備系統退出時延(system exit latency)。

10. 主機通過從零到n-1讀取每個配置(其中n是配置數量),來從設備讀取配置信息。這個過程可能需要數毫秒才可完成。

11. 根據配置信息,以及設備將如何被使用,主機分配一個配置值給設備。設備目前在配置(Configured)狀態,並且所有在這個配置的端點已處於他們所被描述的特征下。該設備現在可以抽取所選的配置的描述符所描述的Vbus電量。 從設備的角度來看,現在已經可以使用了。

當設備被斷開,集線器再次發送通知到主機。斷開一個設備也禁用了其之前所連接的端口,並且將端口遷移到斷開連接(Disconnected)狀態(參閱第10.3.1.2節)。一旦接到斷開通知,主機將更新其本地拓撲信息。

9.2 通用設備操作 【Generic Device Operations】

所有設備都支持一套共同的操作。本節描述了這些操作。

9.2.1 動態連接與移除 【Dynamic Attachment and Removal】

設備可能被在任何時間連接或斷開。集線器提供了連接點或者說下游端口,並且負責報告端口狀態的任何變化。

一旦檢測到一次設備連接,集線器就復位並使能集線器的下行端口,這同時也具有復位設備的效果。復位設備具有以下特點:

  • 它的USB地址被設置為0(默認的USB地址)
  • 它沒有被配置(not configured
  • 它沒有被掛起(not suspended

當設備從一個集線器端口移除,集線器禁用該設備所連接的端口,該端口遷移進入DSPORT.Disconnected狀態(參考第10.3.1.2節),並通知主機這一移除事件。

9.2.2 指定地址【Address Assignment】

當設備連上(attached)時,主機負責指定一個唯一的地址給設備。在指定地址之前,主機可以明確地復位設備;但是,注意到在主機被通知設備被連上(attached)之前,設備暗含地在連接過程(connection process)中被復位(implicitly gets reset)。

9.2.3 Configuration

USB設備在其功能【function(s)】被使用以前,必須被配置。由主機負責配置設備。主機典型地會從USB設備獲取配置信息后,以便確定此設備有哪些能力。

作為配置過程的一部分,主機會設置設備的配置值,並且,如果必要的話會選擇接口恰當的備選設置(alternate settings)。

在單個配置中,一個設備可以支持多個接口。一個接口是一組端結點集合,它們代表了設備向主機提供的單一的特性或功能。用來與這組相關端點通信的協議,以及接口內各端點的目的,可以作為一個設備類或者特定於廠商的(vendor-specific)定義的一部分來指定。

另外,一個配置中的接口可能有備選設置。這些備選設置可能重定義相關端點的數目或特性。如果是這樣的話,設備必須支持GetInterface()請求,來報告指定的接口的當前所用的備選設置(alternate setting),以及SetInterface()請求來選擇指定的接口的備選設置(alternate setting)。

在每個設備配置內,每個接口描述符可能包括用來標識接口號的及備選設置的字段。接口被從0到配置所支持的能同時使用的接口數目少1進行編號。備選設置的編號也從0開始到特定的接口的備選設置的數目少1進行編號。當設備被初始化配置后,缺省設置是備選設置0。

為了支持自適應的可以管理一組相關設備的設備驅動程序,設備與接口描述符中包含了類(Class),子類(Sub class),及協議(Protocol)字段。這些字段用來標識一個設備提供的功能【function(s)】,及用於與設備上的功能【function(s)】通信的協議。一個類代碼(class code)被分配給一組設備,並被作為USB類規范(USB Class Specification)的一部分而被特性化(characterized)。一個類的設備可進一步被划分成子類(subclasses),並且在一個類或子類中,一個協議代碼(protocol code)可定義主機軟件是怎樣與設備通信的。

注意:類、子類、與協議值必須與本規范協調一致,但在本規范范圍之外。

9.2.4 數據傳輸 【Data Transfer】

數據可能以四種方式在USB設備端點與主機之間傳送。參見第4章中四種傳送方式的定義。在不同設置下,一個端點號可以被用於不同的傳輸類型。但一旦設置選定(包括一個接口的默認設置),一個設備端點只使用一種數據傳輸方法,直到一個不同的可選設置被選擇。

9.2.5 電源管理 【Power Management】

設備的電源管理包括下面幾個章節所描述的問題。

9.2.5.1 電源預算 【Power Budgeting】

USB總線電源是一個有限的資源。在設備枚舉階段,主機評估設備的電源需求。如果一個特定配置的電源需求量超過可供給設備的電量,則主機軟件不應該選擇該配置。

設備應將其從VBUS上消耗的電源需求量限制在一個單位以下,直到被配置。當操作在SuperSpeed模式,150 mA等於一個單位負載。掛起的設備,不論其是否被配置,都應該將其總線電源消耗限制在USB 2.0規范的掛起模式電源需求之內。根據接到設備的端口電源負載能力,工作在超高速模式的超高速設備在被配置以后,可從Vbus汲取達6個單位的電量。當操作在超高速模式時,超高速設備汲取的電流,對於低電源設備增長到150 mA,而高電源設備是900 mA。

設備電源管理由掛起(suspend)和功能掛起(function suspend)組成。掛起(Suspend)是指全設備范圍的狀態,當它的上游鏈路被設置為U3時進入。功能掛起(Function suspend)是指一個設備之內的單個功能的狀態。掛起具有多於一個功能的設備效果上也掛起了設備的所有功能。

請注意,將設備的所有功能掛起,並不會掛起設備。只有當它的上游鏈路被置於U3時,一個設備才會掛起。

9.2.5.2 改變設備的掛起狀態 【Changing Device Suspend State】

設備掛起的進入和退出,本質上是作為掛起入口和退出過程的一部分(請參閱第10.8節)。應保留的最小一組設備狀態信息列出如下:

  • 端口狀態改變(下游端口)
  • 設備地址
  • 設備配置值
  • 功能掛起和功能遠程喚醒使能狀態

一些附加的設備狀態信息也可以在掛起過程中被保持。

設備應該在驅動恢復(resume)信號后,發送一個功能喚醒通知(Function Wake Notification)(參閱第7.4.9節)。自發送上一個功能喚醒通知(Function Wake Notification)之后,如果超過tNotification(參考第8.13節)設備沒有被訪問,則設備應再次發送功能喚醒通知(Function Wake Notification),直到它被訪問。

設備類可能需要額外的信息在被掛起之后被保持,超出本規范確定的之外,也超出了本規范的范圍。在掛起時,設備也可以選擇性地從電路中移除不必要的電路中的電源。

9.2.5.3 功能掛起 【Function Suspend】

功能可以獨立於復合設備內其他功能被置於功能掛起狀態。一個設備可被轉換到設備掛起狀態,無論設備內的任何功能的功能掛起狀態如何。在設備掛起期間,功能掛起狀態被保持,並且貫穿設備掛起的進入和退出過程。

9.2.5.4 改變功能掛起狀態 【Changing Function Suspend State】

功能被使用FUNCTION_SUSPEND特性選擇子(見表9-6)置於功能掛起。FUNCTION_SUSPEND特性選擇子還控制是否該功能可以啟動遠程喚醒功能。一個功能是否能夠啟動一個功能遠程喚醒(Function Remote Wake),可由對該功能的第一個接口使用Get Status命令查詢得到的狀態來判定(參考第9.4.5節)。

遠程喚醒(即從一個設備掛起狀態喚醒),當設備內的任何一個功能被使能功能遠程喚醒時(注意 "功能遠程喚醒""遠程喚醒" 的區別)。DEVICE_REMOTE_WAKEUP特性選擇子將被忽略並且不被超高速設備使用。

如果其被使能了功能遠程喚醒,一個功能可以發送功能喚醒通知(Function Wake Notification)到主機,表明它想從功能掛起退出。這適用於單一功能設備以及多個功能【(即復合(composite)】設備。如果鏈路處在非U0狀態,則該設備在發送遠程喚醒消息之前必須將鏈路過渡到U0。如果遠程喚醒事件發生在多個功能上,各功能須發送一個功能遠程喚醒通知(Function Wake Notification)。自發送最后一個功能遠程喚醒通知(Function Wake Notification)之后,如果超過tNotification(參考第8.13)該功能還沒有被訪問,該功能將再次發送功能遠程喚醒通知(Function Wake Notification),直到它被訪問。

當設備內的所有功能都在功能掛起並且PORT_U2_TIMEOUT字段(參考第10.14.2.9節)被編程到0xFF,該設備應在鏈路無活動10ms之后發起U2。

9.2.6 請求的處理 【Request Processing】

SetAddress()請求以外(見9.4.6節),在設備接收到Setup Packet以后,設備就可以開始處理請求。在允許狀態(Status)階段成功完成以前,設備被期望"完成"對請求的處理。有些請求會發起需要許多毫秒才能完成的操作。像這樣的請求,該設備類應定義一個方法,而不是狀態階段(Status Stage)的完成來表示該操作已經完成。像這樣的操作有:依賴於連接到該端口上的鏈路的狀態不同,集線器端口的復位可能需要多個毫秒來完成。SetPortFeature(PORT_RESET)(參考10.14.2.9節)請求本身當復位在端口上啟動時就"完成"了。當端口狀態改變並表明此端口已經使能時,就會有信號表明復位操作已經完成。這種技術可以防止當主機知道某一個請求費時較長的情況下,還一直輪詢此請求是否已完成。

9.2.6.1 請求處理的時序 【Request Processing Timing】

所有的設備應當及時處理請求。USB給定一個5秒的時間上限來進行命令處理。這個限制並不是對所有情況都適用的。這些限制在接下來的部分給予描述。應當說明的是,下面的限制目的在包括很寬范圍的實現。如果所有設備都采用最大的允許時限來進行請求處理的話,用戶使用經驗將是很難受的。因此,具體實現應當盡可能快地完成請求的處理。

9.2.6.2 復位/恢復的恢復時間 【Reset/Resume Recovery Time】

成功復位或恢復以后端口之后,USB系統軟件允許立即訪問連接到端口的設備,並期望將響應數據傳輸。

9.2.6.3 設置地址處理 【Set Address Processing】

在reset或resume以后,當設備收到SetAddress()請求,設備必須能在50ms內完成請求的處理,並成功完成請求的狀態階段。對於SetAddress()的情況,當設備發出一個ACK事務包(ACK Transaction Packet)作為對狀態階段的狀態事務包(STATUS Transaction Packet)的響應時,狀態階段就成功完成了。

在成功完成狀態階段后,設備必須能在新地址上接受Setup包。並且,必須確保設備不對舊地址的事務產生響應(當然,除非新舊地址是一樣的)。

9.2.6.4 標准設備請求 【Standard Device Requests】

對於不需傳送數據的標准設備請求,個設備必須在收到請求的50ms以內結束對請求的處理並成功完成狀態階段。此限制適用於針對設備,接口或端點的請求。

對於需要數據到主機的數據階段傳輸的標准設備請求,設備必須在收到請求的500ms以內返回第一個數據包。接下來的數據包,如果有的話,必須在前一個數據包成功傳送起的500ms以內開始發送。設備必須在最后一個數據包返回以后的50ms以內成功完成狀態階段。

對於需要數據階段傳輸到設備的標准設備請求,5秒的限制就起作用了。這意味着設備必須能在主機以設備最大能接受的速率發送數據包的情況下接收所有的數據包並且完成狀態階段。主機引入的數據包之間的時延,也算入設備完成請求所允許的時間。

9.2.6.5 類特定的請求 【Class-specific Requests】

除非在類文檔中特別說明(exempted),所有的類特定的請求必須滿足標准請求的時間限制。如果一個類文檔提供特例(exemption),特例只能基於request-by-request的方式進行

類文檔可能要求設備反應得比這節所指定的還要快。可要求更快的標准以及類特定的請求。

9.2.6.6 依賴於速度的描述符 【Speed Dependent Descriptors】

有能力操作在超高速的設備須能在USB 2.0的定義的一個速度上操作。作為連接處理的一部分,設備總是知道其操作的速度(參閱第10.5節有關連接過程更詳盡的說明)。設備完成復位序列后工作在單一的速度上。特別是,在正常操作過程中沒有速度切換。然而,具有超高速能力的設備可能有些配置是依賴與速度的。也就是說,它可能有一些配置,只可能在超高速時操作,或一些只可能在高速時操作。具有超高速能力的設備應支持報告他們能夠運行的速度。請注意,USB 3.0集線器是唯一獲准同時工作在的USB 2.0和超高速的設備。

具有超高速能力的設備使用對當前運行速度有效的描述符信息響應。例如,當一個設備的配置描述符被請求時,只返回當前運行速度的(例如,高速)。當運作在超高速模式時,設備應通過其BOS描述符報告其他可以操作的速度(請參閱第9.6.2節)。 請注意,當以USB 2.0的速度運行時,除了使用BOS描述符報告其他被設備支持的速度外,設備應使用在USB 2.0規范定義標准機制報告其支持的其他USB 2.0的速度。設備描述bcdUSB字段值至少為0210H的設備,應當支持GetDescriptor (BOS Descriptor)請求。

注意:除非主機明確發起相應的GetDescriptor請求,否則這些描述符不會被獲取。

9.2.7 請求錯誤 【Request Error】

如果一設備收到一個請求,它或是在設備中無定義,或是不適用於當前設置,或是數值不對,這時就會產生一個請求錯誤(Request Error)。設備在下一個數據(Data)階段或狀態階段(Status stage)返回一個表明錯誤的STALL 事務包(STALL Transaction Packet)。最好在下一個數據(Data)階段返回,這樣可減少不必要的總線活動。

9.3 USB設備請求 【USB Device Requests】

所有的設備在設備的默認控制管道(Default Control Pipe)上對主機的請求做出響應。這些請求是通過使用控制傳輸來達到的。請求及請求的參數通過Setup包發給設備。主機負責建立Setup包內的每個字段的值,列出在表9-2中。每個Setup包有8個字節。

9-2. Setup包數據格式

偏移量

大小

描述

0

bmRequestType

1

位圖

請求特征:

D7: 傳輸方向 Data transfer direction

0=主機至設備

1=設備至主機

D6..5: 種類 Type

0=標准

1=

2=廠商

3=保留

D4..0: 接受者 Recipient

0=設備

1=接口

2=端點

3=其他

4..31=保留

1

bRequest

1

特定於請求 (參見表9-3)

2

wValue

2

字長字段,根據不同的請求含義改變。

4

wIndex

2

索引或偏移

字長字段,根據不同的請求含義改變。典型地用於傳遞索引或偏移。

6

wLength

2

計數

如有數據傳送階段,此為數據字節數。

9.3.1 bmRequestType

這個位圖字段表明此請求的特性。特別地,這個字段表明了控制傳輸第二階段的方向。如果wLength字段是0的話,表明沒有數據階段,那么Direction位就會被忽略。

USB 3.0說明定義了一系列所有設備必須支持的標准請求。這些請求被例舉在表9-3中。另外,一個設備類可定義更多的請求。設備廠商也可定義設備支持的請求。

請求可被指定到設備,設備接口,或某一個設備端點上。這個字段也指定了接收者。當指定的是接口時,wIndex字段指出那個接口。當指定的是端點時,wIndex字段指出那個端點。

9.3.2 bRequest

這個字段標識特定的請求。bmRequestType字段的Type字位可修正此字段的含義。本規范僅定義Type字位為0即標准設備請求時bRequest字段值的含義(參見表9-3)。

9.3.3 wValue

這個字段的內容,根據不同的請求而不同。此字段用來傳送當前請求的參數,特定於請求。

9.3.4 wIndex

這個字段的內容,根據不同的請求而不同。此字段用來傳送參數到設備,特定於請求。

wIndex字段經常被用來指定一個接口或端點,圖9-3顯示了當被用來標識端點時wIndex的格式。

Direction位在設為0時,連同指定Endpoint Number端點號,表示輸出端點,設為1時表示是輸入端點。對於控制管道的情況,請求應該將Direction位設置為0,但設備可以接受任一Direction位的值。

9-4表明wIndex用於標識接口時的格式。

9.3.5 wLength

這個字段表明控制傳輸第二階段的數據傳輸長度。傳輸方向(host-to-device or device-to-host)由bmRequstType字段的Direction位指出。wLength字段為0則表明無數據傳輸。

在輸入請求下,設備返回的數據長度絕不應多於wLength,但可以少於。在輸出請求下,wLength總是指出主機要發出的確切數據量。如果主機發送多於或者少於wLength指定的數據,設備做出的響應是未定義的。

9.4 標准設備請求 【Standard Device Requests】

這一節描述為所有USB設備定義的標准設備請求。表9-3列出了這些標准設備請求,而表9-49-5分別結出了對應的標准請求碼及描述符類型。

即使設備還沒有被分配地址,或設備還沒有被配置,它們都應當對標准請求做出響應。

9-3. 標准設備請求 Standard Device Requests

bmRequestType

bRequest

wValue

wIndex

wLength

數據

00000000B 00000001B 00000010B

CLEAR_FEATURE

特性選擇子

0

Interface

Endpoint

0

無數據

10000000B

GET_CONFIGURATION

0

0

1

配置值

10000000B

GET_DESCRIPTOR

描述符類型和

描述符索引

0 Language ID

描述符長度

描述符

10000001B

GET_INTERFACE

0

Interface

1

備用接口

10000000B 10000001B 10000010B

GET_STATUS

0

0

Interface

Endpoint

2

設備,接口或端點狀態

00000000B

SET_ADDRESS

設備地址

0

0

無數據

00000000B

SET_CONFIGURATION

配置值

0

0

無數據

00000000B

SET_DESCRIPTOR

描述符類型和

描述符索引

0 Language ID

描述符長度

描述符

00000000B 00000001B 00000010B

SET_FEATURE

特性選擇子

Zero Interface Endpoint

掛起(Suspend 選項

0

無數據

00000001B

SET_INTERFACE

備用設置

Interface

0

無數據

00000000B

SET_ISOCH_DELAY

Delay in ns

0

0

無數據

00000000B

SET_SEL

0

0

6

退出時延值(Exit

Latency

Values

10000010B

SYNCH_FRAME

0

Endpoint

2

幀號

 

9-4. 標准請求代碼 Standard Request Codes

 

bRequest

Value

GET_STATUS

0

CLEAR_FEATURE

1

保留將來用

2

SET_FEATURE

3

保留將來用

4

SET_ADDRESS

5

GET_DESCRIPTOR

6

SET_DESCRIPTOR

7

GET_CONFIGURATION

8

SET_CONFIGURATION

9

GET_INTERFACE

10

SET_INTERFACE

11

SYNCH_FRAME

12

SET_SEL

48

SET_ISOCH_DELAY

49

 

9-5. 描述符類型 Descriptor Types

 

Descriptor Types

Value

DEVICE

1

CONFIGURATION

2

STRING

3

INTERFACE

4

ENDPOINT

5

Reserved

6

Reserved

7

INTERFACE_POWER 【注1

8

OTG

9

DEBUG

10

INTERFACE_ASSOCIATION

11

BOS

15

DEVICE CAPABILITY

16

SUPERSPEED_USB_ENDPOINT_COMPANION

48

 

【注1 INTERFACE_POWER 定義在當前版本的USB Interface Power Management Specification中】

特性選擇子被使用來使能或設置如功能遠程喚醒的特性,特定於一個設備,接口或端點。在表9-6給出特性選擇子的值。

Feature Selector

Recipient

Value

ENDPOINT_HALT

Endpoint

0

FUNCTION_SUSPEND

Interface

0

U1_ENABLE

Device

48

U2_ENABLE

Device

49

LTM_ENABLE

Device

50

如果不受支持或無效的請求被發到設備,設備通過在請求的數據或狀態階段返回一個STALL事務包(STALL Transaction Packet)響應。如果設備檢測到Setup階段的錯誤,設備首選的應該在較早的數據或狀態階段返回一個STALL事務包(STALL Transaction Packet)。接收到一個不受支持或無效的請求后,不會導致控制管道上Halt特定被設置。如果,由於某種原因,設備成無法通過它的默認控制管道通信(由於錯誤情形),設備應復位來清除該情形並重新啟動默認控制管道。

9.4.1 Clear Feature

這個請求是被用來清除或者禁用一個指定的特性。

wValue中的特性選擇子的值必須根據接收者來設定適當的值。接收者是設備就只能用設備特性選擇子,是接口就就只能用接口特性選擇子,是端點就只能用端點特性描述子。

參照表9-6來看特性選擇子與接收者定義的對應關系。

一個ClearFeature( )請求所指的特性如果不能被清除,不存在,或指的是不存在的接口或端點,會導致設備具有Request Error錯誤的響應。

如果wLength不為0,設備響應無定義。

缺省狀態:當設備處於缺省狀態時接收到此請求,對此請求的反應無定義。

地址狀態:在設備處於地址(Address)狀態時這個請求是合法的,但如果該請求指的是接口或是默認控制端點,會引起設備響應請求錯誤。

配置狀態:在此Configured狀態下,該請求合法。

注:僅當該設備是在配置狀態時,設備才應處理Clear Feature(U1_Enable 或 U2_Enable 或 LTM_Enable)。

9.4.2 Get Configuration

此請求返回當前設備配置值。

如果返回值為0,表明設備未被配置。

如果wValue, wIndex, wLength的值與上面表中所指定的不同,設備響應行為無定義。

默認狀態:當設備處於默認狀態時收到這個請求,該請求響應行為無定義。

地址狀態:應該返回0值。

配置狀態:非0的當前配置值bConfigurationValue值應該被返回。

9.4.3 Get Descriptor

這個請求返回指定的描述符,如果存在的話。

wValue字段的高字節標識描述符類型(參考表9-5),低字節表示描述符的索引。當有幾個相同類型的描述符在設備內被實現時,描述符索引用來選擇一個特定的描述符(只對於配置(configuration)和字符串(string)描述符)。例如,一個設備可以實現幾個配置描述符。對於其他的標准描述符,可以通過一個GetDescriptor()請求被獲取,則描述符索引應該使用0。被用來作為描述符索引的值的范圍是從0到由設備所實現的那種類型的描述符(排除字符串描述符在外)的個數少1。

wIndex字段標識字串描述符的語言ID(Language ID),或者如果是其它描述符的話就設為0。wLength指定要返回多少字節。如果描述符長度大於wLength字段值,那么只有描述符的初始部分被返回。如果描述符比wLength字段值少,當進一步數據被請求時,設備就發送一個短包來標志控制傳輸的結束。

這個標准請求支持四種描述符:設備、配置、BOS(Binary device Object Store),及字符串。正如9.2.6.6節所做注意到的,操作在SuperSpeed模式的設備通過BOS描述符報告它支持的其他速度,而且不應該支持device_qualifier和other_speed_configuration描述符。一個單個配置描述符請求會一次返回配置描述符,所有的接口描述符,所有接口的端點描述符以及端點伴侶描述符(當操作在SuperSpeed模式)。第一個接口描述符緊跟着配置描述符。第一個接口的端點描述符緊跟第一個接口描述符。此外,超高速設備應該返回該接口內的每個端點的端點伴侶描述符(Endpoint Companion descriptors),以返回對於支持超高速的設備的端點能力,這些信息已經不能被容納在現有的端點描述符大小內。如果有其它的接口,它們的接口描述符,端點描述符,以及端點伴侶描述符(當操作在SuperSpeed模式)緊跟在第一個接口的端點描述符或端點伴侶描述符(當操作在SuperSpeed模式)之后。

此規范還定義了靈活而可擴展的框架,用來描述以及增添設備級別的能力到該組USB標准規范內。BOS描述符(參考9.6.2)定義了一個根描述符,類似於配置描述符,並作為基准描述符來訪問一族相關的描述符。主機可以讀取BOS描述符並且從wTotalLength字段了解到設備層級描述符組的完整大小,或者它可以讀入該組包含設備能力的完整BOS描述符。主機沒有辦法讀取單個的設備能力描述符。完整的組只能通過使用GetDescriptor()請求以及被報告的wTotalLength字段讀取BOS描述符來進行訪問。

類特定的和/或廠商特定的描述符跟在他們所擴展或修飾的標准描述符之后。

所有的設備必須提供一個設備描述符並且至少一個配置描述符。如果一個設備不支持一個請求的描述符,則返回請求錯誤(Request Error)。

默認狀態:當該設備在默認狀態時,這是一個有效的請求。

地址狀態:當該設備在地址狀態時,這是一個有效的請求。

配置狀態:當該設備在配置狀態時,這是一個有效的請求。

9.4.4 Get Interface

這個請求返回所指定接口所選中的可選設置(alternate setting)。

有些設備的配置具有包含有互斥設置的接口。這個請求允許主機判定當前所選的可選設置。

如果wValue或wLength沒有按照以上的表中所指定的設值,設備響應行為無定義。

如果所指的接口不存在,返回請求錯誤。

默認狀態:當設備在默認狀態下接收到這個請求,設備對該請求響應行為無定義。

地址狀態:設備返回請求錯誤(Request Error)。

配置狀態:當該設備在配置狀態時,這是一個有效的請求。

9.4.5 Get Status

這個請求返回所指接收者的狀態。

bmRequestType字段的Recipient位段指定預定的接收者。所返回的數據是指定的接受者當前的狀態。如果接收者是端點,那么wIndex的低字節用來識別其所詢問狀態的端點。

如果wValue或wLength不是上表中所指定的值,或者如果在獲取設備狀態請求時wIndex非0,則設備響應行為無定義。

如果指定了一個不存在的接口或者端點,那么設備用請求錯誤(Request Error)來響應。

默認狀態:當設備在默認狀態下接收到這個請求,設備對該請求響應行為無定義。

地址狀態:如果所指定的是接口,或者是默認的控制端點之外的端點,設備返回請求錯誤(Request Error)響應。

配置狀態:如果指定了一個不存在的接口或者端點,那么設備用請求錯誤(Request Error)來響應。

一個對設備的GetStatus()請求返回信息的格式如圖9-5

Self Powered字段表示設備當前是否是自供電狀態(self-powered)。如果D0為復位為0,則設備是總線供電的。如果D0被設成1,則設備是自供電的。此Self Powered字段不能被SetFeature()ClearFeature()請求所改變。

Remote Wakeup字段是保留的,必須由SuperSpeed設備設置為0。SuperSpeed設備使用Function Remote Wake enable/disable字段來指示他們是否被使能遠程喚醒(Remote Wake)功能。

U1 Enable字段指示設備是否當前被使能可以發起U1 entry。如果D2被設為0,則設備被禁止了發起U1 entry;否則,它就被使能了發起U1 entry。U1 Enable字段可以被SetFeature()和ClearFeature()請求使用U1_ENABLE特性選擇子進行修改。當設備被復位時,該字段被復位為0.

U2 Enable字段指示設備是否當前被使能可以發起U2 entry。如果D2被設為0,則設備被禁止了發起U2 entry;否則,它就被使能了發起U2 entry。U2 Enable字段可以被SetFeature()和ClearFeature()請求使用U2_ENABLE特性選擇子進行修改。當設備被復位時,該字段被復位為0.

LTM Enable字段指示設備是否當前被使能可以發送延遲忍耐消息(Latency Tolerance Messages)。如果D4被設為0,則設備被禁止了發送延遲忍耐消息(Latency Tolerance Messages);否則,它就被使能了發送延遲忍耐消息(Latency Tolerance Messages)。LTM Enable字段可以被SetFeature()和ClearFeature()請求使用LTM_ENABLE特性選擇子進行修改。當設備被復位時,該字段被復位為0.

一個到功能的第一個接口的GetStatus()請求返回如圖9-6的信息。

Function Remote Wake Capable字段指示是否功能支持遠程喚醒。Function Remote Wakeup字段指示功能當前是否被使能了請求遠程喚醒。對於支持遠程喚醒的功能,默認該模式是被禁用的。如果D1被復位為0,則功能發起遠程喚醒信號的能力是被禁用的。如果D1被設置為1,這則功能發起遠程喚醒信號的能力是被使能的。Function Remote Wakeup字段可以被SetFeature()請求使用FUNCTION_SUSPEND特性選擇子進行修改。當功能被復位時,Function Remote Wakeup字段被復位為0.

到一個功能的其他接口的GetStatus()請求應該返回全0.

一個到端點的GetStatus()請求返回如圖9-7的信息。

Halt特性被要求在所有的中斷及批量端點類型中實現。如果端節點當前被halted了,那么這個Halt特性就設置成1,否則Halt特性就被設置為0。Halt特性可選擇性地由SetFeature(ENDPOINT_HALT )請求來設置。一旦被SetFeature()請求設置,端點表現出相同的stall響應行為,就像這個字段由硬件條件設置的一樣。如果導止停機(halt)的條件被移除了,用ClearFeature(ENDPOINT_HALT )請求清除Halt特性會導致端點不再返回STALL事務包(STALL Transaction Packet)。不論是否端點將Halt特性設置,一個ClearFeature(ENDPOINT_HALT)請求總可以導致數據序列被重新初始化到0;並且,如果流(Streams)被使能,則流狀態機(Stream State Machine)應該被重新初始化到Disabled狀態。Halt特性在收到SetConfiguration() 或 SetInterface()請求后總會被復位成0,即使所請求的配置或者接口與當前的配置或接口相同。

超高速設備不支持在控制端點的functional stall,因此不需要在任何控制端點上實現Halt特性。

9.4.6 Set Address

本請求為所有的后續設備訪問的設置設備地址

wValue指出所有的后續訪問所需要的設備地址。

在初始Setup包后的狀態(Status)階段使用與Setup包相同的設備地址。 設備不會更改其設備地址,直到狀態(Status)階段成功完成后才。請注意,這是這一請求並所有其他請求的差異之處。 對於所有其他的要求,所指定的操作應在狀態階段完成之前完成。

如果所指定的設備地址大於127,或wIndex 或wLength非零,設備響應行為無定義。

默認狀態:如果所指定的地址值非0,那么設備應進入地址狀態,否則,地址仍留在默認狀態(這不是錯誤情形)。

地址狀態:如果所指定的地址值為0,那么設備應進入默認狀態,否則,設備仍留在地址狀態,但使用新指定的地址。

配置狀態:當該設備在配置狀態時接收到這個請求,設備對此請求的響應無定義。

9.4.7 Set Configuration

此請求設置設備配置值。

wValue字段的低字節指定想要的配置。這個配置值必須為0,或與配置描述符中的一個配置相匹配。如果配置值為0,設備被設置為地址狀態。wValue的高字節被保留。

默認狀態:當設備在默認狀態下接收到這個請求,設備對該請求響應行為無定義。

地址狀態:如果所指定的配置值為0,則設備停留在地址狀態。如果所指定的配置與描述符中的一個值相匹配,那個配置就被選中,設備進入配置狀態。否則,設備返回請求錯誤(Request Error)。

配置狀態:如果所指定的配置值為0,設備進入地址狀態。如果所指定的配置與描述符中的一個值相匹配,那個配置就被選中,設備進入配置狀態。否則,設備返回請求錯誤(Request Error)。

9.4.8 Set Descriptor

此請求是可選的,可以被用於更新現有的描述符,或添加新的描述符。

wValue字段的高字節指出了描述的類型(參見表9-5),低字節指出了描述符索引。當有幾個相同類型的描述符在設備內被實現時,描述符索引用來選擇一個特定的描述符(只對於配置(configuration)和字符串(string)描述符)。例如,一個設備可以實現幾個配置描述符。對於其他的標准描述符,可以通過一個SetDescriptor()請求被設置,則描述符索引應該使用0。被用來作為描述符索引的值的范圍是從0到由設備所實現的那種類型的描述符(排除字符串描述符在外)的個數少1。

wIndex字段標識字串描述符的語言ID(Language ID),或者如果是其它描述符的話就設為0。wLength指定從主機傳向設備的字節數。

唯一允許的描述符類型的值是設備,配置和字符串描述符類型。 如果這個請求不被支持,設備會用請求錯誤(Request Error)響應。

默認狀態:當設備在默認狀態下接收到這個請求,設備對該請求響應行為無定義。

地址狀態:如果被支持的話,當設備在地址狀態時接收到這個請求,則為有效。

配置狀態:如果被支持的話,當設備在配置狀態時接收到這個請求,則為有效。

9.4.9 Set Feature

這個請求被用來設置或使能一個特定的特性。

wValue中的特性選擇子的值必須根據接收者來設定適當的值。接收者是設備就只能用設備特性選擇子,是接口就只能用接口特性選擇子,是端點就只能用端點特性描述子。如果接收者是端點,則wIndex低字節用來識別該端點。

參照表9-6來看特性選擇子與接收者定義的對應關系。

FUNCTION_SUSPEND特性只被定義為以接口為接收者。wIndex低字節應該被設為該個功能的第一個接口。

U1/U2_ENABLE特性只被定義為以接口為接收者。wIndex低字節應該被設為0。設置U1/U2_ENABLE特性允許設備分別發起U1/U2 entry。設備只應該在被配置(Configured)的SuperSpeed狀態才應該支持U1/U2ENABLE特性。如果主機發起的U1系統退出時延(U1 System Exit Latency)的時間加上一個總線間隔(Bus Interval)的時間大於設備中任何周期端點的服務間隔的話,系統軟件就必須不使能設備發起U1。此外,如果主機發起的U2系統退出時延(U2 System Exit Latency)的時間加上一個總線間隔(Bus Interval)的時間大於設備中任何周期端點的服務間隔的話,系統軟件就必須不使能設備發起U2。

LTM_ENABLE特性只被定義為以設備為接收者。wIndex低字節應該被設為0。設置LTM_ENABLE特性允許設備發送延遲忍耐消息(Latency Tolerance Messages)。設備只應該在被配置(Configured)的SuperSpeed狀態,並且支持LTM能力時,才應該支持LTM_ENABLE特性。

若SetFeature()引用了一個不能被設置的特性,或者不存在的特性,會導致在狀態(Status)階段返回一個STALL事務包(STALL Transaction Packet)。

如果特性選擇子是FUNCTION_SUSPEND,那么wIndex的高字節被用來指定掛起(Suspend)選項。SetFeature (FUNCTION_SUSPEND…)的接收者應該是功能的第一個接口;並且bmRequestType應該被設為1。FUNCTION_SUSPEND掛起選項的有效編碼在表9-7中列出。

9-7. Suspend 選項

比特

描述

0

意義

0 正常操作狀態(默認)

1 低功耗掛起狀態

1

意義

0 功能遠程喚醒被禁用(默認)

1 功能遠程喚醒被使能

2-7

保留

如果wLength不為0,設備響應行為無定義。

如果一個端點或者接口被指定但是不存在,那么設備用請求錯誤(Request Error)響應。

缺省狀態:當設備處於缺省狀態時接收到此請求,對此請求的反應無定義。

地址狀態:如果該請求指的是接口,或是默認控制端點以外的端點,設備會響應請求錯誤(Request Error)。如果設備接收到SetFeature(U1/U2 Enable 或者 LTM Enable 或者 FUNCTION_SUSPEND)請求,那么設備會響應請求錯誤(Request Error)。

配置狀態:在此Configured狀態下,該請求合法。

9.4.10 Set Interface

此請求允許主機為指定的接口選擇一個可選設置。

有些設備的配置具有包含有互斥設置的接口。這個請求允許主機選擇想要的可選設置。如果設備的接口只支持默認設置,在狀態階段設備可以返回STALL事務包(STALL Transaction Packet)。該請求不能用來改變一組被配置的接口(SetConfiguration()請求應該被使用來完成該目的)。

如果所指的接口或者可選設置不存在,那么設備會返回請求錯誤(Request Error)。

如果wLength非0,那么設備對該請求響應行為無定義。

默認狀態:當設備在默認狀態下接收到這個請求,設備對該請求響應行為無定義。

地址狀態:設備返回請求錯誤(Request Error)。

配置狀態:當該設備在配置狀態時,這是一個有效的請求。

9.4.11 Set Isochronous Delay

這一請求通知設備,從一個主機發送一個數據包的時間,到該包被設備收到,所需的被延遲時間。

wValue字段指定一個從0到65535 ns的時延。該時延代表從主機開始傳送包的第一個分幀符號(framing symbol)開始,到設備接收到包的第一個分幀符號為止的時間。

如果wIndexwLength非0,則設備的響應行為無定義。

默認狀態:當該設備在默認狀態時,這是一個有效的請求。

地址狀態:當該設備在地址狀態時,這是一個有效的請求。

配置狀態:當該設備在配置狀態時,這是一個有效的請求。

9.4.12 Set SEL

該請求設置在設備和主機根端口之間的所有鏈路的U1和U2 System Exit Latency以及U1 或 U2 exit latency。

時延值在控制傳輸的數據階段按照如下的格式發送給設備:

Offset

Name

Meaning

0

U1SEL

Time in μs for U1 System Exit Latency

1

U1PEL

Time in μs for U1 Device to Host Exit Latency

2

U2SEL

Time in μs for U2 System Exit Latency

4

U2PEL

Time in μs for U2 Device to Host Exit Latency

 

附錄C的圖C-2顯示了設備可能經歷的總共時延。時延的組件包括如下:

  • t1: 當轉換由設備發起時,將到主機路徑上的所有鏈路都轉換到U0所需要的時間。
  • t2: ERDY從設備開始,遍歷各級互連(interconnect hierarchy)到達主機所需要的時間。
  • t3: 主機消耗(consume)ERDY並對該請求傳送一個響應所需要的時間。
  • t4: 響應遍歷各級互連(interconnect hierarchy)從主機到達設備所需要的時間。

U1SEL和U2SEL的值代表在最壞的情況下,當由設備啟動的轉換將設備和主機之間的鏈路從U1或U2分別轉換到U0,總的往返路徑時延。這是t1到t4的時間總和。 U1PEL和U2PEL的值代表在最壞的情況下,當由設備啟動的轉換將設備和主機之間的鏈路從U1或U2分別轉換到U0,設備到主機的時延。這一次只包括t1。 欲了解更多信息,請參閱第C.1.5.1節。

如果wIndexwValue沒被設置成0,或者wLength不是6,則設備的響應行為無定義。

默認狀態:當設備處於缺省狀態時接收到此請求,對此請求的反應無定義。

地址狀態:當該設備在地址狀態時,這是一個有效的請求。

配置狀態:當該設備在配置狀態時,這是一個有效的請求。

9.4.13 Synch Frame

該請求用來設置然后報告一個端點的同步幀(synchronization frame)。

如果一個端點支持等時傳輸,端點可能會根據某一特定的模式(pattern)來要求每一幀的傳送大小改變。主機與端點必須在哪一幀開始出現重復模式(repeating pattern)方面達成一致。模式開始幀的編號由設備返回給主機。

如果超高速設備支持Synch Frame請求,它應該在內部將自己同步到第0個微幀(microframe),並且要具有一個對經典幀的概念(notion)。只有幀號被用來進行同步並由設備端點報告(也就是說,沒有微幀(microframe)號)。端點必須同步到第0號微幀。

這個值僅用於隱式模式同步(implicit pattern synchronization)的等時數據傳輸。如果wValue0,或wLength2,那么設備響應無定義。

如果所指定的端點不支持此請求,設備返回一個請求錯誤(Request Error)。

默認狀態:當設備處於缺省狀態時接收到此請求,對此請求的反應無定義。

地址狀態:設備應該返回一個請求錯誤(Request Error)。

配置狀態:當該設備在配置狀態時,這是一個有效的請求。

9.5 描述符 【Descriptors】

設備通過描述符來報告他們的屬性。描述符是已經有定義的格式的數據結構。每一個描述符以一個字節寬的字段打頭,包括本描述符的總長度;緊跟其后是一個字節寬的字段,識別描述符類型。

使用描述符允許單個配置的特性的存儲變得簡明,因為每個配置可以重復使用其它配置的有相同特性的部分或全部描述符。用這種方法,描述符用一個類似關系數據庫來記錄單獨的數據記錄。

在適當的地方,描述符包括了指向字串描述符的引用,以人能讀懂的格式描述該描述符。字串描述符是可選的,但描述符中的引用字段是不可或缺的。如果一個設備不支持字串描述符,該字符串引用字段應該被復位為0,來指示沒有字符串描述符可用。

如果描述符中的長度字段值少於本規范定義的值,此描述符無效,應該被主機拒絕。如果返回的描述符中的長度值大於本規范定義的值,則過長部分當被忽略,但下一個描述符的位置由返回的長度而不是期望的長度來定位。

設備可以以兩種方式返回類或廠商特定的描述符:

1.如果類或廠商特定的描述符使用與標准描述符相同的格式(即,以長度字節打頭,緊跟着類型字節),則它們應該與標准描述符交叉(interleaved)返回在由GetDescriptor(Configuration)請求返回的配置信息內。在這種情況下,類或廠商特定的描述符應該跟在他們所修改或擴展的描述之后。

2. 如果類或廠商特定的描述符是獨立於配置信息的,或者使用非標准格式,則一個指定了類或廠商特定的描述符類型及索引的GetDescriptor()請求可被使用,從設備獲取該描述符。類或廠商規范會定義獲取這些描述符的正確途徑。

9.6 標准USB描述符定義 【Standard USB Descriptor Definitions】

本標准中有關標准描述符的定義只能被本標准的校訂版本修改或擴展。

9.6.1 Device

設備描述符描述了設備的總體信息。這包括適用於設備及設備所有的配置的全局信息。一個設備只能有一個設備描述符。

具有SuperSpeed能力的設備具有版本號3.0 (0300H)。bcdUSB字段包含BCD版本號。bcdUSB字段的值具有格式0xJJMN,代表版本JJ.M.N(JJ-主版本號,M-副版本號,N-子副版本號),例如,版本2.1.3由值0x0213代表,而3.0由值0x0300代表。

bNumConfigurations字段表示在當前運行速度的配置數量。其他的工作速度中的配置不包括在計數中。如果該設備對於特定的速度有特定的配置,bNumConfigurations字段只反映一個單一速度的配置數,而不是兩個速度的配置總數。

如果設備操作在SuperSpeed,bMaxPacketSize0字段應該被設為09H(參見表9-8),指示512字節的最大包大小。SuperSpeed對於默認控制管道(端點0)不允許其他的最大包大小。

所有的設備都有默認控制管道。默認控制管道的最大包長在設備描述符中描述。特定於一個配置與其接口的端點定義在配置描述符中。配置和它的接口不包括默認控制管道的端點描述符。除最大包長外,默認控制管道的特性由本規范定義,並且對所有的SuperSpeed設備都一樣。

bNumberConfiguration s字段表明此設備支持的配置數。表9-7為標准設備描述符。

9-8. 標准設備描述符 Standard Device Descriptor

Offset

Field

Size

Value

Description

0

bLength

1

Number

此描述符的字節數

1

bDescriptorType

1

Constant

DEVICE 描述符類型

2

bcdUSB

2

BCD

BCD碼格式的USB規范發行版本號(例如,2.10 就是210H)。這個字段表示本設備以及其描述符兼容的USB規范發行版本號。

4

bDeviceClass

1

Class

類代碼(Class code)(由USB-IF分配)。

如果此字段的值被復位為0,則一個配置內每個接口指定它自己的類信息,並且各個接口各自獨立工作。

如果此字段的值被設置為1~FEH之間,則設備在不同的接口上支持不同的類,並且這些接口可能不能獨立工作。這個值指定了這些接口集體的類定義。

如果此字段設為FFH,則此設備的類由廠商定義。

5

bDeviceSubClass

1

SubClass

Subclass code (assigned by the USB-IF). These codes are qualified by the value of the bDeviceClass field.

If the bDeviceClass field is reset to zero, this field shall also be reset to zero.

If the bDeviceClass field is not set to FFH, all values are reserved for assignment by the USB-IF.

子類代碼(Subclass code)(由USB-IF分配)。

這些代碼值的具體含義由bDeviceClass 字段所限定。

如果bDeviceClass字段被復位為零,此字段也須復位為零

如果bDeviceClass字段沒被設置為FFH,此字段的所有值被保留由來USB-IF分配

6

bDeviceProtocol

1

Protocol

協議代碼(Protocol code)(由USB-IF分配)。

這些代碼的值由bDeviceClass bDeviceSubClass 的值限定。

如果設備支持設備基礎上的類特定的協議,此代碼用以識別設備類規范定義的協議值。

如果此字段的值被復位為零,則此設備不在設備基礎上支持設備類特定的協議。然而,它可能在接口基礎上支持設備類特定的協議。

如果此字段的值被設置為FFH,此設備在設備基礎上使用廠商定義的協議。

7

bMaxPacketSize0

1

Number

端點0的最大包大小。bMaxPacketSize0值被用來作為如2^bMaxPacketSize0的指數;例如,一個bMaxPacketSize04意味着最大包大小為162^4->16

當操作在SuperSpeed時,09H是唯一該字段的有效值。

8

idVendor

2

ID

廠商標志(Vendor ID)(由USB-IF分配

10

idProduct

2

ID

產品標志(Product ID)(由制造商分配)

12

bcdDevice

2

BCD

設備發行版本號(以BCD 碼格式)

14

iManufacturer

1

Index

描述廠商信息的字串的索引。

15

iProduct

1

Index

描述產品信息的字串的索引。

16

iSerialNumber

1

Index

描述設備序列號信息的字符串的索引。

17

bNumConfigurations

1

Number

可能的配置數

 

9.6.2 二進制設備對象存儲(BOS)描述符 【Binary Device Object Store (BOS)】

本節定義描述和增加設備級能力的一個靈活和可擴展的框架到這組USB標准規范。如上所述,存在着一個設備描述符,但所有的設備級能力擴展都使用下面的框架來進行定義。BOS描述符定義了一個根描述符,類似於配置描述符,可被用於訪問相關描述符族的基准描述符。主機可以讀取描述為BOS描述符,從wTotalLength字段了解設備的描述符集的完整大小,也可以讀取關於設備能力的整個BOS描述符集。主機使用GetDescriptor()請求訪問此描述符。GetDescriptor()請求的描述符類型設置為BOS(見表9-9)。主機沒有方法可以讀取設備的單個能力描述符。要訪問整個BOS描述符集只能通過GetDescriptor()請求讀取BOS描述符並且使用報告的wTotalLength字段作為讀取長度才能實現。

9-9. BOS 描述符

單個的特定於技術的或通用的設備層級的能力可通過設備能力描述符(Device Capability descriptors)來報告。設備能力描述符的格式定義於表9-10。設備能力描述符具有一個通用的頭,包括一個子類型字段(bDevCapabilityType),用來定義該描述符剩余部分的布局(layout)。bDevCapabilityType的代碼定義於表9-11。

9-10. 設備能力描述符的格式【Format of a Device Capability Descriptor

設備能力描述符總是作為BOS信息的一部分在GetDescriptor(BOS)請求中返回。設備能力不能直接通過GetDescriptor() 或 SetDescriptor()請求訪問。

9-11. 設備能力類型代碼【Device Capability Type Codes

下面章節定義一個SuperSpeed 設備應該返回的USB_30設備能力以及USB 2.0擴展描述符(USB 2.0 Extension Descriptor)。

9.6.2.2 超高速USB設備能力 【SuperSpeed USB Device Capability】

本節定義必要的設備層級的能力描述符,應該被所有的超高速設備實現。本能力描述符不能直接通過GetDescriptor() 或 SetDescriptor()請求訪問。

9-13. 超高速設備能力描述符【SuperSpeed Device Capabilities Descriptor

9.6.2.3 Container ID

本節定義設備層級的Container ID描述符,這應該被所有USB 3.0集線器實現,對於其它設備則是可選的。如果在一個模式下這個描述符被提供了,那么當在其他模式下工作時也應該提供。這個描述符可能被主機在任何操作模式下使用來識別唯一的設備實例。如果一個設備還可以通過其他技術連接到主機,也應該以該技術特定的方式通過該技術提供在本描述符內相同的Container ID值。本能力描述符不能直接通過GetDescriptor() 或 SetDescriptor()請求訪問。

9-14. Container ID 描述符

9.6.3 Configuration

配置描述符描述特定於設備配置的信息。描述符包括一個bConfigurationValue字段,當在SetConfiguration()請求被用作參數時,會促使設備使用所指定的配置。

此描述符給出了此配置下提供的接口個數。每個接口可能會獨立操作。比如,一個視頻類(Video Class)設備可能配置有兩個接口,每個都提供在主機端的64-MBps的有獨立數據源(sources)與數據接收者(sinks)的雙向通道。在另一個配置下視頻類(Video Class)可能表現為單個接口,將兩個通道合成一個128-MBps的雙向通道。

當主機請求配置描述符時,所有相關接口,端點,以及端點伴侶描述符都被返回(參考第9.4.3節)。

一個設備有一個或多個配置描述符。每個配置有一個或多個接口,而每個接口又有0個或多個端點。在一個配置下,一個端點不會在接口之間共享,除非端點被同一個接口的不同可選設置使用。端點可以在不同配置的接口之間共享,而無此限制。

一旦配置好后,設備可支持對配置的有限調整。如果一個接口有備選設置,在配置好后可選擇不同設置。表9-15顯示了標准配置描述符。

9-15. 標准配置描述符【Standard Configuration Descriptor

9.6.4 接口聯合描述符 【Interface Association】

接口聯合描述符(Interface Association Descriptor)用來描述聯合在一個功能中的兩個或者多個的接口。一個"聯合"包括兩個或者多個接口以及它們的可選設置接口。設備必須對設備的每個需要使用一個以上接口的功能使用一個接口聯合描述符。接口聯合描述符總是作為配置描述符的一部分在GetDescriptor(Configuration)請求中返回。接口聯合描述符不能直接通過GetDescriptor() 或 SetDescriptor()請求訪問。接口聯合描述符必須定位在它所聯合的一組接口的接口描述符(包括所有的可選設置)之前。一組聯合的接口中所有的接口號必須連續。表9-15顯示了標准的接口聯合描述符。接口聯合描述符包括功能類(class),子類(subclass),協議(protocol)字段。這些字段的值可以與所聯合的接口中的任何一個接口的(class),子類(subclass),協議(protocol)字段相同。首選的實現是,對於已經存在的設備類,使用所聯合的一組接口中的第一個接口的(class),子類(subclass),協議(protocol)字段。

Table 9-16. Standard Interface Association Descriptor

注意:由於這個特別的特性沒有包還在以前版本的USB規范中,有一個問題,即對於已經存在的支持USB的操作系統實現將如何支持使用了這個描述符的設備。強烈建議使用接口聯合描述符的設備實現在設備描述符中使用多接口功能類(Multi-interface Function Class)代碼。這就允許簡單並且容易識別這些設備,並且允許在某些操作系統上,可以安裝一個驅動程序升級來解析並枚舉包含接口聯合描述符的配置。多接口功能類(Multi-interface Function Class)文檔見http://www.usb.org/developers/docs.

9.6.5 Interface

接口描述符描述在一個配置內的特定接口。一個配置提供一個或多個接口,每個都有0個或多個端點。當一個配置支持不止一個接口時,端點描述符緊跟在接口描述符后,在GetConfiguration()請求的數據中被返回。如本章前面所述,SuperSpeed設備應該返回該接口的每個端點的端點伴侶描述符(Endpoint Companion descriptors),返回更多的關於其端點能力的信息。在配置信息內,端點伴侶描述符應該緊跟在他所關聯的端點的端點描述符之后。接口描述符總是作為配置描述符的一部分被返回。接口描述符不可直接用GetDescriptor() 或 SetDescriptor()訪問。

一個接口可能包含備選設置,以使得端點或它們的特性在設備配置好以后還能改變。接口的默認設置總是可選設置0。SetInterface()請求用來選擇一個可選設置或者返回默認設置【譯注:怎么返回呢?】;GetInterface()用來返回選擇了的可選設置。

可選接口設置使得部分的設備配置能在其它接口保持操作的情況下被改變。如果一個配置對於它的一個或多個接口有備選設置,每一個設置都包括一個單獨的接口描述符以及其相關的端點和端點伴侶描述符(當報告其SuperSpeed配置時)。

如果一個設備配置支持具有兩個可選設置的單個接口,配置描述符后應緊跟着bInterfaceNumberbAlternateSetting字段皆為0的一個設置的接口描述符及相關的端點和端點伴侶描述符(當報告其SuperSpeed配置時);之后緊跟另一個設置的接口描述符及相關的端點和端點伴侶描述符。第二個接口描述符的bInterfaceNumber字段也應為0,但bAlternateSetting字段應設為1。

如果一個接口僅使用默認控制管道(Default Control Pipe),則接口描述符后就不跟隨端點描述符。在這種情況下bNumEndpoints字段應被設置成0。

一個接口描述符絕不將默認控制管道(Default Control Pipe)計算在端點個數之內。表9-17顯示了標准接口描述符。

9-17. 標准接口描述符


9.6.6 Endpoint

每個接口使用的端點都有自己的描述符。此描述符包含被主機用來決定每個端點的帶寬需求的信息。端點描述符總是作為配置描述符的一部分在GetDescriptor(Configuration)請求中返回的。端點描述符不可直接用GetDescriptor() 或 SetDescriptor()訪問。端點0絕對沒有描述符。表9-18顯示了標准端點描述符。

9-18. 標准端點描述符

Offset

Field

Size

Value

Description

0

bLength

1

數字

此描述符的字節數

1

bDescriptorType

1

常量

ENDPOINT 描述符類

2

bEndpointAddress

1

端點

此描述符所描述的端點的地址。此地址的編碼如下:

Bit 3..0 : 端點號。

Bit 6..4 : 保留,復位為零

Bit 7 : 方向,對控制端點忽略。

0OUT端點

1IN端點

3

bmAttributes

1

位圖

此字段的值描述端點在bConfigurationValue字段所指的配置下端點的特性。

Bits 1..0: Transfer Type

00 = Control

01 = Isochronous

10 = Bulk

11 = Interrupt

如果是中斷端點, bits 5..2 定義如下:

Bits 3..2: 保留

Bits 5..4: 用法類型

00 = Periodic

01 = Notification

10 = Reserved

11 = Reserved

如果是等時端點,他們定義如下:

Bits 3..2: Synchronization Type

00 = No Synchronization

01 = Asynchronous

10 = Adaptive

11 = Synchronous

Bits 5..4: Usage Type

00 = Data endpoint

01 = Feedback endpoint

10 = Implicit feedback Data endpoint

11 = Reserved

如果不是同步或中斷端點,5 .. 2位是保留並 應設置為零。 所有其他位被保留,並應復位為零。保留位應被忽略的主機。

4

wMaxPacketSize

2

數字

當前配置下此端點能夠接收或發送的最大數據包的大小。

對於這個字段只有兩個合法值。對於控制端點本字段應設置為512。對於批量類型端點這一字段應設置1024。

對於中斷和等時端點,如果此端點定義了bMaxBurst大於零的值,這個字段應設置為1024。 如果在bMaxBurst字段值設置為零,那么這一字段對於等時端點可以是從0到1024的任何值,而對於中斷端點可以是1到1024間的任何值。

6

bInterval

1

數字

服務該端點進行數據傳輸的間隔,以125-μs為單位進行表達。

對於超高速等時端點和中斷端點,這個值應該在116范圍內。bInterval值用來作為2^(bInterval-1)值的指數。例如,bInterval意味着周期為82^(4-1) → 2^3 → 8

對於超高速批量或者控制端點,這個字段被保留並應設置為零。

 

bmAttributes字段提供端點的傳輸類型【Transfer Type (bits 1..0)】以及同步類型【Synchronization Type (bits 3..2)】等信息。對於中斷端點,用法類型【Usage Type bits (bits 5..4)】指示端點是否用於不頻繁的通知從而可以忍受可變延遲【(bits 5..4 = 01b)】,或者它定期地以連續服務間隔傳輸數據或依賴於固定的延時【(bits 5..4 = 00b)】。例如,集線器中斷端點會制定它是一個通知類型,而鼠標會制定一個周期類型。對於有時候工作在通知類型,而其他時候工作在周期模式的端點,那么這個字段應該被設置為周期性的【Periodic (bits 5..4 = 00b)】。這些值可能被軟件用來判定使用恰當的電源管理設置。參見附錄C中關於這個值會如何影響電源管理的細節。此外,對於等時端點,用法字段【Usage Type bit (bits 5..4)】指示是否這是一個用於常規數據傳輸的端點【(bits 5..4 = 00b)】;是否被用來給一個或者多個數據端點傳遞明確的反饋信息【(bits 5..4 = 01b)】,或是否它是一個數據端點同時也作為給一個或者多個數據端點的隱含的反饋端點【(bits 5..4=10b)】。

如果端點被用來作為明確的反饋端點【(bits 5..4 = 01b)】,那么傳輸類型(Transfer Type)應該被設為等時【(bits 1..0 = 01b)】而同步類型(Synchronization Type)應該被設為無同步【No Synchronization (bits 3..2 = 00b)】。

反饋端點(顯式或隱式)需要與一個(或多個)它所提供反饋服務的等時數據端點相關聯。該相關性基於端點號匹配。反饋端點總是與它所服務的數據端點有相反的方向。如果多個數據端點需要由同一反饋端點提供服務,數據端點應按照升序——但不一定連續——給端點編號。第一個數據端點和反饋端點應具有相同的端點號(以及相反的方向)。這將確保數據端點可以通過查找具有端點號等於或小於自己的端點號的第一個反饋端點,唯一地標識它的反饋端點。

示例:考慮極端情形,需要有5組輸出(OUT)的異步等時端點,同時需要4組輸入(IN)的自適應等時端點。每一組都需要單獨的反饋端點,並且各組由如圖9-19所示所組成。

9-19. 示例反饋端點編號【Example of Feedback Endpoint Numbers

端點編號可以交織在一起,如圖9-8所示。

對於高速批量和控制OUT端點, bInterval字段只用於兼容性目的;主機控制器不要求根據這個字段的值而改變其行為。

9.6.7 超高速端點伴侶描述符 【SuperSpeed Endpoint Companion】

在接口中描述的每個超高速端點都緊跟着一個超高速端點伴侶描述符(Endpoint Companion descriptor)。這個描述符包含只給超高速端點定義的附加端點特性。這個描述符總是作為配置描述符信息的一部分在GetDescriptor(Configuration)請求中返回,不能被GetDescriptor() 或 SetDescriptor()請求直接訪問。默認的控制管道(Default Control Pipe)不具有端點伴侶描述符。在配置信息中,端點伴侶描述符應該緊跟在它所關聯的端點描述符后面。

9-20. 超高速端點伴侶描述符 SuperSpeed Endpoint Companion Descriptor

Offset

Field

Size

Value

Description

0

bLength

1

Number

這個描述符以字節計的大小

1

bDescriptorType

1

Constant

SUPERSPEED_USB_ENDPOINT_COMPANION

描述符類型

2

bMaxBurst

1

Number

端點在一次突發中可以發送或接收的數據包的最大數量。有效值為從0到15。值為0表示端點只能突發一次一個包,而15值表示端點可以突發一次最多16個包。對於控制類型的端點,這個字段應設置為0。

3

bmAttributes

1

Bitmap

如果這是個批量端點:

比特位 描述

4:0 MaxStreams這個端點支持的流的最大數量。有效值是從0到16,其中值為0表示端點沒有定義流。對於值1至16,所支持的流等於2^MaxStream。

7:5 保留。這些位是保留,並應設置為零。

如果這是個控制或中斷端點:

比特位 描述

7:0 保留。這些位是保留,並應設置為零。

如果這是個等時端點:

比特位 描述

1:0 Mult。基於零的值,決定服務時間間隔內,這端點支持的包的最大數量。包的最大數量 = bMaxBurst x (Mult + 1) 。這個字段可設置的最大值是2.

7:2 保留。這些位是保留,並應設置為零。

4

wBytesPerInterval

2

Number

此端點每一個服務間隔將傳輸的字節總數。此字段只對周期端點有效。 對於等時端點,此值用於保留在調度中的總線時間,為每125微秒的幀數據有效載荷所需。管道可在持續時間的基礎上(on an ongoing basis),實際使用不到保留的帶寬。如有必要,設備通過正常的非USB定義的機制報告實際使用的帶寬。

 

9.6.8 String

字串描述符是可選的。如前所述,如果一個設備不支持字串描述符,所有在其它描述符(設備, 配置, 以及接口)中有關字串描述符的引用都必須復位為0。

字符串描述符使用UNICODE UTF16LE編碼,在The Unicode Standard,Worldwide Character Encoding, Version 5.0, The Unicode Consortium, Addison-Wesley Publishing Company, Reading, Massachusetts (http://www.unicode.org)中定義。設備中的字符串可支持多個語言。當請求字符串描述符時,請求者用一個16位的由USB-IF定義的語言標識(LANGID)指出語言。當前已經定義的USB LANGIDs可以在http://www.usb.org/developers/docs 上找到。所有語言的0號字符串索引返回一個字符串描述符,該字符串描述符為2字節的LANGID數組,表示設備支持的語言編碼。表9-21顯示了該LANGID編碼數組。設備可忽略所有的字符串描述符。忽略了字符串描述符的設備后就不能返回LANGID編碼。

LANGID編碼數組不是以NULL結尾的。該數組的大小(以字節計)是通過將該描述符的第一個字節減去2而得到的(即bLength-2)。

9-21. 字符串描述符0,指定了設備支持的語言

Offset

Field

Size

Value

Description

0

bLength

1

N+2

這個描述符以字節計的大小

1

bDescriptorType

1

Constant

STRING 描述符類型

2

wLANGID[0]

2

Number

LANGID code zero

...

...

...

...

...

N

wLANGID[x]

2

Number

LANGID code x

 

UNICODE字符串描述符(如表9-22所示)不是以NULL結尾的。該字符串的長度(以字節計)是通過將該描述符的第一個字節減去2而得到的(即bLength-2)。

9-22. UNICODE字符串描述符

Offset

Field

Size

Value

Description

0

bLength

1

Number

這個描述符以字節計的大小

1

bDescriptorType

1

Constant

STRING Descriptor Type

2

bString

N

Number

UNICODE encoded string

 

9.7 設備類定義 【Device Class Definitions】

所有設備應支持本章定義的請求和描述符。大多數的設備都提供了額外的請求以及描述符(可能地),以支持設備特定的擴展。此外,設備可能提供擴展的對於一組設備常見的服務。為了定義一類設備,應提供以下信息,以完全定義確定的設備類的表象(appearance)和行為(behavior)。

9.7.1 描述符 【Descriptors】

如果類要求任何特定的標准描述符定義,類的定義應包括這些要求,作為這一類定義的一部分。此外,如果類定義了一個標准擴展了的描述符集,他們也應充分定義在類的定義中。任何擴展的描述符定義應遵循的標准描述符中所使用的方法,例如,所有描述應當以一個長度字段開始。

9.7.2 接口 【Interface(s)】

當一類的設備被標准化時,設備使用的接口應包括在設備類的定義中。設備可能進一步以私有的特性來擴展類定義,只要他們符合類的基礎定義。

9.7.3 請求 【Requests】

所有特定於類的請求應被定義。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM