文獻(xiàn)標(biāo)識(shí)碼: B
文章編號(hào): 0258-7998(2010)10-0073-03
SD卡[1]作為新型移動(dòng)存儲(chǔ)設(shè)備,以體積小、速度快、抗震動(dòng)、通用性強(qiáng)的特點(diǎn)備受青睞。以SD卡作為存儲(chǔ)介質(zhì)來(lái)保存企業(yè)的電能耗用參數(shù),可以有效提高數(shù)據(jù)保存的可靠性。采用SD卡結(jié)合ARM處理器LPC2148設(shè)計(jì)的多參數(shù)電能耗用記錄儀,將現(xiàn)場(chǎng)采集的各類(lèi)電能耗用數(shù)據(jù)按文件方式存儲(chǔ)到SD卡中,并且可以方便地與PC等上位機(jī)進(jìn)行數(shù)據(jù)交換,從而滿足現(xiàn)場(chǎng)數(shù)據(jù)采集、室內(nèi)進(jìn)行數(shù)據(jù)分析的要求,特別適合于長(zhǎng)時(shí)間、大容量數(shù)據(jù)采集的場(chǎng)合。
1 系統(tǒng)硬件設(shè)計(jì)
電能耗用記錄儀硬件電路如圖1所示,ARM核處理器LPC2148是整個(gè)系統(tǒng)的核心,其工作頻率高達(dá)60 MHz,內(nèi)置512 KB的閃存和16 KB的SRAM,并且?guī)в蠸PI總線、兩路A/D轉(zhuǎn)換器、實(shí)時(shí)時(shí)鐘等多種片內(nèi)功能部件。電網(wǎng)中的電壓電流信號(hào)通過(guò)較高精度的互感器變換成1 V左右的交流信號(hào),同時(shí)使記錄儀與強(qiáng)電隔離,對(duì)隔離后的交流信號(hào)進(jìn)行整形、濾波之后送入LPC2148內(nèi)部?jī)陕稟/D轉(zhuǎn)換器,完成對(duì)電壓、電流、功率因數(shù)等參數(shù)的測(cè)量,LPC2148根據(jù)內(nèi)部實(shí)時(shí)時(shí)鐘提供的時(shí)間按高峰和低谷時(shí)段對(duì)耗電量進(jìn)行分時(shí)計(jì)度,計(jì)算出瞬時(shí)電量、整點(diǎn)電量、總需量等參數(shù)。記錄儀采用點(diǎn)陣圖形液晶顯示器作為本地顯示接口,既可以文本模式顯示所采集的數(shù)據(jù),也可以圖形方式顯示采集數(shù)據(jù)曲線。外擴(kuò)矩陣鍵盤(pán)用于設(shè)定數(shù)據(jù)采集間隔、采集時(shí)間等,系統(tǒng)根據(jù)用戶設(shè)定啟動(dòng)數(shù)據(jù)采集,并自動(dòng)將采集得到的數(shù)據(jù)存儲(chǔ)到SD卡存儲(chǔ)器中。
SD卡可以采用SD和SPI兩種工作方式[2],在SPI方式下只需要4條信號(hào)線即可完成數(shù)據(jù)通信,操作簡(jiǎn)單方便,而且很容易與LPC2148的SPI總線進(jìn)行接口,接口引腳說(shuō)明如表1所列。作為SPI設(shè)備,SD卡的SPI通道由以下4個(gè)信號(hào)組成:CS(片選)、SCK(時(shí)鐘)、DateIn(主機(jī)到卡的數(shù)據(jù)信號(hào))和DateOut(卡到主機(jī)的數(shù)據(jù)信號(hào))。CS是SD卡的片選信號(hào)線,在整個(gè)SPI 操作過(guò)程中,必須保持低電平有效;SCK時(shí)鐘用于同步;DateIn不但傳輸數(shù)據(jù)還發(fā)送命令;DateOut除了傳輸數(shù)據(jù)外,還發(fā)送應(yīng)答信號(hào)。
2 SD卡在SPI方式下的讀寫(xiě)實(shí)現(xiàn)
SPI是一種通用同步串行接口總線,字長(zhǎng)為8 bit。SPI協(xié)議是以主從方式工作的,通常有一個(gè)主設(shè)備和一個(gè)(或多個(gè))從設(shè)備。工作時(shí)主設(shè)備通過(guò)提供同步時(shí)鐘和從設(shè)備使能信號(hào)來(lái)控制數(shù)據(jù)傳輸。主設(shè)備每次開(kāi)始傳送數(shù)據(jù)時(shí),必須先將片選信號(hào)置低以激活SD卡,使其進(jìn)入工作狀態(tài)。SD卡在SPI方式下工作時(shí),被選中的卡總是對(duì)來(lái)自于主設(shè)備的命令有所響應(yīng),當(dāng)卡遇到錯(cuò)誤時(shí),將返回一個(gè)出錯(cuò)響應(yīng)來(lái)代替期望的數(shù)據(jù)。
2.1 SD卡初始化
SD卡在讀寫(xiě)操作之前必須進(jìn)行初始化,這是確保SD卡能在SPI方式下進(jìn)行正常數(shù)據(jù)傳輸?shù)那疤?。由于大容量SD卡的出現(xiàn),SD1.x標(biāo)準(zhǔn)已經(jīng)升級(jí)為SD2.0,但也因此出現(xiàn)許多電子設(shè)備無(wú)法驅(qū)動(dòng)大容量SD卡的情況,如何識(shí)別SD1.x與SD2.0就顯得特別重要。SD卡上電后默認(rèn)進(jìn)入SD工作方式,應(yīng)等待至少74個(gè)時(shí)鐘周期后,將片選信號(hào)置低,發(fā)送復(fù)位命令CMD0,等SD卡復(fù)位完成后再向SD卡發(fā)送CMD8命令。如果收到的應(yīng)答信號(hào)為01H,則表示為SD2.0卡,否則為SD1.x卡。SD1.x與SD2.0最大不同之處在于命令地址的表示,SD1.x的地址單位是字節(jié),而SD2.0的地址單位是扇區(qū),因此在讀寫(xiě)操作時(shí)應(yīng)根據(jù)不同的卡對(duì)地址作相應(yīng)處理。圖2所示為SD卡在SPI方式下的初始化流程。
2.2 FAT32文件系統(tǒng)
SD卡在能夠進(jìn)行數(shù)據(jù)保存之前必須先按某種文件系統(tǒng)[3]的規(guī)定進(jìn)行格式化,F(xiàn)AT32文件系統(tǒng)因具有高度兼容性而被廣泛應(yīng)用于移動(dòng)存儲(chǔ)設(shè)備中。FAT32文件系統(tǒng)結(jié)構(gòu)分為五個(gè)部分:MBR區(qū)、DBR區(qū)、FAT區(qū)、FDT區(qū)、DATA區(qū)。
MBR區(qū)又稱(chēng)為主引導(dǎo)記錄,其后為64 B的磁盤(pán)分區(qū)表DPT。
DBR區(qū)即操作系統(tǒng)引導(dǎo)記錄區(qū),占用分區(qū)的第0扇區(qū),共512 B,由跳轉(zhuǎn)指令、結(jié)束標(biāo)志等幾部分組成。
FAT區(qū)存放文件分配表,文件分配表與數(shù)據(jù)區(qū)簇號(hào)一一對(duì)應(yīng),反映了所有簇的使用情況。每個(gè)表項(xiàng)單元的大小決定了FAT的類(lèi)型,比如FAT32的表項(xiàng)單元為32 bit。FAT表一般都有一個(gè)備份。
FDT區(qū)存放文件目錄表,位于備份FAT表之后。FDT由32 bit線性目錄項(xiàng)構(gòu)成,記錄著根目錄下每個(gè)文件(子目錄)的起始單元、屬性等。
DATA區(qū)是真正意義上的數(shù)據(jù)存儲(chǔ)區(qū),位于FDT之后,占據(jù)SD卡上的大部分空間。
當(dāng)SD卡格式化為FAT32分區(qū)時(shí),文件系統(tǒng)就將這個(gè)分區(qū)當(dāng)成整塊可分配的區(qū)域進(jìn)行規(guī)劃,以便于數(shù)據(jù)的存儲(chǔ)。通常將SD卡空間以一定數(shù)目的扇區(qū)為單位進(jìn)行劃分,這樣的單位稱(chēng)為簇,簇的大小為2n個(gè)扇區(qū)(n為整數(shù)),每個(gè)扇區(qū)512 B,每個(gè)簇的最大存儲(chǔ)空間為32 KB。
3 系統(tǒng)軟件設(shè)計(jì)
系統(tǒng)軟件包括SD卡驅(qū)動(dòng)、液晶驅(qū)動(dòng)、A/D轉(zhuǎn)換驅(qū)動(dòng)、鍵盤(pán)驅(qū)動(dòng)以及各種數(shù)據(jù)處理程序等。限于篇幅,這里僅介紹SD卡的文件系統(tǒng)操作。整個(gè)文件系統(tǒng)采用模塊化層次結(jié)構(gòu),包括文件管理與目錄管理模塊、文件分配表管理模塊、SD卡緩存模塊等,這些模塊都建立在底層驅(qū)動(dòng)程序之上[4],底層驅(qū)動(dòng)程序則主要完成向SD卡某個(gè)扇區(qū)的讀寫(xiě)。文件系統(tǒng)的功能是在SD卡中進(jìn)行正確的文件數(shù)據(jù)操作,主要包括:在FDT中申請(qǐng)新目錄項(xiàng),創(chuàng)建文件;寫(xiě)入新文件時(shí),在FAT表中查找未使用的簇,并將該簇號(hào)寫(xiě)入文件對(duì)應(yīng)目錄數(shù)據(jù)結(jié)構(gòu)中的起始簇號(hào)位置,當(dāng)文件長(zhǎng)度大于一簇時(shí),還需在FAT表中對(duì)應(yīng)的起始簇號(hào)位置填入下一可用簇號(hào),直到文件的最后一簇;刪除文件時(shí),除了在FDT中將對(duì)應(yīng)的目錄項(xiàng)設(shè)置相應(yīng)標(biāo)志外,還要修改FAT表,將此文件使用的簇號(hào)位置清0,表示此簇當(dāng)前未被使用等。FAT32文件系統(tǒng)存儲(chǔ)文件時(shí)最小單元為簇,即使一個(gè)很小的文件也會(huì)占用一簇,為了節(jié)約存儲(chǔ)空間,創(chuàng)建文件時(shí)如果有同名文件存在,則只需要向原來(lái)的同名文件追加數(shù)據(jù)。文件系統(tǒng)設(shè)計(jì)時(shí)為用戶提供了各種API函數(shù),如創(chuàng)建文件函數(shù)Creat_File(),打開(kāi)文件函數(shù)Open_FIle(),寫(xiě)入文件函數(shù)Write_File(),刪除文件函數(shù)Delete_File()等,調(diào)用這些API函數(shù)即可完成用戶所需要的功能。圖3所示為在SD卡中創(chuàng)建文件并向其中寫(xiě)入文件數(shù)據(jù)的流程圖。
采用SD卡作為移動(dòng)存儲(chǔ)器的多參數(shù)電能耗用記錄儀,可以對(duì)現(xiàn)場(chǎng)耗電數(shù)據(jù)進(jìn)行實(shí)時(shí)采集和高速保存。利用SD卡的良好移動(dòng)性,可方便地實(shí)現(xiàn)與計(jì)算機(jī)的數(shù)據(jù)交換,達(dá)到現(xiàn)場(chǎng)數(shù)據(jù)采集、室內(nèi)數(shù)據(jù)分析的目的。也可以通過(guò)記錄儀鍵盤(pán)命令隨時(shí)讀取SD卡中的數(shù)據(jù),從液晶顯示屏幕上以文本或曲線方式進(jìn)行實(shí)時(shí)顯示。隨著SD卡移動(dòng)存儲(chǔ)性能的不斷提高,容量越來(lái)越大,其價(jià)格越來(lái)越便宜,基于SD卡移動(dòng)存儲(chǔ)器的多參數(shù)電能耗用記錄儀將會(huì)得到廣泛的應(yīng)用。
參考文獻(xiàn)
[1] SanDisk Corporation SD memory card specifications part 1, Physical Layer Specification Version 1.0, 2002.
[2] 周煜, 付宇卓. 基于SPI協(xié)議的MMC卡讀寫(xiě)機(jī)制的實(shí)現(xiàn)[J]. 計(jì)算機(jī)仿真, 2005,22(1):97-99.
[3] 鄧劍, 楊曉非, 廖俊卿. FAT文件系統(tǒng)原理及實(shí)現(xiàn)[J]. 計(jì)算機(jī)與數(shù)字工程, 2005,33(9):105-108.
[4] 徐愛(ài)鈞. IAR EWARM V5嵌入式系統(tǒng)應(yīng)用編程與開(kāi)發(fā)[M]. 北京:北京航空航天大學(xué)出版社, 2009.