日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

usb如何枚举

發布時間:2025/3/21 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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如何枚举的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。