長期以來,以flash memory為存儲體的sd卡因具備體積小、功耗低、可擦寫以及非易失性等特點而被廣泛應用于消費類電子產(chǎn)品中。特別是近年來,隨著價格不斷下降且存儲容量不斷提高,它的應用范圍日益增廣。當數(shù)據(jù)采集系統(tǒng)需要長時間地采集、記錄海量數(shù)據(jù)時,選擇sd卡作為存儲媒質是開發(fā)者們一個很好的選擇。在電能監(jiān)測以及無功補償系統(tǒng)中,要連續(xù)記錄大量的電壓、電流、有功功率、無功功率以及時間等參數(shù),當單片機采集到這些數(shù)據(jù)時可以利用sd作為存儲媒質。本文主要介紹了sd卡在電能監(jiān)測及無功補償數(shù)據(jù)采集系統(tǒng)中的應用方案。 設計方案 應用at89c52讀寫sd卡有兩點需要注意。首先,需要尋找一個實現(xiàn)at89c52單片機與sd卡通訊的解決方案;其次,sd卡所能接受的邏輯電平與at89c52提供的邏輯電平不匹配,需要解決電平匹配問題。通訊模式 sd卡有兩個可選的通訊協(xié)議:sd模式和spi模式。sd模式是sd卡標準的讀寫方式,但是在選用sd模式時,往往需要選擇帶有sd卡控制器接口的mcu,或者必須加入額外的sd卡控制單元以支持sd卡的讀寫。然而,at89c52單片機沒有集成sd卡控制器接口,若選用sd模式通訊就無形中增加了產(chǎn)品的硬件成本。在sd卡數(shù)據(jù)讀寫時間要求不是很嚴格的情況下,選用spi模式可以說是一種最佳的解決方案。因為在spi模式下,通過四條線就可以完成所有的數(shù)據(jù)交換,并且目前市場上很多mcu都集成有現(xiàn)成的spi接口電路,采用spi模式對sd卡進行讀寫操作可大大簡化硬件電路的設計?! ‰m然at89c52不帶sd卡硬件控制器,也沒有現(xiàn)成的spi接口模塊,但是可以用軟件模擬出spi總線時序。本文用spi總線模式讀寫sd卡。電平匹配 sd卡的邏輯電平相當于3.3v ttl電平標準,而控制芯片at89c52的邏輯電平為5v cmos電平標準。因此,它們之間不能直接相連,否則會有燒毀sd卡的可能。出于對安全工作的考慮,有必要解決電平匹配問題?! ∫鉀Q這一問題,最根本的就是解決邏輯器件接口的電平兼容問題,原則主要有兩條:一為輸出電平器件輸出高電平的最小電壓值,應該大于接收電平器件識別為高電平的最低電壓值;另一條為輸出電平器件輸出低電平的最大電壓值,應該小于接收電平器件識別為低電平的最高電壓值?! ∫话銇碚f,通用的電平轉換方案是采用類似sn74alvc4245的專用電平轉換芯片,這類芯片不僅可以用作升壓和降壓,而且允許兩邊電源不同步。但是,這個方案代價相對昂貴,而且一般的專用電平轉換芯片都是同時轉換8路、16路或者更多路數(shù)的電平,相對本系統(tǒng)僅僅需要轉換3路來說是一種資源的浪費?! 】紤]到sd卡在spi協(xié)議的工作模式下,通訊都是單向的,于是在單片機向sd卡傳輸數(shù)據(jù)時采用晶體管加上拉電阻法的方案,基本電路如圖1所示。而在sd卡向單片機傳輸數(shù)據(jù)時可以直接連接,因為它們之間的電平剛好滿足上述的電平兼容原則,既經(jīng)濟又實用?! ∵@個方案需要雙電源供電(一個5v電源、一個3.3v電源供電),3.3v電源可以用ams1117穩(wěn)壓管從5v電源穩(wěn)壓獲取。硬件接口設計 sd卡提供9pin的引腳接口便于外圍電路對其進行操作,9pin的引腳隨工作模式的不同有所差異。在spi模式下,引腳1(dat3)作為spi片選線cs用,引腳2(cmd)用作spi總線的數(shù)據(jù)輸出線mosi,而引腳7(dat0)為數(shù)據(jù)輸入線miso,引腳5用作時鐘線(clk)。除電源和地,保留引腳可懸空?! ”疚闹锌刂苨d卡的mcu是atmel公司生產(chǎn)的低電壓、高性能cmos 8位單片機at89c52,內含8k字節(jié)的可反復擦寫的只讀程序存儲器和256字節(jié)的隨機存儲數(shù)據(jù)存儲器。由于at89c52只有256字節(jié)的數(shù)據(jù)存儲器,而sd卡的數(shù)據(jù)寫入是以塊為單位,每塊為512字節(jié),所以需要在單片機最小系統(tǒng)上增加一片ram。本系統(tǒng)中ram選用存儲器芯片hm62256,容量為32k。對ram進行讀寫時,鎖存器把低8位地址鎖存,與p2口的8位地址數(shù)據(jù)構成16位地址空間,從而可使sd卡一次讀寫512字節(jié)的塊操作。系統(tǒng)硬件圖如圖2所示。 軟件設計spi工作模式 sd卡在上電初期自動進入sd總線模式,在此模式下向sd卡發(fā)送復位命令cmd0。如果sd卡在接收復位命令過程中cs低電平有效,則進入spi模式,否則工作在sd總線模式。 對于不帶spi串行總線接口的at89c52單片機來說,用軟件來模擬spi總線操作的具體做法是:將p1.5口(模擬clk線)的初始狀態(tài)設置為1,而在允許接收后再置p1.5為0。這樣,mcu在輸出1位sck時鐘的同時,將使接口芯片串行左移,從而輸出1位數(shù)據(jù)至at89c52單片機的p1.7(模擬miso線),此后再置p1.5為1,使單片機從p1.6(模擬mosi線)輸出1位數(shù)據(jù)(先為高位)至串行接口芯片。至此,模擬1位數(shù)據(jù)輸入輸出便完