首先,要明白兩個觀點。第一,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通訊設定
最下層是pmac卡,上面連線acc 1p 4擴充套件板,這個板子擴充套件四個軸,輸出三種形式 1.模擬量,2脈衝量,3,pwm但是如果輸出pwm,必須外接硬體電路,即acc 8fs。pmac與上位機有三種通訊模式 乙太網 100mbps usb2.0 480mbps rs232序列介面 現在使用的是...
USB通訊協議
usb2.0最高傳輸速度可達480mb s。一 四種傳輸方式 a 控制傳輸方式 配置和控制主機到usb裝置的資料傳輸方式和型別。b 中斷傳輸方式 資料量小,需被及時處理,實時性好,主要用於鍵盤 滑鼠等。c 同步 等時傳輸方式 用於連線需要連續傳輸資料且對資料正確性要求不高,而對時間極為敏感的外部裝置...
usb裝置probe過程
本文將詳細講述2.6.22 下的乙個usb 裝置插上linux 系統的pc 後是如何一步一步調到我們的usb 裝置驅動的probe 函式的,我們知道我們的usb 驅動的probe 函式中的乙個引數是inte ce 結構,因此一般來說,乙個usb 裝置中的任何乙個介面都應該有對應的乙個驅動程式,當然也...