1. 程式人生 > >USB Gadget Storage功能除錯

USB Gadget Storage功能除錯

    由於工作的需要,實現板卡通過Micro USB線與PC連線,作為PC的 外設儲存,PC拷貝資料到板卡中,或者把板卡中的資料通過USB線拷貝到PC端,實現資料的互動,板卡採用Linux作業系統,筆者採用的是AM335X 處理器平臺:

 

開發過程中修改檔案順序記錄如下:

     如果板卡作為PC的外設,通過USB線連線,那麼板卡處於USB Device工作模式,也即是USB Gadget工作模式,這種模式下常見的功能是PC識別板卡為U盤(USB Gadget Mass Storage Class),雙方交換資料,還有板卡通過PC上網(USB Gadget CDC),板卡端虛擬出一個網路裝置。本篇文章主要介紹板卡作為PC的外部儲存裝置。

 

1. Linux Kernel支援usb gadget 裝置中的MSC

MSG即 Mass Storage Class.

需要把該驅動配置為模組載入方式,因為在檔案系統中要靈活識別SD卡,或者NandFlash,或者Ramdisk為 PC的一個外設。

 

 

核心配置路徑:

make menuconfig -> Device  Driver-> usb  support -> usb gadget support 

注意: MiniUSB 口需要配置成USB  OTG模式,或著USB Device工作模式,一般在板級檔案進行USB工作模式的配置。

2  配置完成後,make uImage編譯核心,然後 make modules編譯模組,在 /driver/usb/gadget/下面形成驅動模組 g_mass_storage.ko檔案,把這個檔案拷貝到檔案系統的   “/lib/modules/3.2.0/kernel/drivers/usb/gadget/” 目錄下面, modprobe 命令會在lib/modules路徑下面搜尋要載入的驅動模組庫檔案。

 

3  PC識別板卡中的SD卡:

   在超級終端裡面執行:

   modprobe  g_mass_storage file=/dev/mmcblk0  removable=1  

  以上命令載入gadget msc驅動,傳遞SD卡為模組引數,使用micro usb 線連線板卡與PC,這時PC端識SD卡FAT32分割槽,可以拷貝檔案到SD卡中,拷貝完成後可以在開發板中檢視到SD卡中的新檔案。 使用超級終端在SD卡建立檔案,需要重新連線板卡與PC,PC才能識別SD卡新建立的檔案。

 

另外需要注意的是:從SD卡拷貝檔案到PC,速度是比較快的,能達到18M/S,而從PC拷貝檔案到SD卡速度很慢,大概是1.4M/s,最後拷貝的檔案經過MD5驗證,資料是安全的,未丟失資料。

Read:

b9cdf2cbec8014750fde35d9e32674f4-----origin sdcard file---OK--MAX SPEED=18M/S-

b9cdf2cbec8014750fde35d9e32674f4-----read to pc files

Write:

b9cdf2cbec8014750fde35d9e32674f4------pc file-OK-MAX SPEED=1.4M/S

b9cdf2cbec8014750fde35d9e32674f4------sdcard file

 

4  PC識別NandFlash:

  PC識別SD卡步驟較為單一,因為我們的SD卡具有FAT32分割槽,且為獨立的塊裝置,Windows系統很容易識別,而我們的NandFlash為UBI檔案系統,所以我們要在NandFlash上面建立一個虛擬的塊裝置,關鍵點是 /dev/loop 裝置節點,該裝置節點專門用來驅動模擬的塊裝置:

 mkdir  /usbfile

 dd  /usbfile

 mkdir files

 dd  if=/dev/zero  of=/usbfile/disk.img  bs=1M  count=20   //生成20M的二進位制映象檔案

 mkdosfs  disk.img //  使用mkdosfs工具把disk.img 檔案格式化成FAT32檔案系統;

 mount -t vfat -o sync  /usbfile/disk.img   /usbfile/files  //該命令會使用 /dev/loop裝置節點連線好disk.img 與 usbfile/files資料夾,這時如果我們mount一下會看到:

 

這時我們使用:  modprobe  g_mass_storage file=/usbfile/disk.img  removable=1  命令即可識別NandFlash的 disk.img 檔案為PC的一個外部儲存空間,PC可以拷貝檔案到該虛擬磁碟中;

cd   /usbfile/

./sync

ls /usbfile/files

可以看到PC拷貝到該虛擬磁碟中的檔案,實現了PC與NandFlash直接的資料傳遞。

下圖是檔案系統 /usbfile 資料夾下面的必要檔案:


 

需要注意的是:

 

PC拷貝檔案到虛擬磁碟後,使用超級終端檢視虛擬磁碟中的內容時需要執行 ./sync命令,sync是一個指令碼,該指令碼會重新掛載虛擬磁碟到 /usbfiles/files目錄,否則無法看到剛剛從PC拷貝的檔案。

如果使用超級終端在 /usbfiles/files下面建立檔案,需要重新插拔MicroUSB線,PC端才能看到虛擬磁碟中的新檔案;

PC拷貝到NandFlash的資料的速度也是比較慢的,而NandFlash的資料拷貝到PC的速度更好一些。

PC寫資料到NandFlash:1.8M/S

NandFlash 資料到PC的速度跟SD卡到PC的速度相當,17M/s.

 

5  PC識別板卡的記憶體disk

 dd if=/dev/zero of=/dev/shm/50M bs=1M count=50"

 insmod g_mass_storage.ko file=/dev/shm/50M

 

這時如果使用 micro usb線連線好PC,PC不能識別檔案系統格式,會提示格式化分割槽,選擇FAT32格式化方式即可。

由於是記憶體檔案系統,故系統重新啟動後,資料會丟失。