基于U盤的單片機低功耗海量存儲系統(tǒng)
引言
近幾年,隨著Flash Memory非易失存儲技術(shù)的發(fā)展,基于USB接口的閃存即U盤現(xiàn)已得到廣泛應(yīng)用。從理論上講,以U盤作為便攜式采集存儲系統(tǒng)的存儲載體完全能夠滿足長時間采集海量數(shù)據(jù)的要求。但目前所面臨的問題是,U盤主要應(yīng)用于PC機系統(tǒng)中。以單片機等微處理器為核心的嵌入式系統(tǒng)的應(yīng)用中,尚缺少與U盤的直接接口技術(shù)。因此將單片機技術(shù)與U盤存儲技術(shù)兩者結(jié)合起來,利用單片機直接讀寫U盤,并通過總線方式與嵌入式系統(tǒng)的其它部分實現(xiàn)命令和數(shù)據(jù)的通信,從而實現(xiàn)便攜儀器或者嵌入式系統(tǒng)的外掛式海量存儲,具有廣闊的應(yīng)用前景。而以Cypress公司的SL811HS為代表的嵌入式USB主機接口芯片為這種方案的實現(xiàn)提供了可能。
SL811HS介紹[1]
采用單片機直接控制讀寫U盤,牽涉到關(guān)鍵在于USB-HOST技術(shù)的實現(xiàn),即單片機作為USB主機系統(tǒng)。USB系統(tǒng)包括兩部分:USB主機和USB外設(shè),它們組合在一起就構(gòu)成了完整的USB系統(tǒng)。USB的拓撲結(jié)構(gòu)中居于核心地位的是Host(也稱為主機),任何一次USB的數(shù)據(jù)傳輸都必須由主機來發(fā)起和控制,所有的USB外設(shè)都只能和主機建立連接,任何兩個外設(shè)之間或是兩個主機之間無法直接通信。
SL811HS作為嵌入式的USB主機/設(shè)備控制器,功能模塊框圖如圖1.1所示。
SL811HS實現(xiàn)了USB主機結(jié)構(gòu)中的第一個層次,即USB總線接口層的功能。SL811HS的主要特點如下:
•可作為USB主機或者設(shè)備的接口控制器;
•支持USB協(xié)議1.1,提供全速和低速2種USB總線速度方式;
•片上集成了SIE、單端口根Hub、USB收發(fā)器和256字節(jié)的SRAM;
•3.3V工作電壓,接口兼容5V電壓;
•硬件自動產(chǎn)生幀起始包SOF和CRC5/16校驗。
500)this.style.width=500;" border="0" />
圖1.1 SL811HS功能框圖
SL811HS與單片機的硬件接線[2][3]
單片機采用的是AT89C55WD,它通過SL811HS芯片對U盤進行讀寫,實現(xiàn)存儲。這部分的電路原理圖如圖1.2所示。
圖中SL811HS與CPU的連接是關(guān)鍵。SL811HS是3.3V供電的系統(tǒng),而AT89C55WD是5V供電的系統(tǒng),但二者的端口能夠彼此兼容對方的高低電平。因此SL811HS的數(shù)據(jù)引腳D0~D7直接與單片機的低八位地址/數(shù)據(jù)總線AD0~AD7連接,讀寫選通引腳nRD、nWR則直接與單片機的讀寫線/RD、/WR連接;對AT8955WD而言,SL811HS不過是其在片外擴展的I/O芯片之一,地址線A15與/CS_SL811(AT89C55WD的P3.3引腳)組合后充當SL811HS的片選,地址線A0與SL811HS的A0引腳相連,于是SL811HS的地址指針寄存器的地址為7FFEH(A0、/CS_SL811為低電平),SL811HS的數(shù)據(jù)寄存器的地址為7FFFH(A0為高電平,/CS_SL811為低電平)。之所以需要/CS_SL811配合,是因為AT89C55WD在外部還擴展了一片128KB的SRAM62256(省略未畫),片選線也是A15。SL811HS的M/S引腳經(jīng)下拉電阻后接地,使得其工作于主機控制器模式。此外,SL811HS的中斷請求信號為高電平有效,故反向后連接到AT89C55WD的外部中斷引腳/INT0。本系統(tǒng)沒有采用SL811HS內(nèi)部的鎖相環(huán),直接使用外部的48MHz有源晶振作為時鐘源,更準確。
存儲模塊是主機系統(tǒng),其PCB板上安裝有A型插座,用于為下層的設(shè)備提供連接點。因為連接的外設(shè)是功耗量極低的USB盤,下行端口的電源VCC直接連到了檢測系統(tǒng)的電源上。
500)this.style.width=500;" border="0" />
基于U盤的海量存儲板中單片機固件程序編寫
過去,基于個人計算機的USB開發(fā),僅僅是對USB外設(shè)的開發(fā),USB核心驅(qū)動程序和USB主控制器驅(qū)動程序均由Windows等操作系統(tǒng)提供。而實現(xiàn)USB主機的功能,這兩部分驅(qū)動程序都必須設(shè)計。
嵌入式USB主機的軟件設(shè)計思路[4]
USB主機協(xié)議描述了USB系統(tǒng)軟件(核心驅(qū)動程序和主控制器驅(qū)動程序)的設(shè)計規(guī)范。根據(jù)該設(shè)計規(guī)范,嵌入式USB主機的軟件設(shè)計應(yīng)包括以下三部分:USB主機系統(tǒng)軟件部分,主要實現(xiàn)對USB外設(shè)的配置,讀取USB外設(shè)的信息,從而判斷該設(shè)備屬于USB的哪一類,并確定下一步選用哪個特定的程序加以支持;USB Mass Storage設(shè)備類協(xié)議軟件部分,實現(xiàn)USB Mass Storage類所規(guī)定的各種命令;USB用戶軟件部分,實現(xiàn)用FAT文件系統(tǒng)管理和存儲數(shù)據(jù)。因此,基于U盤的海量存儲模塊中單片機的固件程序有著如圖1.3所示的積木式的結(jié)構(gòu)。
500)this.style.width=500;" border="0" />
單片機嵌入式USB主機固件程序
1、SL811HS與AT89C55WD的通信程序設(shè)計
SL811與單片機AT89C55WD的通信程序設(shè)計可以簡單地認為是實現(xiàn)了PC的USB主機的主控制器驅(qū)動程序的部分功能。
①讀數(shù)據(jù)
由于SL811HS的外接總線的地址和數(shù)據(jù)信號是復(fù)用的,通過A0信號來區(qū)分地址和數(shù)據(jù)。因此,AT89C55WD讀取或?qū)懭隨L811HS內(nèi)存的時候首先發(fā)送地址,然后再發(fā)送數(shù)據(jù)。此外,由于SL811HS采用了地址自動增址的機制,因此,如果需要讀取或?qū)懭脒B續(xù)地址內(nèi)的數(shù)據(jù)時,只需要發(fā)送起始地址即可,以后每讀取或?qū)懭胍淮螖?shù)據(jù),SL811HS會自動將尋址地址加1。根據(jù)SL811HS的讀數(shù)據(jù)時序的要求,讀取數(shù)據(jù)前首先發(fā)送地址,再讀取數(shù)據(jù),程序如下:
unsigned char SL811Read(unsigned char a)
{
unsigned char nVal;
unsigned char xdata *exAddress;
exAddress = SL811_ADDR_PORT; /*發(fā)送地址 */
SL811_CS=0;
*exAddress=a;
exAddress=SL811_DATA_PORT; /*讀取數(shù)據(jù) */
nVal = *exAddress;
SL811_CS=1;
return nVal;
}
②寫數(shù)據(jù)
與讀數(shù)據(jù)類似,AT89C55WD向SL811HS的內(nèi)存單元寫數(shù)據(jù)時,也必須首先發(fā)送地址,然后發(fā)送要寫入的數(shù)據(jù)。根據(jù)SL811HS的寫數(shù)據(jù)時序,函數(shù)實現(xiàn)程序如下:
void SL811Write(unsigned char a, unsigned char d)
{
unsigned char xdata *exAddress;
exAddress = SL811_ADDR_PORT; /*發(fā)送地址 */
SL811_CS=0;
*exAddress=a;
exAddress=SL811_DATA_PORT; /*寫入數(shù)據(jù) */
*exAddress = d;
SL811_CS=1;
}
單片機AT89C55WD與SL811HS通信的實現(xiàn),是整個USB體系軟件的根基。在此基礎(chǔ)上即可實現(xiàn)USB主機協(xié)議的系統(tǒng)軟件、Mass Storage類協(xié)議軟件、FAT文件系統(tǒng)軟件。
2、AT89C55WD的初始化
單片機AT89C55WD的初始化程序安排在主程序main.c中,主要是完成定時器T0、外部中斷INT0、I/O口、串行通訊口以及SL811HS 的初始化,包括工作方式設(shè)定、初值設(shè)置、相關(guān)的數(shù)據(jù)緩沖器清零等,程序較為簡單,此處省略。
3、人機接口程序
人機接口程序?qū)碜灾鰿PU模塊的串口命令進行相應(yīng)的處理,并將處理結(jié)果返回。因為主CPU模塊需將采集的數(shù)據(jù)值通過存儲模塊存入U盤,所以主CPU模塊的串口命令包括查詢U盤、創(chuàng)建文件、打開文件、寫文件、讀文件等,如同人們在PC機對U盤的操作。
該段程序首先通過串口處理入口函數(shù),判別主CPU發(fā)出何種命令,再跳轉(zhuǎn)至功能操作子函數(shù)。U盤的功能操作子函數(shù)依據(jù)USB Mass Storage類的UFI命令,按照微軟的FAT文件規(guī)范進行相應(yīng)文件操作。
由于篇幅關(guān)系其它部分的實現(xiàn)本文不作具體介紹。
結(jié)語
總之,運用單片機直接控制讀寫U盤,部分地實現(xiàn)PC上USB主機的USB核心驅(qū)動程序的功能,是嵌入式系統(tǒng)的軟件和硬件的集合,是一個全新的概念?;?strong>U盤的單片機低功耗海量存儲系統(tǒng)將使測控系統(tǒng)體積減小,更有利于野外作業(yè)或其它便攜性要求較高的場合,為儀器便攜化發(fā)展開拓了新的思路。