0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

USB的枚舉過程

冬至子 ? 來源:binnary ? 作者:binnary ? 2023-06-25 14:14 ? 次閱讀

每當(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)?在解決這問題之前,先來了解幾個(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ī)只能通過端點(diǎn)和設(shè)備通信。主機(jī)通過USB地址+端點(diǎn)號(hào)來尋址,確定數(shù)據(jù)最終是發(fā)到那個(gè)端點(diǎn)。

0號(hào)端點(diǎn)是個(gè)特殊端點(diǎn),通常稱作控制端點(diǎn),用戶設(shè)備的初始化

我們來看一下下面這個(gè)圖,描述了設(shè)備描述符、配置、接口以及端點(diǎn)個(gè)層次包含關(guān)系。

圖片

USB各描述符層次關(guān)系

我們可以看到,最頂層的設(shè)備描述符包含一個(gè)USB設(shè)備的所有信息,也就是說可以通過設(shè)備描述符依次獲取到整個(gè)USB設(shè)備的信息.

枚舉的整個(gè)過程大概就是這樣:

  1. 獲取設(shè)備描述: 獲取設(shè)備基本信息,并獲取配置描述符。
  2. 獲取配置信息: 根據(jù)配置描述獲取到接口描述
  3. 獲取接口描述: 根據(jù)接口描述,得到端點(diǎn)描述符
  4. 獲取端點(diǎn)描述: 得到端點(diǎn)描述符

以上只是個(gè)基本過程,大體上要識(shí)別一個(gè)USB設(shè)備,這幾步驟是必須的。

