USB控制傳輸過程 詳細解析

2021-05-22 18:35:02 字數 1946 閱讀 2026

首先,要明白兩個觀點。第一,usb匯流排上所有的事務(資料流傳輸)都是由usb host主動發起,而usb裝置永遠永遠都是只是被動地接收然後處理usb host發來的各種各樣的命令(要求)。第二,中斷是usb host和usb裝置之間的信令員,usb host所有的要求都是通過這個信令員即中斷來通知usb裝置。

. 我們可以將整個usb資料通訊過程看成是由乙個乙個的資料報構成,而這些資料報又分很多類,比如:令牌包,資料報,握手包,幀起始包。令牌包又分in包,out包,setup包。有一點我覺得對於剛開始接觸usb的人來說,一定要弄清楚這麼多包,哪些是由硬體自動來處理,哪些是要由驅動程式去處理的,如果這點沒有弄清楚,寫或者看驅動**時往往會摸不著頭腦.

下面通過分析usb host讀取usb裝置描述符整個過程來說明這個問題:

1.上圖中粉紅色的packet#表示是主機發出,裝置接收包;淡青色的packet#表示是裝置發出,主機接收包。如果區分不了這兩種顏色,可以根據箭頭的方向來區分,「->」這個表示是主機發出,裝置接收的包;」

2.圖中灰色的部分表示,這些包在寫驅動的時候是不太需要關心的地方,但是要了解有這麼乙個過程,這些灰色的部分都是由硬體自動處理.

3.那裝置驅動要做的是什麼呢?就是根據裝置產生的中斷來讀取、解析、回應相應的資料報,注意上圖中土黃色和淡藍色兩個資料報。

4. 下面詳細分析整個過程,以及裝置驅動該幹些什麼?

1) 在控制傳輸階段,任何乙個傳輸都是由setup包發起(packet#96)

2) 當usb裝置接收到這個包,並識別出這是乙個setup包時,usb裝置會產生乙個setup中斷,有的稱之為控制端點/端點0中斷,以便通知mcu主機有任務下來啦,準備開始做事啦,這個動作都是由硬體自動完成

3) 緊接著setup包的是,usb主機下達給usb裝置具體是什麼任務了,我們可以認為這個過程幾乎是和setup中斷同時完成. (packet#97)

4) 既然發生了setup中斷,usb裝置驅動就可以認為主機有命令下達,usb裝置收到主機下達命令後,由usb裝置驅動傳送乙個setup應答包,表示說「長官,命令已經收到」 (packet#98)

5) 裝置已經接收到了主機的命令,那麼usb裝置驅動現在就要解析這個命令,來得知usb主機到底下達的是什麼命令,在這裡通過解析黃色資料 」 80 06 00 01 00 00 40 00」可以得知該命令的意思是主機要求裝置傳送裝置描述符,具體解析過程就是協議規範的內容了…

6) 既然usb裝置已經成功得知了usb主機的命令是要傳送裝置描述符,那usb裝置就趕緊去查詢這些裝置描述符在**?

7) 那驅動已經找到了裝置描述符了,驅動是不是該把這個裝置描述符發給usb主機呢?答案是no,no,no,原因就是開篇就提到的,所有的傳輸都是有主機主動發起,裝置被動響應。現在雖然usb主機通知裝置主機要裝置描述符資訊,但是主機目前並沒有要求主機將這些資訊發回去,所以,裝置就算已經找到了描述符,也不能主動給主機發這些資訊。打乙個不太恰當的比喻,就好比一場足球比賽,教練讓你」活動活動,準備上場」,現在你準備活動已經做完了,那你可不能立馬就衝到場上去踢球,即使你活動完了,你還得等待教練的下一步指示,因為教練還得安排決定讓誰下場,什麼時候下場比較合適…. 等到教練說」上場吧」,那你就可以上場了… 好像比較扯了….哈哈

8) usb主機下乙個in包通知usb裝置回應剛才的命令,相當於教練喊」上場」,當usb裝置收到這個in包時,產生乙個in中斷來通知mcu,那這時表示裝置收到了」上場」的命令了。(packet#103)

9) 這時,usb裝置驅動把找到的裝置描述符傳送給usb主機。(packet#104)

10) 主機收到裝置回應的裝置描述符後,給裝置發乙個握手包,表示已經收到裝置的回應包了。(packet#105) 11) 接下來,usb主機會傳送乙個0位元組的資料報來作為狀態響應,並且裝置發乙個握手包來結束整個過程,這是由硬體自動完成. (packet#108/109/110)

由此可見,在控制傳輸過程中,usb裝置驅動比較關心的應該是4,5,6,8,9這些步驟,其他的差不多都由硬體自動完成了。

今天就寫了這麼多,有時間再寫.. :)

socket傳輸過程

連線過程 根據連線啟動的方式以及本地 套接字要連線的目標,套接字之間的連線過程可以分為三個步驟 伺服器監聽,客戶端請求,連線確認。1 伺服器監聽 是伺服器端套接字並不定位具體的客戶端套接字,而是處於等待連線的狀態,實時監控網路狀態。2 客戶端請求 是指由客戶端的套接字提出連線請求,要連線的目標是伺服...

上行傳輸過程

1.3 上行傳輸 上行傳輸 uplink 就是訊號從ue傳送,基站負責接收。1.隨機接入過程中,ue在上行需要傳送preamble和msg3,以便與小區建立連線。2.與下行類似,enodeb 基站在進行上行排程時,需要進行上行通道估計,這是通過對ue傳送的srs進行測量的到的。3.對於上行傳輸,只有...

socket傳輸過程

連線過程 根據連線啟動的方式以及本地套接字要連線的目標,套接字之間的連線過程可以分為三個步驟 伺服器監聽,客戶端請求,連線確認。1 伺服器監聽 是伺服器端套接字並不定位具體的客戶端套接字,而是處於等待連線的狀態,實時監控網路狀態。2 客戶端請求 是指由客戶端的套接字提出連線請求,要連線的目標是伺服器...