基于單片機的大容量數(shù)據(jù)存儲技術(shù)的應(yīng)用研究
0 引言
在現(xiàn)場測控系統(tǒng)中,RTU(遠程測控終端)存儲容量、存儲數(shù)據(jù)的轉(zhuǎn)移問題始終是RTU的重要環(huán)節(jié)。RTU的存儲容量一般為幾十K~幾百K字節(jié),數(shù)據(jù)轉(zhuǎn)移通常采用不掉電靜態(tài)RAM、EEPROM存儲模塊,或采用便攜式計算機通過串行口讀取RTU數(shù)據(jù)。無論采用哪種方法都存在一定的局限性。首先存儲容量小,對于大量的數(shù)據(jù)存儲顯得比較緊張。對于數(shù)據(jù)轉(zhuǎn)移,如果采用存儲模塊,雖然攜帶方便但不是通用設(shè)備,其成本較高,同時不能與計算機兼容,要將存儲模塊的數(shù)據(jù)錄入計算機還需要專用的讀取設(shè)備;如果采用便攜式計算機讀取RTU數(shù)據(jù),雖然讀取方便,但在野外便攜式計算機也是一個不小的包袱。
隨著USB(Universal Serial Bus)技術(shù)的發(fā)展,計算機的移動存儲介質(zhì)普遍采用U盤或移動硬盤。U盤的存儲容量以MB為單位,移動硬盤的存儲容量以GB為單位,它們相對于RTU原先的存儲模塊來說都是海量存儲,所有數(shù)據(jù)存也無需進行壓縮處理,可以在文件級與計算機兼容。即便是對于那些小數(shù)據(jù)量存儲的RTU,雖然只依靠單片機內(nèi)部的 FLASH就能滿足存儲要求,然而采用USB接口就能方便地用一個U盤分別讀出多個RTU的數(shù)據(jù)。
如今,USB技術(shù)已經(jīng)越來越普及和成熟,低成本、高穩(wěn)定性、較高的數(shù)據(jù)傳輸速率和即插即用的方便性,使其備受硬件廠商的青睞。隨著數(shù)據(jù)采集和嵌入式用戶對移動存儲的需求越來越大,具有USB接口的存儲設(shè)備以其優(yōu)異的性價比和靈活性常用來進行數(shù)據(jù)的存儲和交換,所以在嵌入式系統(tǒng)中實現(xiàn)對優(yōu)盤或移動硬盤的直接讀寫是非常有價值的。
1USB設(shè)備開發(fā)的一般過程
1.1 USB接口芯片的選擇
在進行一個USB設(shè)備開發(fā)之前,首先要根據(jù)具體使用要求選擇合適的USB接口芯片,它是總線在主機方面的接口,用于支持USB設(shè)備通過USB連到主機上。
目前,市場上供應(yīng)的USB控制器主要有兩種:帶USB接口的單片機和純粹的USB接口芯片。前者的好處在于開發(fā)者對系統(tǒng)結(jié)構(gòu)和指令集很熟悉,開發(fā)工具簡單,但對于簡單或低成本系統(tǒng),價格高將會是最大的障礙。而純粹的USB接口芯片僅處理USB通信,必須有一個外部微處理器進行協(xié)議處理和數(shù)據(jù)交換。這類芯片的特點是價格便宜、接口方便、可靠性高,尤其適合于產(chǎn)品的改型設(shè)計(硬件上僅需對并行總線和中斷進行改動,軟件則需增加微處理器的USB中斷處理和數(shù)據(jù)交換程序、PC機的USB接口通信程序,無需對原有產(chǎn)品系統(tǒng)結(jié)構(gòu)作很大的改動)41]。
1.2 硬件電路設(shè)計
在選定USB控制芯片后,如果是帶USB接口的單片機,那就是一般單片機應(yīng)用系統(tǒng)的開發(fā);反之,就是如何把USB接口芯片與單片機應(yīng)用系統(tǒng)融合的問題,一般的USB接口芯片都支持多種并行總線結(jié)構(gòu),可以方便地與多種單片機接口。
1.3 軟件設(shè)計
設(shè)計完USB主控器與系統(tǒng)中CPU和存儲器的接口電路后,就要開發(fā)主機系統(tǒng)上的主要外設(shè)驅(qū)動程序,USB的核心驅(qū)動以及USB主控制器驅(qū)動程序了,由主機系統(tǒng)控制USB數(shù)據(jù)的傳送動作,響應(yīng)來自外設(shè)的USB標準請求,完成各種數(shù)據(jù)的交換工作和事件處理。
軟件設(shè)計中要注意的是先要考慮USB總線延時問題。理論上USB總線工作在全速時的最小響應(yīng)周期為1毫秒,但是實際上的響應(yīng)周期可能會到幾十毫秒。其原因是多方面的,比如驅(qū)動程序、多重緩沖區(qū)等。這是在實時控制項目設(shè)計時首先要考慮的因素之一。
1.4 調(diào)試
因為每一次USB的傳輸過程,都有時效要求,等待時間過長,通信過程也就中止了,因此不適合用硬件仿真器來設(shè)斷點調(diào)試??刹捎么谳o助調(diào)試過程,即在固件代碼中加入類似于Printf的語句,向串口輸出一些信息。借此,可以知道程序運行到哪,以及運行到某處時相應(yīng)的變量或寄存器值。
調(diào)試工作基本分三步進行:首先對單片機部分借助PC調(diào)試軟件(芯片生產(chǎn)商提供或從網(wǎng)上下載Bus Hound,WINRT-USB 等調(diào)試軟件)將設(shè)備端的USB協(xié)議(主要有描述符請求、端口配置、地址設(shè)置以及基本數(shù)據(jù)交換)調(diào)通。然后,用調(diào)試好的USB設(shè)備接口來開發(fā)、調(diào)試PC 軟件。最后,加上USB設(shè)備端的其它用戶程序,對整個完整的系統(tǒng)進行調(diào)試。
2 應(yīng)用實例
下面從硬軟件兩方面具體介紹本案例,重點分析了初始化問題。本例研究開發(fā)了一種基于單片機的USB總線的HOST接口,使得可以接入標準的USB DEVICE,針對大容量數(shù)據(jù)固態(tài)存儲的技術(shù)需要,在單片機上研究實現(xiàn)FAT32(兼容FAT16)的文件系統(tǒng),從而使得USB的Mass Storage類設(shè)備可以自由接入,現(xiàn)場采集的數(shù)據(jù)可以以文件的形式存儲記錄。這樣,就大大拓寬了傳統(tǒng)的數(shù)據(jù)測控終端在長時間大容量的數(shù)據(jù)存儲技術(shù)上的限制。
本例采用MSP430F149單片機作為核心處理部件,Philps公司的ISP1161A1為USB主控芯片,由MSP430F149控制 ISP1161A1,將CPU發(fā)來的指令變?yōu)橄鄳?yīng)的USB數(shù)據(jù)流,傳送給指定的USB設(shè)備進行相應(yīng)的操作。圖1為具有USB主機功能的數(shù)據(jù)采集系統(tǒng)原理框圖。數(shù)據(jù)采集的固態(tài)存儲設(shè)備采用現(xiàn)在應(yīng)用非常普遍的U盤或移動硬盤,這些設(shè)備可移動性強,均采用標準的USB總線接口,通用性非常好。
圖1具有USB主機功能的數(shù)據(jù)采集系統(tǒng)原理框圖
在本例中,軟件系統(tǒng)的設(shè)計主要涉及五個部分,分別為軟件主程序、數(shù)據(jù)采集部分、數(shù)據(jù)處理部分、數(shù)據(jù)的現(xiàn)場大容量存儲部分、數(shù)據(jù)的GSM通信部分。整個系統(tǒng)是在IAR Embedded Workbench的軟件環(huán)境以及ScomAssistant調(diào)試助手下實現(xiàn)的,程序的實現(xiàn)采用C語言。主程序的代碼為:
void main(void)
{
SYSInit();
TimeTaskInit();
USBInit();
while(1){
TimerTaskManage();
USBTaskManage();
}
}
SYSInit()實現(xiàn)系統(tǒng)初始化工作,主要對單片機基礎(chǔ)參數(shù)的設(shè)置和定義各個I/O口的工作方式;TimeTaskInit()中先進行單片機定時中斷的配置,再將定時任務(wù)的所有標志清零初始化,為定時中斷處理做準備。USBInit()是對USB事務(wù)進行硬軟件初始化,先檢測和配置USB主控芯片ISP1161A1,再初始化USB軟件環(huán)境。
早期的U盤對初始化要求不高,有的甚至不需要驅(qū)動就可直接對扇區(qū)進行讀寫,所以現(xiàn)有大部分USB主機系統(tǒng)一般都能實現(xiàn)對這些U盤的讀寫。但隨著產(chǎn)品不斷更新,初始化信息不能完全獲取使得一些不同的USB裝置只能針對不同U盤。本實驗證明,初始化過程完成后再解決了時序問題,就可以解決大部分U盤的讀寫。
3.初始化分析
正如前面所述,目前社會上很多人只能完成針對某些特定U盤的讀寫,本實驗中的重點就是先完成U盤的初始化,讓單片機先能認識大多數(shù)U盤,然后對它們進行批處理方式的讀寫,再從U盤或移動硬盤加載文件系統(tǒng),最后完成對U盤或移動硬盤在文件級別上的讀寫。
當主機檢測到一個設(shè)備已經(jīng)連接時,就會自動識別所連接的設(shè)備,這個過程稱為設(shè)備枚舉(Device Enumeration).設(shè)備枚舉使得主機的設(shè)備驅(qū)動程序能夠與USB設(shè)備之間進行數(shù)據(jù)交換.在這個過程中,USB設(shè)備需要響應(yīng)主機的標準設(shè)備請求并把描述符傳送給主機,這些描述符包括設(shè)備描述符,配置描述符,接口描述符和端點描述符等42]。在沒有對U盤完成初始化之前,單片機只能看到U盤的端點0,其他端點對于單片機來說是透明的。因此,我們只能從端點0即控制通道中對U盤進行配置,讀進U盤的必要的配置信息后再對U盤的各端點進行配置。一般的傳輸數(shù)據(jù)大小不為0的控制傳輸?shù)倪^程可分為3個階段[3]。
第一階段,是控制傳輸?shù)慕㈦A段。
在這階段里,我們首先要建一個用于建立控制傳輸事務(wù)的PTD數(shù)據(jù),然后往U盤發(fā)送。
這里有一個需要注意的地方,在每次用于發(fā)送的函數(shù)執(zhí)行以后,要加上一定的延時,等待U盤對發(fā)過來的指令進行處理。我們要讀取描述表,就要向U盤發(fā)送 USB設(shè)備的標準設(shè)備請求命令。比如獲取U盤描述表的USB標準設(shè)備請求命令為“0680 0100 0000 0012”。把上述命令寫入PTD數(shù)據(jù)的負載區(qū),然后發(fā)送,延時等待。
第二階段,是數(shù)據(jù)階段。
標準設(shè)備請求命令發(fā)送后,U盤就會把設(shè)備描述表發(fā)過來,這時我們就準備接收了。
在這里有一個問題要解決,就是最大包長度的問題。每個U盤在0通道里都規(guī)定了一個最大包的長度,可以是8,16,32或64字節(jié)。舉個例子:這次要傳輸?shù)拿枋霰淼拈L度為18字節(jié)。假設(shè)U盤的最大包長度為8字節(jié),那就分三次接收,8+8+2字節(jié)。若最大包長度為16字節(jié),就分兩次接收,16+2字節(jié)。如果最大包長度為32字節(jié)或者64字節(jié),就可以一次完成。為了得到這個U盤的最大包長度,可以進行試探,然后用一個公共變量把最大包長度記錄下來。判斷原理如下:先建立一個大小為8字節(jié)的接收區(qū)進行接收,然后監(jiān)視PTD頭的COMPLETE CODE字段(參考1161芯片中PTD數(shù)據(jù)的建立過程),如果該字段出現(xiàn)1000(二進制)的錯誤,就證明最大包長比8大,然后再建立16字節(jié)的接收區(qū)接收,如果還出現(xiàn)1000的錯誤的話,就再用稍大的包進行嘗試,直到COMPLETE CODE字段出現(xiàn)0000為止。這樣,就得出了該U盤0通道的最大包長度。下圖2總結(jié)了讀入描述表的過程。
第三階段,是狀態(tài)階段。
在狀態(tài)階段里,單片機要向U盤發(fā)送一個空數(shù)據(jù)負載的PTD數(shù)據(jù),以向U盤匯報此次控制傳輸已經(jīng)完成。
配置表的讀取過程和描述表過程差不多,這里就不再加以敘述了。在完成描述表和配置表的讀取以后,就可以往U盤發(fā)送標準設(shè)備請求命令SET CONFIG對U盤進行配置了,至此,枚舉過程結(jié)束。到此為止,本例單片機對U盤的初始化過程也已基本完成。
實驗證明,此方案確實解決了大部分U盤的讀寫,但由于USB單片機系統(tǒng)對時序要求很嚴,測試過程也有一定困難,目前還不能解決所有U盤及移動硬盤的讀寫,為解決這一問題,我們又采用了南京恒沁電子公司的CH375芯片作為USB主控芯片,該芯片集成了處理Mass Storage存儲的專用通信協(xié)議的固件,單片機可以直接以扇區(qū)為基本單位讀寫存儲設(shè)備。初步實驗證明,它能解決目前市場上幾乎所有的U盤及移動硬盤的讀寫。
CH375的優(yōu)點是處理Mass Storage存儲設(shè)備比較方便,缺點是只有一個USB接口,如果視頻采集和數(shù)據(jù)存儲同時處理就需要2個CH375芯片;只支持USB1.1協(xié)議,內(nèi)部緩沖區(qū)只有64字節(jié),數(shù)據(jù)吞吐量比較小,對于高速的視頻采集難以滿足要求。ISP1161A1的優(yōu)點是有2個USB HOST接口和1個USB DEVICE接口,支持USB2.0協(xié)議,內(nèi)部緩沖區(qū)為4K字節(jié),數(shù)據(jù)吞吐量大;缺點是沒有Mass Storage的專用通信協(xié)議的固件,應(yīng)用開發(fā)比較費事。
3.結(jié)束語
文中論述的基于單片機的大容量數(shù)據(jù)存儲方案現(xiàn)已完成了模塊調(diào)試。實際測試中,將終端的模擬采集數(shù)據(jù)送入U盤,以ASCII文件方式存儲,成功存入自定的文件中,可在PC 機中打開, 也可以直接用上層測控軟件進行進一步的處理。
本文的研究是在水利自動化的背景下進行的,但在結(jié)構(gòu)上這種終端明顯具有廣泛的適應(yīng)性。除了應(yīng)用于水利自動化信息測報外,還可以用于電力系統(tǒng)的現(xiàn)場測報和數(shù)據(jù)記錄、交通智能化管理以及環(huán)保、氣象、地質(zhì)、民用領(lǐng)域如數(shù)碼相機等。因此,文中研究的設(shè)計模式和實現(xiàn)技術(shù)的應(yīng)用前景將是非常廣闊的。
參考文獻:
[1] Don Anderson. Universal Serial Bus System Architecture [M].Addison Wesley Longman, Inc,2000
[2] Don Anderson. USB系統(tǒng)體系[M].北京:中國電力出版社,2001
[3] Philips Semiconductors:《ISP1161A1 USB single-chip host and device controller, Programming Guide》,2004
評論