USB的傳輸模式有4種,分別是控制傳輸(Control Transfer)、中斷傳輸(Interrupt Transfer)、批量傳輸或叫塊傳輸(Bulk Transfer)、實時傳輸或叫同步傳輸(Isochronous Transfer)。每種傳輸方式都有其特點,其特點如下:
端點(endpoint)
端點位於USB 外設內部,所有通信數據的來源或目的都基於這些端點,是一個可尋址的FIFO。
每個USB 外設有一個唯一的地址,可能包含最多十六個端點。主機通過發出器件地址和每次數據傳輸的端點號,向一個具體端點(FIFO)發送數據。
每個端點的地址為0 到15,一個端點地址對應一個方向。所以,端點2-IN 與端點2-OUT 完全不同。 每個器件有一個默認的雙向控制端點0,因此不存在端點0-IN 和端點0-OUT。
控制傳輸特點
USB協議引用控制傳輸有兩方面的原因,一方面,在USB系統中,設備在正常工作之前必須先進行配置,USB主機必須為設備分配總線上唯一的設備地址,並完成讀取設備的各種描述符,根據描述符的需求為設備的端點配置管道,分配帶寬等工作。另一方面,在設備的工作過程中,主機希望能及時地獲取設備的當狀態,或者設備出現問題時希望主機能及時做出補救措施,或者主機根據某些需求改變設備的當前配置等工作。這兩方面的目的對所有的USB設備都要求適用,為了達到此目的,從而引入了控制傳輸。所有設備都要求有支持控制傳輸的端點,一般端點號為0的為控制端點,USB協議將其定義設備的默認端點。控制傳輸有以下特點:
- 控制傳輸由以下幾個事務處理組成:
(1)建立聯系,把請求信息從主機傳到它的應用設備
(2)零個工多個數據傳送的事務處理,按照命令中指明的方向傳送數據
(3)狀態信息回傳
- 用於控制傳輸的設備的端點是雙向的,即可以接收數據包又可以發送數據包,相應的控制傳輸的管道也是雙向的
- 所有的設備必須有至少一個控制端點,且端點號為0
- 是可靠的數據傳輸,支持錯誤檢測和數據重傳,並盡可能滿足主機和設備的同步,因為一次控制傳輸需要三個或兩個階段
- 控制機制提供訪問設備描述符和命令操作的機制。USB協議為設備定義了標准的、設備類的或由設備生產商廠提供的命令(或叫請求),這些命令可操作設備的狀態。同時協議又定義了一套描述符,用於存放USB設備的各種信息,用於對設備進行配置,這些都是通過控制傳輸完成
- 系統沒有為控制傳輸指定訪問總線的頻率和帶寬,一般由USB協議軟件(即主機操作系統的USB控制程序)從全局優化角度來決定
中斷傳輸的特點
中斷傳輸為這樣一類設備設計的,它們只發送或接收少量的數據,而且並不經常進行數據傳輸,但它們有一個確定的傳輸周期,每隔一定的周期要求傳輸一次(並不是要求必須按固定周期要發送一次數據)。使用這種傳輸方式的設備有鍵盤、鼠標、游戲桿等。所有的USB設備在正常工作之前,系統都要對它們進行配置,當配置成功后設備才能正常的工作。因為中斷傳輸是一種周期性的傳輸方式,系統在對進行中斷傳輸的設備進行配置時,只要當前總線上用於周期性傳輸的空閑帶寬能夠容納此設備,設備就可以工作。中斷傳輸有如下特點:
- 中斷傳輸管道的最大服務周期(單位:毫秒)必須得到保證
- 是一種可靠的數據傳輸方式
- 由於錯誤而引起的數據重傳將在下一服務周期進行
- 數據的結尾也是通過與包的最大傳輸字節數比較來確定
- 設備中用於中斷傳輸的端點可用來為某些實時傳輸傳達其速率的反饋信息,例如音頻設備。當使用這種模式時,在每個數據包被發送到主機之后,不管握手包是否存在或類型如何,端點的DATA0/DATA1同步切換都應該改變,不過只有中斷傳輸的輸入端點支持種能力
批量傳輸的特點
USB協議提供批量傳輸類型是為了支持在某些不確定的時間內進行大量的數據通信,如打印機、掃描儀、硬盤、光盤等設備的數據傳輸都有這種特點。當一幀內的總線時間(帶寬)有空余時,USB主機就會將剩余的時間(帶寬)分配給等待使用總線的批量傳輸的USB設備,也就是說,批量傳輸可以利用任何可獲得的總線帶寬來進行數據傳輸。批量傳輸有以下特點:
- 可以動態地獲得總線帶寬
- 是一種可靠的數據傳輸方式,如果傳送失敗,可進行重發
- 有確認的數據傳輸,但不保證傳輸的帶寬和延遲
- 只有當獲得空閑的帶寬時,批量傳輸才會發生。如果USB總線有較多的空閑帶寬,則批量傳輸會較頻繁地進行,如果空閑帶寬較少,可能有很長時間沒有批量傳輸發生
實時傳輸(同步傳輸)的特點
實時傳輸是為支持某些對時間要求很高、數據量很大應用要求而提出的,使用這種傳輸類型的設備有麥克風、調制解調器、音頻設備等。為了完成實時傳輸,總線必須事先提供足夠的帶寬。實進傳輸有如下特點:
- 實時傳輸有數據有固定的時間延遲,但有固定的帶寬保證
- 是不一種不可靠的數據傳輸,充許有一定的誤碼率
- 只要數據供得上,就能保證管道上的恆定數據傳送速率
- 當被用來支持同步的源和目的時,使用這個傳輸類型的軟件並不要求是實時的
- 對於實時傳輸來說,實時性比正確性和數據重傳更重要。考慮到總線的錯誤率較低,協議就認為傳送一般都可以成功,即使有少量的數據出錯,也不會對應用軟件產生太大的影響(如音頻軟件)。實時傳輸的接收端可以判斷自己是否在一個幀內錯過了一些數據,而且能知道丟了多少數據。
- 在實時傳輸的過程中,因為沒有握手信號來指示中止,所以實時傳輸的端點從不中途停止。即使能夠查到錯誤,實時管道也不會因此停下,USB主機也仍繼續處理下一幀的數據。因為實時傳輸的協議不支持每次事務處理都進行握手,所以錯誤檢測的功能相對弱了許多
- 只有全速設備可以使用實時傳輸
- Android API 貌似暫時不支持,可用libusb實現。
參考鏈接:
1. USB四種傳輸模式特點