之前我有介紹關於 NXP LPC11U14 EV Board 中,它是一棵 帶USB 的ARM Cortex M0。
在我進入實際驗證 8 bits 與32 bits MCU 在於 USB 系統應用端之前,
我們先整理一下我們在這一些原廠所提供的USB 範例程式中,
所常見到的USB Class 的種類。
---
我想第一順位就是 USBHID 。您當然不會是拿來做鍵盤滑鼠的,因為我想做鍵盤滑鼠,
因為不必用到32 bits ARM 來玩吧。USB HID 有個基本好處的地方就是他基本上有提供
一個 Interrupt Pipe ,所以可以拿來主動傳輸資料給Host ...這是一些基本系統應用基礎,
因為USB 基本上就是主從架構與觀念,USB Device 都是屬於被動狀態,雖然當USB
Device 插入USB HOST 時,主機會知道,但隨後如果主機沒有主動發出Token 的話,
基本上,USB Device 都是處於Stand-by 狀態。但是如果您是USB HID 的話,
因為他基本上有所謂的 Interrupt Pipe 宣告,所以它是可以隨時通知主機的。
這一點可以讓我們在系統應用上可以主動通知主機...當然啊~必要時,您也可以寫一支
Host 端的常駐程式來處理。--- 譬如在系統應用上我們可以拿來量測或偵測東西。
再直接傳輸告知PC Host 端。
---
第二種就是USB MSC (Mass storage Class)...這是讓您的USB 可以模擬成一棵
隨身碟,也就是一棵硬碟啦。用最簡單的檔案複製或讀寫方式來存取。...
他的好處就是連PC HOST 端的上層應用軟體也不用寫了,直接用檔案管理員來玩。
...只不過,因為侷限於USB Device 端本身的記憶體容量有限,所以您所能宣告的
硬碟容量有限的。---但這不重點,因為您不會真的拿這麼一棵ARM MCU當儲存裝置的!
另外,使用USB MSC 有個好處,就是他基本上是一個 DOS File System...所以,
如果您的USB Device 韌體支援DOS File system 的話,您也就更不用管USB的傳輸
內容,也不用管什麼USB 命令啊,或什麼 Class Command 等等,而且用 32 bits
的ARM 來寫一個 DOS File System 更是如魚得水,駕輕就熟...只不過,要去那邊
找一個DOS File System ?!我想一般MCU 原廠應該都不會主動提供範例,
您自個兒可能要在茫茫網路世界裡搜尋吧,要注意的是:DOS File System 是有分
FAT16 及 FAT32 的...好像一般講FAT 的,都已經是指32 bits 的!...另外,
您也可以依您的系統應用需求,可以只支援 Read Only...因為畢竟一個完整的
Read/Write DOS File System 的韌體程式也不小啊!幾十K 跑不掉吧!
-----
第三種就是 USB CDC (Communication Device Class)這就是我們一般所熟稱的
Virtual COM ,就是常見的USB 轉 RS232 啦,但這個東西還是有點相容性的問題,
您可別以為RS232 就只是 Tx/Rx 而已...其實他還包括其他的DTR/CTS等等...
做到完整也會搞死人的...不過,原廠會提供這樣子的範例程式,也不是要您弄一棵
USB 轉 RS232 晶片出來搞市場的,還尤其用32 bits ARM。(雖然,國產的晶片
市場也算做到爛了!)....主要我想應該是希望可以提供一個在系統應用端的相容性與
整合性吧!譬如說:以前您是用一棵 8 bits MCU 做一些有RS232 的系統應用,
但是呢?您的對手軟體還是停留在RS232 ,以前的話還要外掛一棵USB 轉RS232,
這下就不用了,您就直接套用這樣子的韌體程式,又可以省一棵USB 轉RS232...
反正,一棵 32 bits ARM 外加遠比以前強大計算能力與程式容量的記憶體,
相信可以輕輕鬆鬆的應付以前韌體程式的功能...唉~32 bits ARM MCU 又多了
一個邊際效益,將一個以前都覺得還可以搞的IC 產品給搞掉了。
---
第三種就是 USB Audio Class...這一點根本就是衝著32 bits ARM 的強大計算能力,
因為:要完成USB Audio Class 無非就是要將 Audio 數位化後,再以USB 介面傳輸,
這就牽涉到audio 的解/編碼的計算能力...要不然,說真的啦...Audio 經由編碼
數位化之後,其實他的資料傳輸量是不大的...以一般語音來說:超過16kbps 的
bitstream 的語音資料都已經清晰可辨了。所以可以輕易的經由USB 介面傳輸。
最重要的就是:此一類的USB 傳輸是屬於ISO token 的傳輸介面,也算是綜合以上
諸項應用,可以將USB 幾個基本傳輸Token 給全面表現出來。多完美啊!
只是還是偷偷遞給他"偷雞"一下,其實以USB 的應用來說:還是有一項給忽略了,
就是同屬Audio Class 這一級的影像傳輸,譬如PC Camera...但這一項真的就比較
難了,影像的壓縮所需的計算能力就可不是一般跑幾十個MIPS 的ARM 可以勝任的,
當然也要留意的是:這裡的Audio 指的也是 語音而已,您說要拿來搞個MP3的
解編碼...還是有點強人所難啦!
----------
最後一項:應該指的就是一般人比較討厭的東西,就是一般還要外掛屬於自己
USB 驅動程式的 USB 基本應用,但其實,他的範例程式是最簡單,也是最基本型,
當然使用上也是最有彈性...只是我想可能很多人都不太會想去碰他吧!
我在以前很基礎的USB 簡介中也有提過,您要能真正發揮USB 傳輸效能就得要靠
這一種傳輸方式,我想:如果真要測試與驗證8 bits 與 32 bits USB MCU 效能差異
的化...這一種USB 傳輸方式最能表現效果的,更何況現在許多 32 bits ARM MCU
都有提供一定程度的DMA 介面功能,這一點對於USB 傳輸來說:尤其加分的!
就看每個人的看法吧!
---
以下就是 NXP 的LPC11U14 的附的USB 範例程式:
USBDriver
These files are shared by all the USB class drivers.
-- usb.h USB header
-- usbhw.h USB hardware header
-- usbhw.c USB hardware APIs
-- usbcore.h USB Core header
-- usbcore.c USB Core APIs
USBHID
-- hid.h USB HID related header
-- hiduser.h USB HID user specific header
-- hiduser.c USB HID user APIs
-- usbcfg.h USB configuration header
-- usbdesc.h USB descriptor header
-- usbdesc.c USB descriptor APIs
-- usbuser.h USB user header
-- useuser.c USB user APIs
-- io_event.h USB Remote Wakeup test header
-- io_event.c USB Remote wakeup test APIs
-- demo.c USB HID test module main entry
-- demo.h header file for main entry
-- usbhid.uvproj uVision 4.x project file
USBMEM
-- msc.h USB MSC related header
-- mscuser.h USB MSC user specific header
-- mscuser.c USB MSC user APIs
-- usbcfg.h USB configuration header
-- usbdesc.h USB descriptor header
-- usbdesc.c USB descriptor APIs
-- usbuser.h USB user header
-- useuser.c USB user APIs
-- diskimg.c USB Virtual file page
-- memory.c USB MSC test module main entry
-- memory.h header file for main entry
-- usbmem.uvproj uVision 4.x project file
USBAudio
-- usbaudio.h USB Audio related header
-- adcuser.h USB Audio user specific header
-- adcuser.c USB Audio user APIs
-- usbcfg.h USB configuration header
-- usbdesc.h USB descriptor header
-- usbdesc.c USB descriptor APIs
-- usbuser.h USB user header
-- useuser.c USB user APIs
-- usbdmain.c USB MSC test module main entry
-- usbdmain.h header file for main entry
-- usbaudio.uvproj uVision 4.x project file
USBCDC
-- cdc.h USB CDC related header
-- cdcuser.h USB CDC Device Class user specific header
-- cdcuser.c USB CDC Device Class user APIs
-- usbcfg.h USB configuration header
-- usbdesc.h USB descriptor header
-- usbdesc.c USB descriptor APIs
-- usbuser.h USB user header
-- usbuser.c USB user APIs
-- vcomdemo.h header for VCOM demo
-- vcomdemo.c USB CDC(Virtual COM) test module, main entry
-- virtualCom.uvproj uVision 4.x project file
-- serial.h Header for UART port
-- serial.c UART module APIs
-- lpc11xx-vcom.inf The host side driver installation file
留言列表