1 USB Bulk 是什麼
USB 是即插即用使用差動信號的裝置介面,是以 端點 ( Endpoint ),做為傳輸裝置的輸出入端,透過不同的端點 ( Endpoint ) 和模式,來進行與裝置的溝通,USB Bulk 就是USB 四種傳輸模式之一的批量資料傳輸 ( Bulk ) 的端點傳輸
1.1 傳輸方塊圖
USB 傳輸方塊圖,如『圖1.1.1』( 註1 ), 其中 IRP是 I/O Request Packet ,由圖所示Bulk 傳輸是使用 1個或多個的 IN / OUT 資料傳輸 (Transaction ),一個 USB 的資料傳輸通常會有 3 個階段 Token , Data , handshake的封包
2 USB Bulk 傳輸的優缺點總結
因為目前沒有寫 driver 的資源 ,所以自已寫或請人寫 driver 的這個方式,目前是不考慮的, 所以只能考慮USB to com port 的 USBCDC ,或是需要 File system 的 mass storage ,一般稱為USB 隨身碟 ( U 盤 )
使用 USB Mass storage的缺點是 : 因為不用寫 driver ,是直接使用 windows driver,所以整體的行為會被 windows driver 受限,如傳輸的速度,資料錯誤重送的機制,還會受到系統整體是否忙碌,而影響到傳輸,反正會影響到一般 USB 硬碟傳輸行為的,在模擬的 USB Mass storage 都會遇到。
若是可以使用 Microsoft OS descriptor強制指定 driver 就可以跳過需要自行撰寫的過程,也是另一種特別的方法,但此方式,是裝置第一次插上電腦時,會將相關的 info 註冊,若是第一次沒有成功,則此裝置會在同一台電腦上無法使用,除非將相關的註冊表清除
最後做出來的Bulk傳輸,有兩個大問題 :
(1) 就是有時候 電腦端 會直接傳送空的 package,雖然是無效且會再重傳資料,但程式上就必須要多了一些判斷和整合的機制才行,但是有機會是一開始的檔頭就是失敗的 ( 檔頭也有可能一開始傳送失敗,之後再重傳 ),若是使用 MSD 他是存到相對的 Flash 位置,所以必須等到所有封包含重傳完的封包都存到相對的 Flash 時,整圖檔封包資料才會是完整的,這時抓圖當然沒問題,但若是一邊傳輸圖檔,又一邊要點圖的話,就會有很大的問題,若是有很大的 RAM ,或是真的存到 Flash 內,當然可以全部傳輸完成之後再傳圖到 Panel 端,可是若是真的先存到 Flash , Flash 的擦寫速度也要算在傳輸的時間內,但若是沒檔頭,圖檔的偏移量就不知道,就要將所有的資料先存下來,最後才把圖檔的 Row data 分離出來,做傳輸至 Panel 或是轉換格式後再傳輸至 Panel,其中轉換格式或是搬移大量記憶體都會花費 MCU 大量的處理時間,這點需要注意(2) 在封包和封包之間的間隔時間,雖然 Firmware 可設定最小間隔時間,但主要的傳輸端是 電腦端的 AP 程式和 driver 控制的,所以說一開始 AP 程式和 driver 未借入或是沒設定 timeout 值時,會發現封包的間隔時間非常的大,與 AP 程式人員討論之後,使用背景模式來一直連續傳送圖片,效果也是只有好一些,主要還是會受限於 windows driver 這裡。但若是 API 程式,設定的間隔時間比實際上封包傳輸的時間還短時,若傳輸的檔名都是同一個,而相對位置也相同的話,有可能封包會被後來的蓋過去也不一定。
使用 NXP RT500 系列的 EVK 做的 USB Bulk 來傳輸圖片,並且將圖片資料直接點 RGB888/RGB565 的Panel,實驗中發現若是把 PC 端 USB 背景傳輸間隔時間放的很小,則 MCU 端有機會造成資料來不及收完就被複蓋的現象,另外會發現到, 24bits 的處理,要比 16 bits 處理上,還要多出 3/2 左右的時間,但畫質上是有差一些,但為了速度考量最後還是使用 RGB565, 並且當初有嘗試了一下格式轉換,發現轉換的時間,還遠大於傳輸的時間,所以格式轉換的部份不太適合放在 MCU 做了,最好要格式轉換的話是放在 PC 端執行好後再將要點圖的 Row data 傳給 MCU
後續會在博文視頻區內,放上請 WPI 同事幫忙撰寫 for Window 的 GUI ,來做一個 Bulk 傳輸,會在視頻中看到若是 USB 傳輸間隔時間設的太小的話,有時候會出現來不及傳輸完圖檔的現象
3 參考資料
註1 : 作者: USB ORG ( Compaq ,Hewlett-Packard ,Intel ,Lucent,Microsoft,NEC,Philips );
出處 : https://www.usb.org/document-library/usb-20-specification
評論