USB協議基本知識

USB協議基本知識

USB 基本知識 
USB的重要關鍵概念: 
1、 端點:位於USB設備或主機上的一個數據緩衝區,用來存放和發送USB的各種數據,每一個端點都有惟一的確定地址,有不同的傳輸特性(如輸入端點、輸出端點、配置端點、批量傳輸端點) 
2、 幀:時間概念,在USB中,一幀就是1MS,它是一個獨立的單元,包含了一系列總線動作,USB將1幀分爲好幾份,每一份中是一個USB的傳輸動作。 
3、upstream、downstream(上行、下行)設備到主機爲上行,主機到設備爲下行


下面以一問一答的形式開始學習吧:

問題一:USB的傳輸線結構是如何的呢?

答案一:一條USB的傳輸線分別由地線、電源線、D+、D-四條線構成,D+和D-是差分輸入線,它使用的是3.3V的電壓(注意哦,與CMOS的 5V電平不同),而電源線和地線可向設備提供5V電壓,最大電流爲500MA

問題二:數據是如何在USB傳輸線裏面傳送的

答案二:數據在USB線裏傳送是由低位到高位發送的。

問題三:USB的編碼方案?

答案三:USB採用不歸零取反來傳輸數據,當傳輸線上的差分數據輸入0時就取反,輸入1時就保持原值,爲了確保信號發送的準確性,當在USB總線上發送一個包時,傳輸設備就要進行位插入***作(即在數據流中每連續6個1後就插入一個0),從而強迫NRZI碼發生變化。這個瞭解就行了,這些是由專門硬件處理的。

問題四:USB的數據格式是怎麼樣的呢?

答案四:和其他的一樣,USB數據是由二進制數字串構成的,首先數字串構成域(有七種),域再構成包,包再構成事務(IN、OUT、SETUP),事務最後構成傳輸(中斷傳輸、並行傳輸、批量傳輸和控制傳輸)。下面簡單介紹一下域、包、事務、傳輸,請注意他們之間的關係。

(一)域:是USB數據最小的單位,由若干位組成(至於是多少位由具體的域決定),域可分爲七個類型:

1、同步域(SYNC),八位,值固定爲0000 0001,用於本地時鐘與輸入同步

2、標識域(PID),由四位標識符+四位標識符反碼構成,表明包的類型和格式,這是一個很重要的部分,這裏可以計算出,USB的標識碼有16種,具體分類請看問題五。

3、地址域(ADDR):七位地址,代表了設備在主機上的地址,地址000 0000被命名爲零地址,是任何一個設備第一次連接到主機時,在被主機配置、枚舉前的默認地址,由此可以知道爲什麼一個USB主機只能接127個設備的原因。

4、端點域(ENDP),四位,由此可知一個USB設備有的端點數量最大爲16個。

5、幀號域(FRAM),11位,每一個幀都有一個特定的幀號,幀號域最大容量0x800,對於同步傳輸有重要意義(同步傳輸爲四種傳輸類型之一,請看下面)。

6、數據域(DATA):長度爲0~1023字節,在不同的傳輸類型中,數據域的長度各不相同,但必須爲整數個字節的長度

7、校驗域(CRC):對令牌包和數據包(對於包的分類請看下面)中非PID域進行校驗的一種方法,CRC校驗在通訊中應用很泛,是一種很好的校驗方法,至於具體的校驗方法這裏就不多說,請查閱相關資料,只須注意CRC碼的除法是模2運算,不同於10進制中的除法。

(二)包:由域構成的包有四種類型,分別是令牌包、數據包、握手包和特殊包,前面三種是重要的包,不同的包的域結構不同,介紹如下

1、令牌包:可分爲輸入包、輸出包、設置包和幀起始包(注意這裏的輸入包是用於設置輸入命令的,輸出包是用來設置輸出命令的,而不是放據數的)

其中輸入包、輸出包和設置包的格式都是一樣的:

SYNC+PID+ADDR+ENDP+CRC5(五位的校驗碼)

幀起始包的格式:

SYNC+PID+11位FRAM+CRC5(五位的校驗碼)

2、數據包:分爲DATA0包和DATA1包,當USB發送數據的時候,當一次發送的數據長度大於相應端點的容量時,就需要把數據包分爲好幾個包,分批發送,DATA0包和DATA1包交替發送,即如果第一個數據包是 DATA0,那第二個數據包就是DATA1。但也有例外情況,在同步傳輸中(四類傳輸類型中之一),所有的數據包都是爲DATA0,格式如下:

SYNC+PID+0~1023字節+CRC16

3、握手包:結構最爲簡單的包,格式如下

SYNC+PID

 

USB的四種傳輸類型:

