USB枚舉過程


 0. 枚舉流程

   • 連接了設備的 HUB 在 HOST 查詢其狀態改變端點 時返回對應的 bitmap,告知HOST 某個PORT狀態發生了改變。
   • 主機向 HUB 查詢該PORT的狀態,得知有設備連接,並知道了該設備的基本特性。 
   • 主機等待(至少 100mS)設備上電穩定,然后向 HUB 發送請求,復位並使能該PORT。
   • HUB執行PORT復位操作,復位完成后該PORT就使能了現在設備進入到defalut狀態,可以從Vbus獲取不超過 100mA 的電流。主機可以通過 0地址與其通訊
   • 主機通過0地址向該設備發送get_device_descriptor標准請求,獲取設備的描述符
   • 主機再次向 HUB 發送請求,復位該PORT。
   • 主機通過標准請求 set_address給設備分配地址
   • 主機通過新地址向設備發送 get_device_descriptor標准請求,獲取設備的描述符
   • 主機通過新地址向設備發送其他 get_configuration請求,獲取設備的配置描述符
   • 根據配置信息,主機選擇合適配置,通過 set_configuration請求對設備而進行配置。這時設備方可正常使用

 

1. GET_DESCRIPTOR

      總線復位及向默認地址0發送GET_DESCRIPTOR指令包,請求設備描述。如(圖一)所示:

 

(圖一)

1)Index[4 - 5]:表示USB插入總線復位
2)Index[7 - 8]:表示主機向默認地址發送GET_DESCRIPTOR指令包,詳細信息也抓出來了,如(圖二)所示:

(圖二)

3)Index[15 - 17]:表示設備向主機發送設備描述數據Index[16]
4)Index[18 - 19]:表示主機完成GET_DESCRIPTOR指令后,給設備發送一個空應答;


2. SET_ADDRESS

     再次復位總線及向設備發送SET_ADDRESS指令包,設置設備地址。如(圖三)所示:

(圖三)

1)Index[22 - 23]:表示再次總線復位,該復位自動完成,不是手工插拔USB完成
2)Index[25 - 27]:表示主機向默認地址發送SET_ADDRESS指令包,詳細信息如(圖四)所示:

(圖四)

3)Index[29 - 31]:表示設備完成SET_ADDRESS指令后,給主機發送一個空應答;

 

3. GET_DESCRIPTOR<請求設備描述>

    向第二步設定的設備地址發送GET_DESCRIPTOR指令包,請求設備描述。如(圖五)所示:

 

(圖五)

1)Index[33 - 35]:表示主機向地址01發送GET_DESCRIPTOR指令包,詳細信息見(圖六)

(圖六)

2)Index[41 - 43]:表示設備向主機發送設備描述數據Index[42]
3)Index[45 - 47]:表示設備向主機發送設備描述數據Index[46]
4)Index[48 - 50]:表示主機完成GET_DESCRIPTOR指令后,給設備發送一個空應答;

 

4. GET_DESCRIPTOR<請求配置描述>

向第二步設定的設備地址發送GET_DESCRIPTOR指令包,請求配置描述。如(圖七)所示:

(圖七)
1)Index[52 - 54]:表示主機向地址01發送GET_DESCRIPTOR指令包,詳細信息見(圖八)

(圖八)
2)Index[57 - 59]:表示設備向主機發送配置描述數據Index[58]
3)Index[60 - 62]:表示主機完成GET_DESCRIPTOR指令后,給設備發送一個空應答;

 

5. 讀取完整設備描述及配置描述

       重復向第二步設定的設備地址發送GET_DESCRIPTOR指令包,取完所有設備描述及配置描述;

6. SET_CONFIGURATION

       向第二步設定的設備地址發送SET_CONFIGURATION指令包,設置配置描述。如(圖九)所示:

(圖九)
1)Index[139 - 141]:表示主機向地址01發送SET_CONFIGURATION指令包,詳細信息見(圖十)

(圖十)

2)Index[143 - 145]:表示設備完成SET_CONFIGURATION指令后,給主機發送一個空應答
至此,枚舉過程結束,設備可通過驅動與主機通信了。


       以上的USB枚舉過程是根據現有特定設備捕獲得到,並不完整涉及到USB協議的所有指令包,如GET_STATUS指令包、CLEAR_FEATURE指令包、SET_FEATURE指令包、SET_DESCRIPTOR指令包、GET_CONFIGURATION指令包、GET_INTERFACE指令包、SET_INTERFACE指令包、SYNCH_FRAME指令包等。

 

轉自:https://blog.csdn.net/myarrow/article/details/8270060

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM