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 )
由一些測試之後發現,使用 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
評論