每當(dāng)一個(gè)USB
外設(shè)接入主機(jī)后,系統(tǒng)會(huì)提示用戶USB
設(shè)備接入了,并不停的查找對(duì)應(yīng)的驅(qū)動(dòng)文件,如果找到驅(qū)動(dòng)文件,則加載對(duì)應(yīng)驅(qū)動(dòng);如果沒有找到,則提示用戶沒有對(duì)應(yīng)的驅(qū)動(dòng),需要用戶主動(dòng)去配置驅(qū)動(dòng)。
那么主機(jī)是如何判斷設(shè)備類型以及找到對(duì)應(yīng)的設(shè)備驅(qū)動(dòng)?在解決這問題之前,先來(lái)了解幾個(gè)概念:
- 設(shè)備描述符 :描述設(shè)備的通用信息,如廠商IDD、產(chǎn)品ID和修訂ID,支持的設(shè)備類、設(shè)備子類、適用的協(xié)議以及默認(rèn)端點(diǎn)的最大包大小等。
- 配置描述符 :描述當(dāng)前配置中的接口數(shù)、支持的掛起和恢復(fù)能力以及功率要求。單個(gè)物理的
USB
設(shè)備,可以包含一個(gè)或者多個(gè)配置,不同的配置描述表現(xiàn)出不同的設(shè)備功能。 - 接口描述符 :接口類、子類和適用的協(xié)議,接口備用配置的數(shù)目和端點(diǎn)數(shù)目。USB協(xié)議根據(jù)功能將不同的接口劃分成不同的類,如下:
1:音頻類,2:CDC控制類,3:人機(jī)接口類(HID),5:物理類,6:圖像類,7:打印機(jī)類,8:大數(shù)據(jù)存儲(chǔ)類,9:集線器類,10:CDC數(shù)據(jù)類,11:智能卡類,13:安全類,220:診斷設(shè)備類,224:無(wú)線控制類,254:特定應(yīng)用類,255廠商定義的設(shè)備。
- 端點(diǎn)描述符 :描述端點(diǎn)地址、方向和類型、支持的最大包大小。主機(jī)只能通過(guò)端點(diǎn)和設(shè)備通信。主機(jī)通過(guò)
USB
地址+端點(diǎn)號(hào)來(lái)尋址,確定數(shù)據(jù)最終是發(fā)到那個(gè)端點(diǎn)。
0號(hào)端點(diǎn)是個(gè)特殊端點(diǎn),通常稱作控制端點(diǎn)
,用戶設(shè)備的初始化
我們來(lái)看一下下面這個(gè)圖,描述了設(shè)備描述符、配置、接口以及端點(diǎn)個(gè)層次包含關(guān)系。
USB各描述符層次關(guān)系
我們可以看到,最頂層的設(shè)備描述符
包含一個(gè)USB
設(shè)備的所有信息,也就是說(shuō)可以通過(guò)設(shè)備描述符
依次獲取到整個(gè)USB
設(shè)備的信息.
枚舉的整個(gè)過(guò)程大概就是這樣:
- 獲取設(shè)備描述: 獲取設(shè)備基本信息,并獲取配置描述符。
- 獲取配置信息: 根據(jù)配置描述獲取到接口描述
- 獲取接口描述: 根據(jù)接口描述,得到端點(diǎn)描述符
- 獲取端點(diǎn)描述: 得到端點(diǎn)描述符
以上只是個(gè)基本過(guò)程,大體上要識(shí)別一個(gè)USB設(shè)備,這幾步驟是必須的。
那么這幾步驟具體是怎么完成的的?說(shuō)到這就得說(shuō)說(shuō)SETUP
過(guò)程,枚舉過(guò)程中每次HOST和Device的交互,都是通過(guò)SETUP
來(lái)完成的。下來(lái)詳細(xì)說(shuō)說(shuō)這SETUP
過(guò)程, 整個(gè)過(guò)程分為三個(gè)階段:
1. CMD階段(SETUP階段)
數(shù)據(jù)方向:HOST->DEVICE單方向,這就是為什么USB所有的動(dòng)作都必須是由HOST發(fā)起的原因
HOST發(fā)出的都是固定的8字節(jié),每個(gè)字節(jié)代表不同含義。
每個(gè)字節(jié)含義解釋
2. DATA階段
數(shù)據(jù)方向雙方向:HOST<->DEVICE。數(shù)據(jù)傳輸方向由CMD命令決定。
數(shù)據(jù)階段是可有可無(wú)的,具體根據(jù)命令字的類型,比如:設(shè)置地址命令,是沒有數(shù)據(jù)階段,Device端接收命令成功,后設(shè)置地址,如果地址設(shè)置成功則返回ACK信號(hào),失敗則是NAK信號(hào)。
3. ACK階段
數(shù)據(jù)雙方向:HOST<->DEVICE。比如設(shè)置地址的命令,DEVICE端設(shè)置完成之后需要給HOST回復(fù)ACK/NAK信號(hào).
4. SETUP
實(shí)例
下圖是USB協(xié)議分析儀解析出的獲取描述符的過(guò)程(這里主要關(guān)注軟件部分,圖例中設(shè)置數(shù)字標(biāo)號(hào)的部分):
- 圖中標(biāo)號(hào)
1
: 命令階段,主機(jī)發(fā)送獲取描述符指令,請(qǐng)求獲取設(shè)備描述符. - 圖中標(biāo)號(hào)
2
: 數(shù)據(jù)階段(Device->Host),設(shè)備回送設(shè)備描述信息. - 圖中標(biāo)號(hào)
3
: 數(shù)據(jù)階段(Device->Host),在USB1.1設(shè)備中,0
號(hào)端點(diǎn)的BUFFER都比較小,單次不能把數(shù)據(jù)發(fā)送完成,需要多次 - 圖中標(biāo)號(hào)
4
:ACK
階段(Host->Device),主機(jī)告訴設(shè)備數(shù)據(jù)正確接收完成
獲取設(shè)備描述符
HOST端主機(jī)軟件就是通過(guò)以上SETUP
過(guò)程,一步一步完成整個(gè)枚舉過(guò)程。
-
USB主機(jī)
+關(guān)注
關(guān)注
0文章
22瀏覽量
9413 -
集線器
+關(guān)注
關(guān)注
0文章
389瀏覽量
39621 -
ACK
+關(guān)注
關(guān)注
0文章
28瀏覽量
11183 -
無(wú)線控制
+關(guān)注
關(guān)注
0文章
96瀏覽量
20012
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
STM32H750 FATFS文件系統(tǒng)掛載USB驅(qū)動(dòng),USB驅(qū)動(dòng)枚舉過(guò)程一直處于ready狀態(tài)是為什么?
調(diào)試USB hots的時(shí)候,枚舉過(guò)不去,為什么?
國(guó)產(chǎn)化USB轉(zhuǎn)串口芯片GP232RL 轉(zhuǎn)串口線 完美兼容替換FT232RL
調(diào)試USB例程,USB枚舉失敗后導(dǎo)致不能下載程序
USB描述符詳解
求問關(guān)于ThreadX系統(tǒng)中開發(fā)的USB枚舉問題
請(qǐng)問STM32F103的USB功能否由軟件開啟或關(guān)閉?
USB枚舉失敗
FX3 USB 3控制器不被重新枚舉和斷開連接
ARM嵌入式裸機(jī)--USB的HOST枚舉
USB 實(shí)驗(yàn)裝置的研制與開發(fā)
daref101運(yùn)行安裝程序的用戶指南
![daref101運(yùn)行安裝程序的用戶指南](https://file.elecfans.com/web2/M00/49/8E/pYYBAGKhtGCAXvZsAAA4Rqa1-Z0380.png)
USB設(shè)備枚舉過(guò)程的詳細(xì)資料說(shuō)明
![<b class='flag-5'>USB</b>設(shè)備<b class='flag-5'>枚舉過(guò)程</b>的詳細(xì)資料說(shuō)明](https://file.elecfans.com/web1/M00/91/BC/pIYBAFzT0MKAJs9vAAE-qUIQhIg456.png)
評(píng)論