usb如何枚举
1-1 狀態(tài)轉(zhuǎn)換
USB協(xié)議定義了設(shè)備的6種狀態(tài),僅在枚舉過(guò)程中,設(shè)備就經(jīng)歷了4個(gè)狀態(tài)的遷移:
上電狀態(tài)(Powered),
默認(rèn)狀態(tài)(Default),
地址狀態(tài)(Address)
配置狀態(tài)(Configured)
(其他兩種是連接狀態(tài)和掛起狀態(tài)(Suspend))
1-2?Hub監(jiān)測(cè)它各個(gè)端口數(shù)據(jù)線上(D+/D-)的電壓
??在hub端,數(shù)據(jù)線D+和D-都有一個(gè)阻值在14.25k到24.8k的下拉電阻Rpd,而在設(shè)備端,D+(全速,高速)和D-(低速)上有一個(gè)1.5k的上拉電阻Rpu。當(dāng)設(shè)備插入到hub端口時(shí),有上拉電阻的一根數(shù)據(jù)線被拉高到幅值的90%的電壓(大致是3V)。hub檢測(cè)到它的一根數(shù)據(jù)線是高電平,就認(rèn)為是有設(shè)備插入,并能根據(jù)是D+還是D-被拉高來(lái)判斷到底是什么設(shè)備(全速/低速)插入端口(全速、高速設(shè)備的區(qū)分在我將來(lái)的文章中描述)。如下圖。
如d+ 被拉高那么就認(rèn)為是 全速設(shè)備,d-被拉高則認(rèn)為是低速設(shè)備?
?檢測(cè)到設(shè)備后,hub繼續(xù)給設(shè)備供電,但并不急于與設(shè)備進(jìn)行USB傳輸。
1-3?Host了解連接的設(shè)備
?每個(gè)hub利用它自己的中斷端點(diǎn)向主機(jī)報(bào)告它的各個(gè)端口的狀態(tài)(對(duì)于這個(gè)過(guò)程,設(shè)備是看不到的,也不必關(guān)心),報(bào)告的內(nèi)容只是hub端口的設(shè)備連接/斷開(kāi)的事件。如果有連接/斷開(kāi)事件發(fā)生,那么host會(huì)發(fā)送一個(gè) Get_Port_Status請(qǐng)求(request)給hub以了解此次狀態(tài)改變的確切含義。Get_Port_Status等請(qǐng)求屬于所有hub都要求支持的hub類標(biāo)準(zhǔn)請(qǐng)求(standard hub-class requests)。
1-4?Hub檢測(cè)所插入的設(shè)備是高速還是低速設(shè)備
?hub通過(guò)檢測(cè)USB總線空閑(Idle)時(shí)差分線的高低電壓來(lái)判斷所連接設(shè)備的速度類型,當(dāng)host發(fā)來(lái)Get_Port_Status請(qǐng)求時(shí),hub就可以將此設(shè)備的速度類型信息回復(fù)給host。USB 2.0規(guī)范要求速度檢測(cè)要先于復(fù)位(Reset)操作。
1-5?hub復(fù)位設(shè)備
主機(jī)一旦得知新設(shè)備已連上以后,它至少等待100ms以使得插入操作的完成以及設(shè)備電源穩(wěn)定工作。然后主機(jī)控制器就向hub發(fā)出一個(gè) Set_Port_Feature請(qǐng)求讓hub復(fù)位其管理的端口(剛才設(shè)備插上的端口)。hub通過(guò)驅(qū)動(dòng)數(shù)據(jù)線到復(fù)位狀態(tài)(D+和D-全為低電平 ),并持續(xù)至少10ms。當(dāng)然,hub不會(huì)把這樣的復(fù)位信號(hào)發(fā)送給其他已有設(shè)備連接的端口,所以其他連在該hub上的設(shè)備自然看不到復(fù)位信號(hào),不受影響。
1-6?高速usb的識(shí)別
高速設(shè)備初始是以一個(gè)全速設(shè)備的身份出現(xiàn)的,即和全速設(shè)備一樣,D+線上有一個(gè)1.5k的上拉電阻。USB2.0的hub把它當(dāng)作一個(gè)全速設(shè)備,之后,hub和設(shè)備通過(guò)一系列握手信號(hào)確認(rèn)雙方的身份。在這里對(duì)速度的檢測(cè)是雙向的,比如高速的hub需要檢測(cè)所掛上來(lái)的設(shè)備是高速、全速還是低速,高速的設(shè)備需要檢測(cè)所連上的hub是USB2.0的還是1.x的,如果是前者,就進(jìn)行一系列動(dòng)作切到高速模式工作,如果是后者,就以全速模式工作。
?
hub檢測(cè)到有設(shè)備插入/上電時(shí),向主機(jī)通報(bào),主機(jī)發(fā)送Set_Port_Feature請(qǐng)求讓hub復(fù)位新插入的設(shè)備。設(shè)備復(fù)位操作是hub通過(guò)驅(qū)動(dòng)數(shù)據(jù)線到復(fù)位狀態(tài)SE0(Single-ended 0,即D+和D-全為低電平),并持續(xù)至少10ms。
高速設(shè)備看到復(fù)位信號(hào)后,通過(guò)內(nèi)部的電流源向D-線持續(xù)灌大小為17.78mA電流。因?yàn)榇藭r(shí)高速設(shè)備的1.5k上拉電阻還未撤銷,在hub端,全速/低速驅(qū)動(dòng)器形成一個(gè)阻抗為45歐姆(Ohm)的終端電阻,2電阻并聯(lián)后仍是45歐姆左右的阻抗,所以在hub端看到一個(gè)約800mV的電壓(45歐姆*17.78mA),這就是Chirp K信號(hào)。Chirp K信號(hào)的持續(xù)時(shí)間是1ms~7ms。
在hub端,雖然下達(dá)了復(fù)位信號(hào),并一直驅(qū)動(dòng)著SE0,但USB2.0的高速接收器一直在檢測(cè)Chirp K信號(hào),如果沒(méi)有Chirp K信號(hào)看到,就繼續(xù)復(fù)位操作,直到復(fù)位結(jié)束,之后就在全速模式下操作。如果只是一個(gè)全速的hub,不支持高速操作,那么該hub不理會(huì)設(shè)備發(fā)送的Chirp K信號(hào),之后設(shè)備也不會(huì)切換到高速模式。
設(shè)備發(fā)送的Chirp K信號(hào)結(jié)束后100us內(nèi),hub必須開(kāi)始回復(fù)一連串的KJKJKJ….序列,向設(shè)備表明這是一個(gè)USB2.0的hub。這里的KJ序列是連續(xù)的,中間不能間斷,而且每個(gè)K或J的持續(xù)時(shí)間在40us~60us之間。KJ序列停止后的100~500us內(nèi)結(jié)束復(fù)位操作。hub發(fā)送Chirp KJ序列的方式和設(shè)備一樣,通過(guò)電流源向差分?jǐn)?shù)據(jù)線交替灌17.78mA的電流實(shí)現(xiàn)。
再回到設(shè)備端來(lái)。設(shè)備檢測(cè)到6個(gè)hub發(fā)出的Chirp信號(hào)后(3對(duì)KJ序列),它必須在500us內(nèi)切換到高速模式。切換動(dòng)作有:
1. 斷開(kāi)1.5k的上拉電阻。
2. 連接D+/D-上的高速終端電阻(high-speed termination),實(shí)際上就是全速/低速差分驅(qū)動(dòng)器。
3. 進(jìn)入默認(rèn)的高速狀態(tài)。
執(zhí)行1,2兩步后,USB信號(hào)線上看到的現(xiàn)象就發(fā)生變化了:hub發(fā)送出來(lái)的Chirp KJ序列幅值降到了原先的一半,400mV。這是因?yàn)樵O(shè)備端掛載新的終端電阻后,配上原先hub端的終端電阻,并聯(lián)后的阻抗是22.5歐姆。400mV就是由17.78mA*22.5Ohm得來(lái)。以后高速操作的信號(hào)幅值就是400mV而不像全速/低速那樣的3V。
至此,高速設(shè)備與USB2.0 hub握手完畢,進(jìn)行后續(xù)的480Mbps高速信號(hào)通信。
?
總結(jié)
- 上一篇: usb 那点事
- 下一篇: LVDS 相关功能调式