【阿福的隨筆】淺談 USB Bulk 深入淺出 (1) - USB 傳輸模式 及 何謂 USB bulk

1. USB 傳輸模式有哪些

USB 是即插即用使用差動信號的裝置介面,是以 端點 ( Endpoint ),做為傳輸裝置的輸出入端,透過不同的端點 ( Endpoint ) 和模式,來進行與裝置的溝通,可從傳輸方塊圖來觀看會比較好理解。從硬體的hot plug 通知 Host 端目前有裝置連接的行為開始,到 USB波形交握,再到USB 命令溝通,取得 裝置的描述符和之後如何傳輸規劃的設定,這一切的規範都是來自 USB org 的 USB spec  所定義的。

下載連結如下:

https://www.usb.org/document-library/usb-20-specification

今天要主要是要探討 USB Bulk 的傳輸架構,不過還是先從USB傳輸模式說明開始

USB 四種傳輸模式如下 :

  • 控制中斷傳輸 ( Control )
  • 中斷傳輸 ( Interrupt )
  • 批量資料傳輸 ( Bulk )
  • 同步傳輸 ( Isochronous )

後面會再詳細說明。 

1.1 方塊圖

傳輸方塊圖,如『圖1.1.1』( 註1 )

圖1.1.1( 註1 )

2. 傳輸模式說明

(1) 控制中斷傳輸 ( Control ) : 一開始的 USB 命令控制,如 configuration ( 組態命令 ) ,用來取得傳輸速度或是設定傳輸速度及取得描述符… 等等,且一定是使用 Endpoint 0。因為控制傳輸是 USB裝置一開始的命令,所以每個 USB裝置一定都會有 Endpoint 0。

Full speed 控制框架為 63bytes  (9 SYNC bytes, 9 PID bytes, 6 Endpoint + CRC bytes, 6 CRC bytes, 8 Setup data bytes, and a 7-byte interpacket delay (EOP, etc.))

而 High speed 框架為 173bytes


(2) 中斷傳輸 ( Interrupt ) :
使用中斷方式來做傳輸 ,需要設定間隔時間 ,在Full speed 最小間隔時間為 1ms ,high Speed 最小間隔時間為 125us,中斷傳輸通常是發生事件時才傳輸資料,或是固定在間隔時間上傳資料,例如 : 一般的 USB HID 裝置,USB鍵盤,滑鼠,或自定義的傳輸,雖然在中斷傳輸時,同一個端點可以同時設定 In 和 out ,但若是端點資源充足的話,還是建議分開來設定,若是 In  因為某種原因而卡住在 Still 時,因為同一個端點 busy 所以 out也一樣會卡住。( 但在程式上還是需要分時來傳 )

Full speed框架為 13 bytes

High speed 框架為 55 bytes



(3) 批量資料傳輸 ( Bulk ) : 需要大量資料傳輸時使用,且一個端點只能 bulk in 或是 bulk out,批量資料傳輸的裝置有多,例如 : USBCDC ,USB mass storage,ADB,印表機 … 等等,一般自定義的 Bulk 是需要 driver 的,或是強制指定使用 windows 內建的 driver ,但強制指定的方式,可能只能用於 底層 driver 呼叫,例如 BUS hound ,若是使用 winUSB ( winUSB.sys or winUSB.dll ) 來當 base 的 driver 來說,會碰到 Windows API 無法指定使用的問題。這時候若是不想另外找 driver 來使用的話,可以先將 USB Bulk裝置 ,改寫成 USB CDC ,USB mass storage 或是 ADB 已經有人寫好 driver 的USB 描述符宣告方式,但是這樣就會受限於目前使用的 driver 了。若是 driver沒有數位簽章的認證的話,可另外找有包含數位簽章的 driver 或是先停用數位簽章來測試 USB bulk 裝置是否能正常傳輸。

Full speed框架為 13 bytes

High speed 框架為 55 bytes

(4) 同步傳輸 ( Isochronous ) : 時間同步的資料傳輸,需要及時資料更新時使用,規劃上可大量傳輸,但是資料不驗證,若錯誤也不修正,資料丟失也不重送,也沒有 CRC check,但是若是接收端不允許掉資料的話,建議就不要使用此方式傳輸,一般是使用在有一點錯誤也不影響的影像與聲音傳輸,例如 : UVC ,UAC規範的裝置,常見於 USB Camera,喇叭,麥克風或耳機…等。

Full speed框架為 9 bytes

High speed 框架為 38 bytes

3 參考資料

註1 : 作者: USB ORG ( Compaq ,Hewlett-Packard ,Intel ,Lucent,Microsoft,NEC,Philips );

出處 : https://www.usb.org/document-library/usb-20-specification

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論