0. 枚舉流程
? 連接了設(shè)備的 HUB 在 HOST 查詢其狀態(tài)改變端點(diǎn) 時(shí)返回對(duì)應(yīng)的 bitmap,告知HOST 某個(gè)PORT狀態(tài)發(fā)生了改變。
? 主機(jī)向 HUB 查詢?cè)揚(yáng)ORT的狀態(tài),得知有設(shè)備連接,并知道了該設(shè)備的基本特性。
? 主機(jī)等待(至少 100mS)設(shè)備上電穩(wěn)定,然后向 HUB 發(fā)送請(qǐng)求,復(fù)位并使能該P(yáng)ORT。
? HUB執(zhí)行PORT復(fù)位操作,復(fù)位完成后該P(yáng)ORT就使能了?,F(xiàn)在設(shè)備進(jìn)入到defalut狀態(tài),可以從Vbus獲取不超過(guò) 100mA 的電流。主機(jī)可以通過(guò) 0地址與其通訊。
? 主機(jī)通過(guò)0地址向該設(shè)備發(fā)送get_device_descriptor標(biāo)準(zhǔn)請(qǐng)求,獲取設(shè)備的描述符。
? 主機(jī)再次向 HUB 發(fā)送請(qǐng)求,復(fù)位該P(yáng)ORT。
? 主機(jī)通過(guò)標(biāo)準(zhǔn)請(qǐng)求 set_address給設(shè)備分配地址。
? 主機(jī)通過(guò)新地址向設(shè)備發(fā)送 get_device_descriptor標(biāo)準(zhǔn)請(qǐng)求,獲取設(shè)備的描述符。
? 主機(jī)通過(guò)新地址向設(shè)備發(fā)送其他 get_configuration請(qǐng)求,獲取設(shè)備的配置描述符。
? 根據(jù)配置信息,主機(jī)選擇合適配置,通過(guò) set_configuration請(qǐng)求對(duì)設(shè)備而進(jìn)行配置。這時(shí)設(shè)備方可正常使用。
1. GET_DESCRIPTOR
總線復(fù)位及向默認(rèn)地址0發(fā)送GET_DESCRIPTOR指令包,請(qǐng)求設(shè)備描述。如(圖一)所示:
(圖一)
1)Index[4 - 5]:表示USB插入總線復(fù)位
2)Index[7 - 8]:表示主機(jī)向默認(rèn)地址發(fā)送GET_DESCRIPTOR指令包,詳細(xì)信息也抓出來(lái)了,如(圖二)所示:
(圖二)
3)Index[15 - 17]:表示設(shè)備向主機(jī)發(fā)送設(shè)備描述數(shù)據(jù)Index[16]
4)Index[18 - 19]:表示主機(jī)完成GET_DESCRIPTOR指令后,給設(shè)備發(fā)送一個(gè)空應(yīng)答;
2. SET_ADDRESS
再次復(fù)位總線及向設(shè)備發(fā)送SET_ADDRESS指令包,設(shè)置設(shè)備地址。如(圖三)所示:
(圖三)
1)Index[22 - 23]:表示再次總線復(fù)位,該復(fù)位自動(dòng)完成,不是手工插拔USB完成
2)Index[25 - 27]:表示主機(jī)向默認(rèn)地址發(fā)送SET_ADDRESS指令包,詳細(xì)信息如(圖四)所示:
(圖四)
3)Index[29 - 31]:表示設(shè)備完成SET_ADDRESS指令后,給主機(jī)發(fā)送一個(gè)空應(yīng)答;
3. GET_DESCRIPTOR《請(qǐng)求設(shè)備描述》
向第二步設(shè)定的設(shè)備地址發(fā)送GET_DESCRIPTOR指令包,請(qǐng)求設(shè)備描述。如(圖五)所示:
(圖五)
1)Index[33 - 35]:表示主機(jī)向地址01發(fā)送GET_DESCRIPTOR指令包,詳細(xì)信息見(jiàn)(圖六)
(圖六)
2)Index[41 - 43]:表示設(shè)備向主機(jī)發(fā)送設(shè)備描述數(shù)據(jù)Index[42]
3)Index[45 - 47]:表示設(shè)備向主機(jī)發(fā)送設(shè)備描述數(shù)據(jù)Index[46]
4)Index[48 - 50]:表示主機(jī)完成GET_DESCRIPTOR指令后,給設(shè)備發(fā)送一個(gè)空應(yīng)答;
4. GET_DESCRIPTOR《請(qǐng)求配置描述》
向第二步設(shè)定的設(shè)備地址發(fā)送GET_DESCRIPTOR指令包,請(qǐng)求配置描述。如(圖七)所示:
(圖七)
1)Index[52 - 54]:表示主機(jī)向地址01發(fā)送GET_DESCRIPTOR指令包,詳細(xì)信息見(jiàn)(圖八)
(圖八)
2)Index[57 - 59]:表示設(shè)備向主機(jī)發(fā)送配置描述數(shù)據(jù)Index[58]
3)Index[60 - 62]:表示主機(jī)完成GET_DESCRIPTOR指令后,給設(shè)備發(fā)送一個(gè)空應(yīng)答;
5. 讀取完整設(shè)備描述及配置描述
重復(fù)向第二步設(shè)定的設(shè)備地址發(fā)送GET_DESCRIPTOR指令包,取完所有設(shè)備描述及配置描述;
6. SET_CONFIGURATION
向第二步設(shè)定的設(shè)備地址發(fā)送SET_CONFIGURATION指令包,設(shè)置配置描述。如(圖九)所示:
(圖九)
1)Index[139 - 141]:表示主機(jī)向地址01發(fā)送SET_CONFIGURATION指令包,詳細(xì)信息見(jiàn)(圖十)
(圖十)
2)Index[143 - 145]:表示設(shè)備完成SET_CONFIGURATION指令后,給主機(jī)發(fā)送一個(gè)空應(yīng)答
至此,枚舉過(guò)程結(jié)束,設(shè)備可通過(guò)驅(qū)動(dòng)與主機(jī)通信了。
以上的USB枚舉過(guò)程是根據(jù)現(xiàn)有特定設(shè)備捕獲得到,并不完整涉及到USB協(xié)議的所有指令包,如GET_STATUS指令包、CLEAR_FEATURE指令包、SET_FEATURE指令包、SET_DESCRIPTOR指令包、GET_CONFIGURATION指令包、GET_INTERFACE指令包、SET_INTERFACE指令包、SYNCH_FRAME指令包等。
評(píng)論
查看更多