淺析USB主機識別USB設備及請求命令的方法
當USB設備插上主機時(shí),主機就通過(guò)一系列的動(dòng)作來(lái)對設備進(jìn)行枚舉配置(配置是屬于枚舉的一個(gè)態(tài),態(tài)表示暫時(shí)的狀態(tài)),這這些態(tài)如下:
本文引用地址:http://dyxdggzs.com/article/202150.htm1、接入態(tài)(Attached):設備接入主機后,主機通過(guò)檢測信號線(xiàn)上的電平變化來(lái)發(fā)現設備的接入;
2、供電態(tài)(Powered):就是給設備供電,分為設備接入時(shí)的默認供電值,配置階段后的供電值(按數據中要求的最大值,可通過(guò)編程設置)
3、缺省態(tài)(Default):USB在被配置之前,通過(guò)缺省地址0與主機進(jìn)行通信;
4、地址態(tài)(Address):經(jīng)過(guò)了配置,USB設備被復位后,就可以按主機分配給它的唯一地址來(lái)與主機通信,這種狀態(tài)就是地址態(tài);
5、配置態(tài)(Configured):通過(guò)各種標準的USB請求命令來(lái)獲取設備的各種信息,并對設備的某此信息進(jìn)行改變或設置。
6、掛起態(tài)(Suspended):總線(xiàn)供電設備在3ms內沒(méi)有總線(xiàn)操作,即USB總線(xiàn)處于空閑狀態(tài)的話(huà),該設備就要自動(dòng)進(jìn)入掛起狀態(tài),在進(jìn)入掛起狀態(tài)后,總的電流功耗不超過(guò)280UA。
標準的USB設備請求命令究竟是什么?
標準的USB設備請求命令是用在控制傳輸中的“初始設置步驟”里的數據包階段(即DATA0,由八個(gè)字節構成)。標準USB設備請求命令共有11個(gè),大小都是8個(gè)字節,具有相同的結構,由5個(gè)字段構成(字段是標準請求命令的數據部分),結構如下(括號中的數字表示字節數,首字母bm,b,w分別表示位圖、字節,雙字節):
bmRequestType(1)+bRequest(1)+wvalue(2)+wIndex(2)+wLength(2)
各字段的意義如下:
1、bmRequestType:D7D6D5D4D3D2D1D0
D7=0主機到設備
=1設備到主機;
D6D5=00標準請求命令
=01 類(lèi)請求命令
=10用戶(hù)定義的命令
=11保留值
D4D3D2D1D0=00000 接收者為設備
=00001 接收者為設備
=00010 接收者為端點(diǎn)
=00011 接收者為其他接收者
=其他 其他值保留
2、bRequest:請求命令代碼 在標準的USB命令中,每一個(gè)命令都定義了編號,編號的值就為字段的值,編號與命令名稱(chēng)如下(要注意這里的命令代碼要與其他字段結合使用,可以說(shuō)命令代碼是標準請求命令代碼的核心,正是因為這些命令代碼而決定了11個(gè)USB標準請求命令):
0) 0 GET_STATUS:用來(lái)返回特定接收者的狀態(tài)
1) 1 CLEAR_FEATURE:用來(lái)清除或禁止接收者的某些特性
2) 3 SET_FEATURE:用來(lái)啟用或激活命令接收者的某些特性
3) 5 SET_ADDRESS:用來(lái)給設備分配地址
4) 6 GET_DEscriptOR:用于主機獲取設備的特定描述符
5) 7 SET_DEscriptOR:修改設備中有關(guān)的描述符,或者增加新的描述符
6) 8 GET_CONFIGURATION:用于主機獲取設備當前設備的配置值(注同上面的不同)
7) 9 SET_CONFIGURATION:用于主機指示設備采用的要求的配置
8) 10 GET_INTERFACE:用于獲取當前某個(gè)接口描述符編號
9) 11 SET_INTERFACE:用于主機要求設備用某個(gè)描述符來(lái)描述接口
10) 12 SYNCH_FRAME:用于設備設置和報告一個(gè)端點(diǎn)的同步幀
以上的11個(gè)命令要說(shuō)得明白真的有一匹布那么長(cháng),請各位去看書(shū)吧,這里就不多說(shuō)了,控制傳輸是USB的重心,而這11個(gè)命令是控制傳輸的重心,所以這11個(gè)命令是重中之重,這個(gè)搞明白了,USB就算是入門(mén)了。
更多計算機與外設信息請關(guān)注:21ic計算機與外設頻道
評論