USB設備請求命令詳解
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。設置特性生效。
http://www.cnblogs.com/artechliu/archive/2011/06/20/1945137.html
USB設備請求命令詳解