那么這幾步驟具體是怎么完成的的?說到這就得說說SETUP過程,枚舉過程中每次HOST和Device的交互,都是通過SETUP來完成的。下來詳細(xì)說說這SETUP過程, 整個(gè)過程分為三個(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ā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ī)軟件就是通過以上SETUP過程,一步一步完成整個(gè)枚舉過程。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • USB主機(jī)
    +關(guān)注

    關(guān)注

    0

    文章

    22

    瀏覽量

    9331
  • 集線器
    +關(guān)注

    關(guān)注

    0

    文章

    378

    瀏覽量

    39385
  • ACK
    ACK
    +關(guān)注

    關(guān)注

    0

    文章

    28

    瀏覽量

    11119
  • 無(wú)線控制
    +關(guān)注

    關(guān)注

    0

    文章

    95

    瀏覽量

    19953
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32H750 FATFS文件系統(tǒng)掛載USB驅(qū)動(dòng),USB驅(qū)動(dòng)枚舉過程一直處于ready狀態(tài)是為什么?

    就是FATFS文件系統(tǒng)掛載USB驅(qū)動(dòng),讀寫U盤,我一直不成功USB驅(qū)動(dòng)枚舉過程一直處于ready 狀態(tài),文件系統(tǒng)掛載不成功!請(qǐng)問大家有知道怎么解決的嗎?或者類似案列參考一下!謝謝!
    發(fā)表于 03-27 06:52

    調(diào)試USB hots的時(shí)候,枚舉過不去,為什么?

    調(diào)試USB hots的時(shí)候,枚舉過不去,第一步的狀態(tài)都不對(duì)。我看數(shù)據(jù)是中斷函數(shù)USBH_OTG_ISR_Handler返回的,請(qǐng)問哪位有相關(guān)說明發(fā)一下,現(xiàn)在總是觸發(fā)gintsts.b.sofintr中斷。謝謝!
    發(fā)表于 04-10 07:28

    國(guó)產(chǎn)化USB轉(zhuǎn)串口芯片GP232RL 轉(zhuǎn)串口線 完美兼容替換FT232RL

    時(shí),USB主機(jī)會(huì)檢測(cè)到設(shè)備的插入并進(jìn)行復(fù)位。2.?枚舉過程?:計(jì)算機(jī)通過USB枚舉過程獲取設(shè)備的描述符信息,包括廠商ID、設(shè)備ID和Class類別等。3.?驅(qū)動(dòng)匹配?:操作系統(tǒng)根據(jù)獲取
    發(fā)表于 09-10 16:20

    USB枚舉過程是怎樣的?

    USB枚舉過程是怎樣的?誰(shuí)能描述下?謝謝
    發(fā)表于 11-21 15:34

    調(diào)試USB例程,USB枚舉失敗后導(dǎo)致不能下載程序

    Virtual_Com_Port_Reset(void)的內(nèi)容注釋掉。下載成功,斷電重啟后,電腦報(bào)告未能識(shí)別的USB設(shè)備,我想大概這個(gè)函數(shù)的內(nèi)容影響到了USB枚舉過程。所以,重新恢復(fù)void
    發(fā)表于 05-05 10:26

    USB描述符詳解

    對(duì)于實(shí)現(xiàn)USB功能的項(xiàng)目,不管是實(shí)現(xiàn)CDC,大容量存儲(chǔ)、HID等都必須使用實(shí)現(xiàn)USB標(biāo)準(zhǔn)描述符,從而實(shí)現(xiàn)USB枚舉過程。這里共享一個(gè)USB
    發(fā)表于 06-12 14:46

    求問關(guān)于ThreadX系統(tǒng)中開發(fā)的USB枚舉問題

    利用ds5+dstream將這個(gè)工程代碼燒錄到指定的目標(biāo)板中,全程運(yùn)行后再將目標(biāo)板的USB端口連接到Linux主機(jī)上,USB枚舉過程時(shí)而成功,時(shí)而失敗,以下是將USB端口接到Linux
    發(fā)表于 11-06 10:45

    請(qǐng)問STM32F103的USB功能否由軟件開啟或關(guān)閉?

    USB枚舉過程,如果此時(shí)設(shè)備還沒有準(zhǔn)備好回應(yīng),就會(huì)枚舉失?。∑渌囊恍┚哂?b class='flag-5'>USB功能單片機(jī)都可以由寄存器配置決定是否接入D+線上內(nèi)置的上拉電阻, 不知STM32F103是否有類似的功
    發(fā)表于 11-06 08:46

    USB枚舉失敗

    我使用的芯片是STM32F105,F(xiàn)ull-speed模式,ST官網(wǎng)的USB-OTG的庫(kù),現(xiàn)在枚舉過程總是失敗,電腦設(shè)備管理器已經(jīng)可以顯示USB人體輸入設(shè)備,但是顯示錯(cuò)誤碼:(10)設(shè)備無(wú)法啟動(dòng)
    發(fā)表于 05-10 06:23

    FX3 USB 3控制器不被重新枚舉和斷開連接

    來在FX3 RAM中上傳固件。轉(zhuǎn)會(huì)工作完美無(wú)瑕。例如,如果我們用閃爍的LED編寫一個(gè)固件,默認(rèn)的引導(dǎo)加載程序,在程序跳轉(zhuǎn)進(jìn)入USB命令之后,LED閃爍。到目前為止,這是很好的,但是如果我們看USB枚舉過程
    發(fā)表于 09-20 09:36

    ARM嵌入式裸機(jī)--USB的HOST枚舉

    設(shè)備就要自動(dòng)進(jìn)入掛起狀態(tài),在進(jìn)入掛起狀態(tài)后,總的電流功耗不超過280uA。狀態(tài)轉(zhuǎn)移圖如下所示:二、枚舉過程1、用戶將一個(gè)USB設(shè)備插入USB端口,主機(jī)為端口供電,設(shè)備此時(shí)處于上電狀態(tài)。主機(jī)檢測(cè)設(shè)備
    發(fā)表于 10-15 07:51

    USB 實(shí)驗(yàn)裝置的研制與開發(fā)

    利用最新的嵌入式開發(fā)工具EDK,在FPGA中完成對(duì)PDIUSBD12的硬件定制和固件編程,從而在FPGA中實(shí)現(xiàn)USB 控制器, 并最終完成USB枚舉過程、驅(qū)動(dòng)程序的開發(fā)和簡(jiǎn)單的應(yīng)用。
    發(fā)表于 05-18 13:24 ?12次下載

    daref101運(yùn)行安裝程序的用戶指南

    、J8、J10和J11,安裝和跳線J9上沒有安裝板。 2)連接你的麥克風(fēng)輸入的3.5mm音頻插孔標(biāo)記上板。 3)連接你的耳機(jī)或音箱的3.5mm音頻插孔標(biāo)記在董事會(huì)外。 4)連接從您的PC的USB端口的USB電纜J2板。這將電源應(yīng)用于主板,并開始
    發(fā)表于 06-01 14:48 ?10次下載
    daref101運(yùn)行安裝程序的用戶指南

    USB設(shè)備枚舉過程的詳細(xì)資料說明

    USB設(shè)備在正常工作以前,第一件要做的事就是枚舉。 枚舉就是讓HOST認(rèn)得這個(gè)設(shè)備,并且為該設(shè)備準(zhǔn)備其所請(qǐng)求的資源,建立好主機(jī)和設(shè) 備之間的信息溝通機(jī)制 。
    發(fā)表于 05-09 08:00 ?2次下載
    <b class='flag-5'>USB</b>設(shè)備<b class='flag-5'>枚舉過程</b>的詳細(xì)資料說明

    CDC設(shè)備枚舉過程解析

    本篇筆記將詳述 CDC設(shè)備枚舉過程,讓大家對(duì)整體的枚舉過程有個(gè)概念。
    的頭像 發(fā)表于 10-09 11:43 ?2625次閱讀
    CDC設(shè)備<b class='flag-5'>枚舉過程</b>解析