【阿福的隨筆】淺談 USB Bulk 深入淺出 (3) - USB Bulk 裝置傳輸的注意事項

1 USB Bulk 是什麼

USB 是即插即用使用差動信號的裝置介面,是以 端點 ( Endpoint ),做為傳輸裝置的輸出入端,透過不同的端點 ( Endpoint ) 和模式,來進行與裝置的溝通,USB Bulk 就是USB 四種傳輸模式之一的批量資料傳輸 ( Bulk ) 的端點傳輸 ( 註1 )

2 USB Bulk 裝置傳輸的注意事項

如果不想自已寫 Windows 的 driver ,可以使用 目前 Windows 已有內建 driver 的 BULK 裝置,例如 USB to com port 的  USBCDC ,或是需要 File system 的 Mass storage ,一般稱為USB 隨身碟 ( U 盤 )

使用 USB Mass storage ,則 Device  就會形成一個虛擬的 USB Disk ,在傳輸檔案的過程,就是從電腦端利用此 USB Disk 與 Device 的 USB Endpoint 來做 Bulk 傳輸使用,但是 此種方式有可能傳送或接收時,資料來不及給或 check sum 不對時,會將此次 sector 在傳完全部資料後再重新傳送一次,且會在最後的 FAT 表資料之前。可以從 每次的 offset 來做判斷,是否是重複送的資料,如果是要以後來的資料為準。

若是沒有重傳的流程來說,是先傳送  FAT 表內容,檔頭,檔案資料,檔尾,再傳送 FAT 表內容,其中 檔頭,檔案資料,檔尾 的偏移值是連續的。 

若是以有重傳的流程來說,是先傳送  FAT 表內容,檔頭,檔案資料,檔尾,再重傳所需的資料 ( 可能是檔頭,檔案資料,檔尾 ) ,再傳送 FAT表內容,從 debug message 來看 ,由偏移值 0x0b 的檔頭開始有認到 BM 開頭的 BMP file至偏移值 0xab 的最後資料傳完之後,接著再將資料有問題 ( 都傳 0 ,來不及給資料 ),或是 電腦認為沒有傳遞成功 ,會再一次重新傳輸,從例子上偏移值是 0x4b ,0x5b,0x6b,0x7b 有 4 個段落都需要重新傳輸。 ( 如圖 2.1~2.2 )

 
圖2.1
 
圖2.2


由一些測試之後發現,使用 USB Mass storage 的缺點是 : 因為不用寫 driver ,是直接使用 windows driver,所以整體的行為會被 Windows driver 受限,如傳輸的速度,資料錯誤重送的機制,還會受到系統整體是否忙碌,而影響到傳輸,反正會影響到一般 USB 硬碟傳輸行為的,在模擬的 USB Mass storage 都會遇到。

3 參考資料

註1 : 作者: USB ORG ( Compaq ,Hewlett-Packard ,Intel ,Lucent,Microsoft,NEC,Philips );
  出處 :
https://www.usb.org/document-library/usb-20-specification

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

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

評論