USB裝置請求命令 :bmRequestType + bRequest + wValue + wIndex + wLength
編號 值 名稱
(0) 0 GET_STATUS:用來返回特定接收者的狀態
(1) 1 CLEAR_FEATURE:用來清除或禁止接收者的某些特性
(x) 2 為將來保留
(2) 3 SET_FEATURE:用來啟用或啟用命令接收者的某些特性
(x) 2 為將來保留
(3) 5 SET_ADDRESS:用來給裝置分配地址
(4) 6 GET_DESCRIPTOR:用於主機擷取裝置的特定描述符
(5) 7 SET_DESCRIPTOR:修改裝置中有關的描述符,或者增加新的描述符
(6) 8 GET_CONFIGURATION:用於主機擷取裝置當前裝置的配置值(注同上面的不同)
(7) 9 SET_CONFIGURATION:用於主機指示裝置採用的要求的配置
(8) 10 GET_INTERFACE:用於擷取當前某個介面描述符編號
(9) 11 SET_INTERFACE:用於主機要求裝置用某個描述符來描述介面
(10)12 SYNCH_FRAME:用於裝置設定和報告一個端點的同步幀
下表列出了標準裝置請求:
下表為標準請求代碼:
下表為描述符種類:
USB裝置必須響應標準裝置請求,不管裝置是否被分配地址或者是否被配置。
裝置特性選擇符是在設定特性時候使用,如下表
如果有個未支援或未定義的對USB裝置的請求,裝置將在Data或Status階段返回一個STALL。如果裝置在SETUP階段就發現一個錯誤,那麼裝置優先在Data或Stauts之前就返回一個STALL。非法請求不會使得裝置HALT。如果因為某個原因,裝置因為某個錯誤無法通過預設控制管道來與主機通訊,裝置必須被reset來清除錯誤狀態並重啟預設狀態。
以下描述參考圖9-3
1,Clear Feature。這個請求用來清除或使否某個指定的屬性。
wValue必鬚根據接收者來選擇特定的值。接收者是裝置就用裝置描述符,是介面就用介面描述符,是連接埠就用連接埠描述符。一個Clear Feature請求一個不能被清除或不存在的特性,或指的是一個不存在的介面或連接埠的時候,將返回一個Request Error。如果wLength不為0,則裝置響應無定義。
預設狀態下,此時對請求的響應無定義。
地址狀態下,此時對請求的響應有定義,但是不能是對介面或者連接埠的請求,只能是連接埠0,否則響應為Request Error。
配置狀態下,此時對請求的響應有定義。
2,Get Configuration。這個請求用來得到當前裝置的配置值。如果wValue,wIndex,wLength不是預設值,那麼裝置響應無定義。
預設狀態下,裝置響應無定義。
地址狀態下,返回0值。
配置狀態下,非0的bConfiguration值被返回。
3,Get Descriptor。這個請求返回存在的描述符。wValue中高位給出描述符種類,低位給出描述符索引。描述索引符用來給出特定的描述符。wIndex給出0或者Language ID。wLength給出要返回的byte數目。如果描述表長度大於wLegnth,那麼只有描述表的初始部分被返回;否則發送一個短包來描述中斷傳輸的完成。在3種狀態下,請求都是合法的。
4,Get Interface。這個請求返回選定介面的可選配置。有些USB有介面間互斥設定的配置。這個請求使得主機決定設定。wValue和wLength不是預設數值,裝置響應無定義。如果所指的借口不存在,就會返回請求錯誤。
預設狀態下,此時裝置對此請求響應無定義。
地址狀態下,裝置返回請求錯誤。
配置狀態下,請求合法。
5,Get Status。這個請求返回選定接收者的狀態。bmRequestType中的Recipient位指明接收者。傳回值是指定接收者的狀態。如果wValue和wLength不是預設值或者wIndex在取狀態時,裝置響應無定義。
預設狀態下,裝置響應無定義。
地址狀態下,如果所指的是介面或者一個非0的連接埠,裝置返回請求出錯。
配置狀態下,如果所指的介面或連接埠不存在,返回請求錯誤。
6,Set Address。這個請求為將來的裝置存取設定裝置地址。USB裝置只有在status階段後成功完成後才能改變裝置地址。如果裝置地址大於127,或者wIndex或者wLength非0,裝置響應無定義。裝置對SetAddress(0)無響應。
預設狀態下,如果地址值非0,那麼裝置進入地址態,否則仍位於預設態。
地址狀態下,如果新地址為0,那麼裝置進入預設態,否則仍位於地址態。
配置狀態下,裝置對此請求的響應無定義。
7,Set Configuration。設定配置值。此請求設定裝置配置值。wValue的低位元組指出指定的配置。這個配置值必須為0或者和配置描述表中的一個配置相配。如果配置值為0,裝置為地址狀態。wValue的高位元組保留。如果wIndex,wLength,wValue的高位元組非0,那麼裝置對此請求響應未定義。
預設狀態下,對此請求響應未定義。
地址狀態下,如果指定的配置值為0,那麼裝置仍然在地址態下。如果所指的配置和配置表中相符,那麼就轉到相應配置。否則返回請求錯誤。
配置狀態下,如果指定的配置值為0,那麼裝置進入地址狀態下。如果所指的配置和配置表中相符,那麼就轉到相應配置。否則返回請求錯誤。
8,Set Descriptor。 設定描述符。此請求可選,以用於添加或更新新的描述表。wValue的高位元組指明描述符種類,低位元組指明描述符索引。描述符索引用來給出正確的描述符。因為一個裝置可以有不同的描述符。對於可以通過SetDescriptor()設定描述表的,其描述符索引一定為0。描述符索引的範圍從0到描述元範圍值減1。wIndex指出字串描述符Language ID,對於其他描述符設定為0。wLength指明傳輸資料長度。裝置支援的描述符有裝置,配置和字串這3種描述符。如果裝置不支援該請求,返回一個請求錯誤。
預設狀態下,裝置對請求響應無定義。
地址狀態下,如果支援要求,則合法。
配置狀態下,如果支援要求,則合法。
9,Set Feature。設定特性生效。