1. 程式人生 > >海量U盤傳輸協議的一點總結匯總

海量U盤傳輸協議的一點總結匯總

     驅動型別劃分:
  • USB (通用)   USB
  • HID (人機介面裝置 )    USB-HID
  • USB Mass Storage (大容量儲存裝置 )USB Mass Storage
     USB裝置分為5大類,即顯示器、通訊裝置、音訊裝置、人機輸入和海量儲存。  “主機∕裝置”資料包傳送順序
  • 主機應當在傳送相應的資料之前傳送 CBW 。
  • 裝置應當在收到 CBW 之後,傳送 CSW ( Command  Status  Wrapper )之前傳送資料。
1、U盤應屬於海量儲存類。 海量儲存裝置只支援一個介面,即資料介面,此介面有三個端點Bulk input ,Bulk output,中斷端點。
  •  Bulk-Only傳輸協議
當一個U盤插入主機以後,主機會要求USB裝置傳回它們的描述符,當主機得到這些描述符後,即完成了裝置的配置。識別出USB裝置是一個支援Bulk-Only傳輸協議的海量儲存裝置。這時應可進行Bulk-Only傳輸方式。在此方式下USB與裝置之間的資料傳輸都是通過Bulk-In和Bulk-Out來實現的。 在這種傳輸方式下,有三種類型資料在USB和裝置傳送,它們是命令塊包(CBW),命令執行狀態包(CSW)和普通資料包。CBW是主機發往裝置的命令。
  • CBW格式如下:

0~3其中dCBWSignature的值為43425355h,表示當前傳送的是一個CBW。 4~7     主要用來同步 CBW CSW
8~11DCBWDataTransferLength:表示這次CBW要傳送資料長度。 12     BmCBWFlags:表示本次CBW是讀資料還是寫資料。Bit7 代表傳輸方向, 0 表示主機輸出資料到裝置, 1 表示主機從 裝置輸入資料。 14     BBWCBLength:表示命令的長度。 CBWCB:表示本次命令內容。也即是SCSI命令。 由裝置執行的命令,由裝置解釋。 符合bInterfaceSubClass.中定義的命令規範。 當裝置從主機收到CBW塊以後,它會把SCSI命令從CBW中分離出來,然後根據要求執行,執行的結果又以CSW的形式發給主機 CBW是主機通過Bulk-Out端點向裝置傳送的命令塊包,在CBW中使用方向位和資料傳輸長度域指明期待的傳輸,CBW必須起始於包邊界,並且必須以31位元組的短包傳輸結束,相繼的資料包和CSW包必須開始於一個新的包邊界,所有的CBW包必須按低位元組在前的次序傳輸。
  • CSW的格式如下:
0~3     其中dCSWSignature的值為53425355h,表示當前傳送的是一個CSW。           4~7     DCSWTag:必須和CBW中dCBWTag一樣。 8~11     DCSWDataResidue:殘餘的資料量。 12     BCSWStatue:命令執行狀態,命令正確執行時,為0。 2、SCSI命令集 在Bulk-Only的命令塊包(CBW)中,有一段CBECB內容,它就是SCSI命令塊描述符。其內容如下:
Operation Code:是SCSI命令操作程式碼。 Logical Block Address:邏輯塊地址,對U盤而言應是扇區。前面已經講過:通用海量儲存裝置是一個基於塊/扇區儲存的裝置,因此在SCSI中要提供這個引數是很顯然的。 transfer length:為要傳送的扇區數 SCSI中直接存取型別的儲存介質的傳輸命令有很多,如: INQUIRY:其操作碼為12H Test Unit Ready:其操作碼為00H Format Unit:其操作碼為04H .......