咱們知道USB2.0向下兼容USB1.x,即高速2.0的hub能支持全部的速度類型的設備,而USB1.x的hub不能支持高速設備(High Speed Device)。所以,若是高速設備掛到USB1.x的hub上,那該設備只能工做在全速模式下。不論是hub仍是設備(device),對於速度的區分是很是重要的,不然,後續的通訊根本沒法進行。3d
根據規範,全速(Full Speed)和低速(Low Speed)很好區分,由於在設備端有一個1.5k的上拉電阻,當設備插入hub或上電(固定線纜的USB設備)時,有上拉電阻的那根數據線就會被拉高,hub根據D+/D-上的電平判斷所掛載的是全速設備仍是低速設備。以下兩圖:blog
圖1 全速USB設備的鏈接接口
圖2 低速USB設備的鏈接it
USB全速/低速識別至關簡單,但USB2.0,USB1.x就一對數據線,不能像全速/低速那樣僅依靠數據線上拉電阻位置就能識別USB第三種速度:高速。所以對於高速設備的識別就顯得稍微複雜些。io
高速設備初始是以一個全速設備的身份出現的,即和全速設備同樣,D+線上有一個1.5k的上拉電阻。USB2.0的hub把它看成一個全速設備,以後,hub和設備經過一系列握手信號確認雙方的身份。在這裏對速度的檢測是雙向的,好比高速的hub須要檢測所掛上來的設備是高速、全速仍是低速,高速的設備須要檢測所連上的hub是USB2.0的仍是1.x的,若是是前者,就進行一系列動做切到高速模式工做,若是是後者,就以全速模式工做。終端
下圖展現了一個高速設備連到USB2.0 hub上的情形:請求
圖3 高速USB的協商過程im
hub檢測到有設備插入/上電時,向主機通報,主機發送Set_Port_Feature請求讓hub復位新插入的設備。設備復位操做是hub經過驅動數據線到復位狀態SE0(Single-ended 0,即D+和D-全爲低電平),並持續至少10ms。d3
高速設備看到復位信號後,經過內部的電流源向D-線持續灌大小爲17.78mA電流。由於此時高速設備的1.5k上拉電阻還未撤銷,在hub端,全速/低速驅動器造成一個阻抗爲45歐姆(Ohm)的終端電阻,2電阻並聯後還是45歐姆左右的阻抗,因此在hub端看到一個約800mV的電壓(45歐姆*17.78mA),這就是Chirp K信號。Chirp K信號的持續時間是1ms~7ms。通信
在hub端,雖然下達了復位信號,並一直驅動着SE0,但USB2.0的高速接收器一直在檢測Chirp K信號,若是沒有Chirp K信號看到,就繼續復位操做,直到復位結束,以後就在全速模式下操做。若是隻是一個全速的hub,不支持高速操做,那麼該hub不理會設備發送的Chirp K信號,以後設備也不會切換到高速模式。
設備發送的Chirp K信號結束後100us內,hub必須開始回覆一連串的KJKJKJ….序列,向設備代表這是一個USB2.0的hub。這裏的KJ序列是連續的,中間不能間斷,並且每一個K或J的持續時間在40us60us之間。KJ序列中止後的100500us內結束復位操做。hub發送Chirp KJ序列的方式和設備同樣,經過電流源向差分數據線交替灌17.78mA的電流實現。
再回到設備端來。設備檢測到6個hub發出的Chirp信號後(3對KJ序列),它必須在500us內切換到高速模式。切換動做有:
執行1,2兩步後,USB信號線上看到的現象就發生變化了:hub發送出來的Chirp KJ序列幅值降到了原先的一半,400mV。這是由於設備端掛載新的終端電阻後,配上原先hub端的終端電阻,並聯後的阻抗是22.5歐姆。400mV就是由17.78mA*22.5Ohm得來。之後高速操做的信號幅值就是400mV而不像全速/低速那樣的3V。
至此,高速設備與USB2.0 hub握手完畢,進行後續的480Mbps高速信號通訊。
最後附上幾幅實際USB高速識別的示波器抓圖,圖中藍色信號是D+,黃色信號是D-。
圖5 示波器截取的高速USB協商過程2
圖6 示波器截取的高速USB協商過程3
最後附上一張來自Don Anderson的USB System Architecture裏的USB HS接口圖: