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