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