usb傳輸小節

2021-06-21 13:35:37 字數 1996 閱讀 4828

首先,要明白兩個觀點。第一,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這些步驟,其他的差不多都由硬體自動完成了。

USB控制傳輸

控制傳輸 控制傳輸是 usb傳輸中最重要的傳輸,只有正確地執行完控制傳輸,才能進一步地執行其他的傳輸型別。這種傳輸是用來提供介於主機與設各之間的配置 命令或狀態的通訊協議。控制傳輸能夠使能主機去讀取相關設各的資訊,去設定設各位址,以及選擇配置與其他的設定等。此外,控制傳輸也能夠送出自定義的要求,以針...

USB控制傳輸

1 usb 端點解釋 2 usb驅動之 端點 endpoint 3 usb驅動 描述符 urb 管道 控制傳輸 控制傳輸是 usb傳輸中最重要的傳輸,只有正確地執行完控制傳輸,才能進一步地執行其他的傳輸型別。這種傳輸是用來提供介於主機與設各之間的配置 命令或狀態的通訊協議。控制傳輸能夠使能主機去讀取...

USB控制傳輸

乙個usb的控制傳輸如圖所示 乙個usb的控制傳輸分為2個或3個階段,setup stage,data stage 視情況而定 status stage。一 首先是setup stage,usb host總是先發起第乙個packet 1.host先傳送乙個setup包 2.然後host傳送乙個dat...