1.  控制傳輸:

      控制傳輸是一種可靠的雙向傳輸,一次控制傳輸可分爲三個階段。第一階段爲從HOST到Device的SETUP事務傳輸,這個階段指定了此次控制傳輸的請求類型;

      第二階段爲數據階段,也有些請求沒有數據階段;第三階段爲狀態階段,通過一次IN/OUT 傳輸表明請求是否成功完成。

      控制傳輸通過控制管道在應用軟件和 Device 的控制端點之間進行,控制傳輸過程中傳輸的數據是有格式定義的,USB 設備或主機可根據格式定義解析獲得的數據含義。

      其他三種傳輸類型都沒有格式定義。

      控制傳輸對於最大包長度有固定的要求。對於高速設備該值爲 64Byte;對於低速設備該值爲 8;全速設備可以是 8或 16或 32或 64。

      最大包長度 表徵了一個端點單次接收/發送數據的能力,實際上反應的是該端點對應的Buffer 的大小。Buffer 越大,單次可接收/發送的數據包越大,反之亦反。

      當通過一個端點進行數據傳輸時,  若數據的大小超過該端點的最大包長度時,需要將數據分成若干個數據包傳輸,並且要求除最後一個包外,所有的包長度均等於該最大包長度。

      這也就是說如果一個端點收到/發送了一個長度小於最大包長度的包,即意味着數據傳輸結束。

      控制傳輸在訪問總線時也受到一些限制,如:

        a. 高速端點的控制傳輸不能佔用超過 20%的微幀,全速和低速的則不能超過 10%。 
        b. 在一幀內如果有多餘的未用時間,並且沒有同步和中斷傳輸,可以用來進行控制傳輸。

2.  中斷傳輸:

      中斷傳輸是一種輪詢的傳輸方式,是一種單向的傳輸,HOST通過固定的間隔對中斷端點進行查詢,若有數據傳輸或可以接收數據則返回數據或發送數據,否則返回NAK,表示尚未準備好。

      中斷傳輸的延遲有保證,但並非實時傳輸,它是一種延遲有限的可靠傳輸,支持錯誤重傳。 
      對於高速/全速/低速端點,最大包長度分別可以達到1024/64/8 Bytes。

      高速中斷傳輸不得佔用超過 80%的微幀時間,全速和低速不得超過 90%。

      中斷端點的輪詢間隔由在端點描述符中定義,全速端點的輪詢間隔可以是1~255mS,低速端點爲10~255mS,高速端點爲(2interval-1)*125uS,其中 interval取 1到 16之間的值。

      除高速高帶寬中斷端點外,一個微幀內僅允許一次中斷事務傳輸,高速高帶寬端點最多可以在一個微幀內進行三次中斷事務傳輸,傳輸高達 3072 字節的數據。

      所謂單向傳輸,並不是說該傳輸只支持一個方向的傳輸,而是指在某個端點上該傳輸僅支持一個方向,或輸出,或輸入。如果需要在兩個方向上進行某種單向傳輸,需要佔用兩個端點,

      分別配置成不同的方向,可以擁有相同的端點編號。

3.  批量傳輸:

      批量傳輸是一種可靠的單向傳輸,但延遲沒有保證,它儘量利用可以利用的帶寬來完成傳輸,適合數據量比較大的傳輸。

      低速 USB 設備不支持批量傳輸,高速批量端點的最大包長度爲 512,全速批量端點的最大包長度可以爲 8、16、32、64。

      批量傳輸在訪問 USB 總線時,相對其他傳輸類型具有最低的優先級,USB HOST 總是優先安排其他類型的傳輸,當總線帶寬有富餘時才安排批量傳輸。

      高速的批量端點必須支持PING 操作,向主機報告端點的狀態,NYET 表示否定應答,沒有準備好接收下一個數據包,ACK 表示肯定應答,已經準備好接收下一個數據包。

4.  同步傳輸:

      同步傳輸是一種實時的、不可靠的傳輸,不支持錯誤重發機制。只有高速和全速端點支持同步傳輸,高速同步端點的最大包長度爲 1024,低速的爲 1023。

      除高速高帶寬同步端點外,一個微幀內僅允許一次同步事務傳輸,高速高帶寬端點最多可以在一個微幀內進行三次同步事務傳輸,傳輸高達 3072 字節的數據。

      全速同步傳輸不得佔用超過 80%的幀時間,高速同步傳輸不得佔用超過 90%的微幀時間。 同步端點的訪問也和中斷端點一樣,有固定的時間間隔限制。

      在主機控制器和 USB  HUB 之間還有另外一種傳輸——分離傳輸(Split  Transaction)它僅在主機控制器和 HUB之間執行,通過分離傳輸,可以允許全速/低速設備連接到高速主機。

      分離傳輸對於USB 設備來說是透明的、不可見的。

      分離傳輸:顧名思義就是把一次完整的事務傳輸分成兩個事務傳輸來完成。其出發點是高速傳輸和全速/低速傳輸的速度不相等,如果使用一次完整的事務來傳輸,勢必會造成比較長的等待時間,

      從而降低了高速 USB 總線的利用率。通過將一次傳輸分成兩此,將令牌(和數據)的傳輸與響應數據(和握手)的傳輸分開,這樣就可以在中間插入其他高速傳輸,從而提高總線的利用率。


總結:USB的最小單元是“域”,由“域”構成了“包”,在由“包”構成了“事務”,最後由“事務”構成了“傳輸”,在應用層面,我們看到的只是傳輸,所以USB協議棧就需要完成傳輸以下的所有事情。這對標準的USB協議棧提出了最基本的要求。

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