淺談USB閃存盤與PIC微控制器系統(tǒng)的連接
掃描二維碼
隨時(shí)隨地手機(jī)看文章
問題與挑戰(zhàn)
作為現(xiàn)今普遍接受的移動(dòng)存儲(chǔ)工具,USB閃存盤在各種嵌入式系統(tǒng)中也獲得廣泛應(yīng)用。
本文介紹低成本PIC控制器通過USB2.0全速接口與閃存盤進(jìn)行連接的實(shí)現(xiàn)過程,并著重針對(duì)PIC微控制器和VinculumUSB接口芯片說明有關(guān)嵌入式接口的硬件設(shè)計(jì)以及程序的編寫。
如今各種閃存盤和USB外設(shè)價(jià)格已相當(dāng)?shù)土?并被廣泛應(yīng)用到帶USB接口的PC中.而要將它們應(yīng)用于8位或16位嵌入式系統(tǒng)中,如何解決成本和功耗等問題才是關(guān)鍵.這其中的原因主要是這類系統(tǒng)中用到的嵌入式控制器,如Microchip公司推出并得到廣泛應(yīng)用的PIC系列器件具有多種存儲(chǔ)密度和外設(shè),但由于缺乏接口、資源和性能,無法作為USB的主控制器。
在實(shí)際應(yīng)用中,可用VNC1LVinculum控制器來實(shí)現(xiàn)這種連接,該芯片提供了作為系統(tǒng)控制器的PIC和USB2.0全速端口之間的接口,順利實(shí)現(xiàn)與USB閃存盤的連接,同時(shí)該方案具有很短的執(zhí)行時(shí)間和最小系統(tǒng)成本。Vinculum基于定制處理器內(nèi)核,有兩個(gè)直接存儲(chǔ)訪問(DMA)引擎以加快數(shù)據(jù)傳輸和32位數(shù)字協(xié)處理器優(yōu)化文件系統(tǒng)的計(jì)算,所有這些都在一個(gè)芯片里完成,芯片帶有64K嵌入式閃存和4K內(nèi)部數(shù)據(jù)SRAM。
Vinculum專門針對(duì)嵌入式USB控制器市場(chǎng),只需要很少外部支持元件。Vinculum核與常用MCU核相比的一個(gè)主要特點(diǎn)是其代碼長(zhǎng)度大幅縮短,減少內(nèi)核在代碼上的開銷,因此可以在單芯片e-Flash存儲(chǔ)器里裝入更多功能,這一特點(diǎn)也正好可以彌補(bǔ)基于PIC的嵌入式系統(tǒng)的不足。系統(tǒng)原理圖見圖1,通過Vinculum將小型PICMCU連到USB“A”連接器上,然后就可以連接USB閃存盤了。
搭建模擬系統(tǒng)
PIC是系統(tǒng)控制器,通過通用I/O引腳(引腳9、10、11上的RC0、RC1、RA2)接收從傳感器或其他來源傳過來的數(shù)據(jù),對(duì)數(shù)據(jù)格式進(jìn)行轉(zhuǎn)換,然后用數(shù)據(jù)流將數(shù)據(jù)寫入閃存盤上的文件里。命令和數(shù)據(jù)通過TXD(引腳6)傳到VNC1L的RXD(引腳32),VNC1L在USB閃存盤上生成FAT12/16/32文件并存儲(chǔ)數(shù)據(jù),并通過USB2DM(引腳28)和USB2DP(引腳29)和閃存盤通信。數(shù)據(jù)也用同樣引腳讀出,然后將數(shù)據(jù)通過VNC1L的TXD(引腳31)傳到PIC的PXD(引腳5)以供系統(tǒng)固件使用。
在PIC引腳2和3之間接入一個(gè)20MHz晶振可在其UART接口獲得高達(dá)115200bit/s波特率,而使用內(nèi)部8MHz振蕩器只能獲得最高9600bit/s波特率,因此加接晶振可提高系統(tǒng)性能。PIC的IO引腳RC2和RC3都被固件使用,以模擬與VNC1LUART連接的RTS/CTS握手信號(hào)。系統(tǒng)由PIC上的固件控制,數(shù)據(jù)傳輸則由PIC發(fā)出的指令控制,該指令由Vinculum上的標(biāo)準(zhǔn)固件進(jìn)行解釋。雖然說起來很簡(jiǎn)單,但完成設(shè)計(jì)還有其他一些工作要做,例如器件還需要電源、控制時(shí)鐘的晶振以及編程。
系統(tǒng)需要標(biāo)準(zhǔn)的5V250mA電源(PSU),可為USB“A”連接器提供高達(dá)200mA電流,同時(shí)為VNC1L和PIC各提供25mA驅(qū)動(dòng)電流。VNC1L采用3.3v電源,由一個(gè)3.3vLDO調(diào)壓器提供,它帶有一個(gè)5v容限IO引腳,可使其連到PIC而不需要用到電平轉(zhuǎn)換器。在低功耗應(yīng)用中,VNC1L不工作時(shí)可進(jìn)入2mA睡眠模式,如需喚醒器件,只需觸發(fā)RART接口的振鈴指示(RI)引腳(引腳38)。如果它連到RXD線上(如圖所示),就可以用一個(gè)空命令觸發(fā)以喚醒器件。
該設(shè)計(jì)還包括一個(gè)雙色LED指示器,由引腳16和18推動(dòng)。它可以顯示是否成功連上USB閃存盤并可以訪問文件系統(tǒng)。
VNC1L和PIC編程
該設(shè)計(jì)包括兩個(gè)程序頭文件,每個(gè)器件需要一個(gè),同時(shí)還要有相應(yīng)的開發(fā)環(huán)境。對(duì)于生產(chǎn)設(shè)計(jì)而言,兩個(gè)器件都要在插入PCB之間預(yù)先編程,以減少連接頭和跳線。
在正常工作狀態(tài)下,J1和J2需要連上,而其他跳線保持?jǐn)嚅_。對(duì)VNC1L編程的時(shí)候,將J1和J2跳線移開以使VNC1LUART輸入與PIC輸出分開。把5VPSU斷開,然后將TTL-232R-3V3線纜接到H2上,將該線纜的USB端接到PC上,而在PC上安裝好VPROG編程軟件。將J4連上以便將VNC1L的PROG#引腳拉低,并短暫將J3短路以使器件復(fù)位使其進(jìn)入編程狀態(tài)。編程完成后,記住恢復(fù)跳線設(shè)定到工作位置。
對(duì)PIC編程時(shí)編程頭連到器件的RA0、RA1和MCLR#引腳,通過編程頭提供5V編程電壓。PIC微控制器編程前先將5VPSU斷開,編程頭連到標(biāo)準(zhǔn)PIC編程環(huán)境如PICKit2上,可以使用Microchip的調(diào)試與下載工具。
本文所附的C代碼實(shí)例顯示PIC等待閃存盤檢測(cè),然后打開一個(gè)名為hello.txt的文件,接著將“HelloWorld”以及回車換行符寫入該文件中,最后關(guān)閉文件并等待將閃存盤移開。
VNC1L固件
VNC1L采用標(biāo)準(zhǔn)固件進(jìn)行編程,稱為VDAP,它可以解釋來自于PIC的命令。這些VDAP命令有些類似于DOS指令,如DIR、RD以及WR等,命令集也支持容易被微處理器控制的單字節(jié)十六進(jìn)制命令,VDAP命令包含在PIC固件中,可控制USB閃存盤的接入,典型命令序列可以是生成一個(gè)文件、從文件中讀出/寫入數(shù)據(jù)然后關(guān)閉文件。
結(jié)論
FTDI的VinculumVNC1L提供了一個(gè)低成本微控制器與USB2.0低/全速外設(shè)之間的接口,易于使用和編程,其指令集類似于DOS命令,可在微控制器環(huán)境下很容易地編寫調(diào)試數(shù)據(jù)以及傳輸例程,同時(shí)設(shè)計(jì)簡(jiǎn)單,使嵌入式系統(tǒng)能以較低成本實(shí)現(xiàn)USB主機(jī)功能。因此用戶將可以采用低成本通用USB閃存盤作為系統(tǒng)存儲(chǔ)媒介,而且還能在現(xiàn)場(chǎng)進(jìn)行軟件升級(jí)。此外VNC1L還可用于連接除了大容量存儲(chǔ)設(shè)備之外的很多其他USB外設(shè),不過這部分內(nèi)容在本文討論范圍之外。
VinculumIC給USB接口增加不到10%的功耗,對(duì)系統(tǒng)而言更低,但能以非常容易及直接的方式為便攜式設(shè)備增加USB2.0主機(jī)控制器端口。VDAP固件以及介紹完整指令集的文件可從FTDI的Vinculum網(wǎng)站(http://)下載。