初學者 USB入門總結

初涉USB,初學者USB入門總結(3) 數據包闡述 (轉載)


轉自arthur05611的博客:http://blog.csdn.net/arthur05611/article/details/3941695

對於USB傳輸大體有個概念,下一步就來看看到底USB上傳的什麼東西,以什麼格式傳數據,先不涉及端點的概念。

各種總線的數據傳輸都是以固定的層次協議進行的,USB當然也不例外。所謂的層次也只是個抽象的概念罷了,就是表達一種依附關係,上層要依賴與底層,上層以底層爲基礎,上層只需要關心自己的東西就行了,如果你還不明白,那就繼續看,學習一個東西不可能一兩句話說的明白一個點,需要全面瞭解後才能清楚各個點。

要實現兩個機器(機器的範圍比較廣,可以是電腦,交換機,單片機)的通信總是要有一個載體纔可以,對於機器當然是電平高低爲載體,具體的說機器甲要告訴機器乙一件事情(比如說一條指令),那麼機器甲可以通過一根線(串行數據總線)連到機器乙的一個IO口上,甲發送一個個的高低電平,乙固定時間檢測自己的這個IO口,然後逐個記錄下放到自己的緩衝裏,這樣乙就收到甲送的數據了。上述就是一個簡單的數據鏈路層(計算機網絡裏這麼叫)的描述,這一層要保證的就是甲發的每一位數據,乙都可以正確及時的接受,並且對在傳輸過程中出錯的數據做出反應。其實比數據連路更底層的還有物理層,這就是真正的物理介質,對於機器就是電線了,數據就是電線上傳輸的電壓,USB是用的四線,兩個電源,兩個數據線。

這裏也打個比方,比如人與人進行交流,我們當然是通過說話了,物理層就是空氣和傳輸的聲波,數據鏈路層就是我們說的每一個字,物理層就是空氣,負責把我們說的話轉換成聲波傳給對方,數據鏈路層負責讓對方能正確的聽到每個字,如果聽的不清可以告訴對方重新說一遍。

經過上述的兩個底層,就可以保證每一位數據可以正確的傳到對方那裏去。下一步的工作當然是解析數據代表了什麼,一般來說,數據都是以一串數爲單位,一般稱爲一個包,機器間傳輸都是以一個包爲單位傳出,就像人們說話都是以一句話爲單位輸出一樣。每一個包包含有許多位數據,這些數據又分段表示不同的意義,如圖一,這是一個USB令牌階段的包,Sync是同步數據(相當於說話時先打個招呼,告訴對方要跟他說話了),PID是包標示(告訴對方這個包是幹什麼用的),ADDR是對方的地址(叫對方的名字),ENDP是用端點幾通訊(先不介紹這個),CRC5是校驗位(判斷這個包是否在傳輸中出錯),EOP是包結束。

                      圖一

USB的數據包又分爲三種,一個是令牌包,一個是數據包,另一個是握手包。每一次的USB通訊事務處理都是以令牌包開頭,告訴對方要跟誰說話,這句話是用來幹嘛的。如果要求有數據傳輸,則下一步就是數據包,另外如果要求對方要有反饋,則會發出握手包。令牌包又簡單的包括OUT,IN,STEP三種類型,OUT是用於主機告訴設備主機要向USB設備發送數據,IN是用於主機告訴設備要上傳數據,而STEUP是用於主機向USB設備發送配置信息,在枚舉過程中會用到。另外數據包和握手包的具體格式什麼的,可以參照詳細的協議。

可以看到在所以的通訊過程中,主機都是發起者,不管是主機發送數據到USB設備還是USB設備發送數據到主機,都必須收主機控制。圖二爲一次事務的過程

        令牌包   ——》               數據包     ——》        握手包

 

                                     圖二

這個過程可以這樣描述,甲和乙對話,甲是老闆,乙是職員。第一節已經講過了,乙面試就是枚舉,在這個過程中,甲多段的發送STEP令牌包給乙,乙收到後如果要反饋數據,就發數據包給甲,甲正確接收後,跟甲握握手,表示這次對話成功。

乙被正式錄取後,甲會分派任務(OUT),這時甲對乙說有任務給你(令牌階段),然後乙就開始聽,甲說你的任務就是記錄數據並且上報(這段話就是數據包),乙說好的(握手包)。

乙開始正式工作,並且記錄數據。過了一段時間,甲開始要求提交數據(IN),乙把數據報告給甲(數據階段),甲說好(握手成功)。這裏乙不能主動的去向老闆彙報,只能被動的幹活。

上面已經講到了USB主機和設備間數據傳輸的過程。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章