USB2.0速度識別
我們知道USB2.0向下兼容USB1.x,即高速2.0的hub能支持所有的速度類型的設(shè)備,而USB1.x的hub不能支持高速設(shè)備(High Speed Device)。因此,如果高速設(shè)備掛到USB1.x的hub上,那該設(shè)備只能工作在全速模式下。不管是hub還是設(shè)備(device),對于速度的區(qū)分是非常重要的,否則,后續(xù)的通信根本無法進行。
全速和低速識別
根據(jù)規(guī)范,全速(Full Speed)和低速(Low Speed)很好區(qū)分,因為在設(shè)備端有一個1.5k的上拉電阻,當設(shè)備插入hub或上電(固定線纜的USB設(shè)備)時,有上拉電阻的那根數(shù)據(jù)線就會被拉高,hub根據(jù)D+/D-上的電平判斷所掛載的是全速設(shè)備還是低速設(shè)備。如下兩圖:
USB全速設(shè)備上電連接
(Full-speed Device Cable and Resistor Connections)
USB低速設(shè)備上電連接
(Low-speed Device Cable and Resistor Connections)
高速識別
USB全速/低速識別相當簡單,但USB2.0,USB1.x就一對數(shù)據(jù)線,不能像全速/低速那樣僅依靠數(shù)據(jù)線上拉電阻位置就能識別USB第三種速度:高速。因此對于高速設(shè)備的識別就顯得稍微復(fù)雜些。
高速設(shè)備初始是以一個全速設(shè)備的身份出現(xiàn)的,即和全速設(shè)備一樣,D+線上有一個1.5k的上拉電阻。USB2.0的hub把它當作一個全速設(shè)備,之后,hub和設(shè)備通過一系列握手信號確認雙方的身份。在這里對速度的檢測是雙向的,比如高速的hub需要檢測所掛上來的設(shè)備是高速、全速還是低速,高速的設(shè)備需要檢測所連上的hub是USB2.0的還是1.x的,如果是前者,就進行一系列動作切到高速模式工作,如果是后者,就以全速模式工作。
下圖展示了一個高速設(shè)備連到USB2.0 hub上的情形:
hub檢測到有設(shè)備插入/上電時,向主機通報,主機發(fā)送Set_Port_Feature請求讓hub復(fù)位新插入的設(shè)備。設(shè)備復(fù)位操作是hub通過驅(qū)動數(shù)據(jù)線到復(fù)位狀態(tài)SE0(Single-ended 0,即D+和D-全為低電平),并持續(xù)至少10ms。
高速設(shè)備看到復(fù)位信號后,通過內(nèi)部的電流源向D-線持續(xù)灌大小為17.78mA電流。因為此時高速設(shè)備的1.5k上拉電阻還未撤銷,在hub端,全速/低速驅(qū)動器形成一個阻抗為45歐姆(Ohm)的終端電阻,2電阻并聯(lián)后仍是45歐姆左右的阻抗,所以在hub端看到一個約800mV的電壓(45歐姆*17.78mA),這就是Chirp
K信號。Chirp K信號的持續(xù)時間是1ms~7ms。
在hub端,雖然下達了復(fù)位信號,并一直驅(qū)動著SE0,但USB2.0的高速接收器一直在檢測Chirp
K信號,如果沒有Chirp K信號看到,就繼續(xù)復(fù)位操作,直到復(fù)位結(jié)束,之后就在全速模式下操作。如果只是一個全速的hub,不支持高速操作,那么該hub不理會設(shè)備發(fā)送的Chirp
K信號,之后設(shè)備也不會切換到高速模式。
設(shè)備發(fā)送的Chirp K信號結(jié)束后100us內(nèi),hub必須開始回復(fù)一連串的KJKJKJ....序列,向設(shè)備表明這是一個USB2.0的hub。這里的KJ序列是連續(xù)的,中間不能間斷,而且每個K或J的持續(xù)時間在40us~60us之間。KJ序列停止后的100~500us內(nèi)結(jié)束復(fù)位操作。hub發(fā)送Chirp
KJ序列的方式和設(shè)備一樣,通過電流源向差分數(shù)據(jù)線交替灌17.78mA的電流實現(xiàn)。
再回到設(shè)備端來。設(shè)備檢測到6個hub發(fā)出的Chirp信號后(3對KJ序列),它必須在500us內(nèi)切換到高速模式。切換動作有:
1. 斷開1.5k的上拉電阻。
2. 連接D+/D-上的高速終端電阻(high-speed termination),實際上就是全速/低速差分驅(qū)動器。
3. 進入默認的高速狀態(tài)。
執(zhí)行1,2兩步后,USB信號線上看到的現(xiàn)象就發(fā)生變化了:hub發(fā)送出來的Chirp KJ序列幅值降到了原先的一半,400mV。這是因為設(shè)備端掛載新的終端電阻后,配上原先hub端的終端電阻,并聯(lián)后的阻抗是22.5歐姆。400mV就是由17.78mA*22.5Ohm得來。以后高速操作的信號幅值就是400mV而不像全速/低速那樣的3V。
至此,高速設(shè)備與USB2.0 hub握手完畢,進行后續(xù)的480Mbps高速信號通信。
最后附上幾幅實際USB高速識別的示波器抓圖,圖中藍色信號是D+,黃色信號是D-。
1.數(shù)據(jù)線D+在T點之前掛上1.5K電阻,在T點被host拉成SE0狀態(tài)。在近2ms后,設(shè)備發(fā)送第一個Chirp K,向host通知說:我是一個高速設(shè)備,如果可能,請用高速方式與我通信。其幅度是800mV(17.78mA * (45Ohm ||1.5kOhm)
= 800mV,見上文解釋)。在這里,Chirp K的持續(xù)時間是2.13ms(a,b兩點之間)。
2.這幅圖顯示了host發(fā)出的chirp KJ信號的幅度,頭幾個KJ是800mv(a,b之間),隨后的是400mV。圖中可以看到設(shè)備在收到第三個chirp J(藍色短條)后馬上把1.5k電阻取消,導(dǎo)致chirp J的幅值下降到400mV。(17.78mA * (45Ohm
||45Ohm) = 17.78mA * 22.5Ohm = 400mV)
3.量測了一個chirp J的寬度:43.5us。
?
?
最后附上一張來自Don Anderson的USB System Architecture里的USB HS接口圖:





