MSP430單片機(jī)Flash存儲器的特性及應(yīng)用
以單片機(jī)為核心的儀表常要考慮發(fā)生突然掉電時的數(shù)據(jù)保存問題,一般有兩種對策:一是用后備電源維持單片機(jī)持續(xù)工作,稱為硬保護(hù);另一種是在檢測到掉電后,在電源完全失效前保護(hù)現(xiàn)場數(shù)據(jù),上電后再恢復(fù)工作,稱為軟保護(hù)。本文主要討論后者。
本文引用地址:http://m.butianyuan.cn/article/201611/320134.htm目前,設(shè)計掉電軟保護(hù)功能時,數(shù)據(jù)存儲介質(zhì)常選用兩類:一類是E2PROM,但寫入時間較長,難以寫入較多數(shù)據(jù);另一類是帶有后備電池的小容量SRAM構(gòu)成的非易失性存儲器,寫入速度快,但增加了電路的復(fù)雜性。掉電電壓的檢測電路可用分立元件構(gòu)成,也可用專用芯片來實現(xiàn)。前者增加了電路復(fù)雜性且降低了系統(tǒng)可靠性;后者增加了成本。
TI公司的Flash型單片機(jī)MSP430F11x1系列、MSP430F13x系列和MSP430F14x系列具有片內(nèi)的Flash存儲器。可以用于實現(xiàn)儀表的掉電數(shù)據(jù)保護(hù),同時可以簡化系統(tǒng)結(jié)構(gòu),提高系統(tǒng)可靠性。
本文采用TI公司的Flash型16位超低功耗單片機(jī)MSP430F1121,利用其片內(nèi)的Flash存儲器和模擬比較器,只需外接1組分壓電阻進(jìn)行分壓取樣,即可實現(xiàn)系統(tǒng)的掉電軟保護(hù)。
一、
MSP430F11x1為20引腳,采用SOWB封裝,如圖1所示。它有14位具有中斷功能的I/O端口;有1個16位的WatchDog,可用作系統(tǒng)故障復(fù)位或定時器;有1個帶有3組捕捉/比較寄存器的16位定時器Timer_A。有1個模擬電壓比較器Compare_A;它的定時器和比較器功能豐富,可以實現(xiàn)多種用途。例如,外接電阻和電容后可以構(gòu)成1個高精度的A/D轉(zhuǎn)換器。
MSP430F13x和MSP430F14x同為64引腳,采用PQFP封裝,芯片為1cm2的正方形,如圖2所示。它有48位I/O端口;有1個16位的WatchDog;有2個帶有多組捕捉/比較寄存器的16位定時器Timer_A、Timer_B;有1個模擬比較器Compare_A;有1~2個串行接口;有1個12位的多通道A/D轉(zhuǎn)換器。F14x還具有1個硬件乘法器,可實現(xiàn)16位乘16位的操作。
二、
Flash型單片機(jī)的工作電壓為1.8~3.6V??赏饨?2kHz~8MHz晶振,并由內(nèi)部DCO振蕩器實現(xiàn)主時鐘。有5種低功耗模式,在2.2V、32kHz晶振、1MHz主頻、活動模式時工作電流為160μA;當(dāng)僅保持RAM數(shù)據(jù)時為0.1μA。它的Flash存儲器使用尤為方便。
F1121片內(nèi)除256B RAM外,還有4KB+256B的Falsh存儲器。Flash存儲器為分段結(jié)構(gòu),分為主存儲器(main memory)和信息存儲器(information memory),如圖3所示。F13x和F14x的片內(nèi)存儲容量更大,RAM在256B到2KB之間,F(xiàn)lash儲存器在8KB到60KB之間,也包含主存儲器和信息存儲器,分段方法及控制方法與F1121相同。
Flash存儲器主要用作程序存儲器,可經(jīng)JTAG接口下載程序。程序運行時能對其中的1段或多段進(jìn)行擦/寫操作,因此兼有數(shù)據(jù)存儲器功能。Flash存儲器的擦/寫次數(shù)為105次,數(shù)據(jù)在室溫下可保存100年。
以下針對具體的應(yīng)用,詳細(xì)介紹F1121的Flash存儲器用法。
1
Flash存儲器按段分布:主存儲器每段為512個字節(jié),共8段(0~7段);信息存儲器每段為128個字節(jié),共2段(A,B段)。最小擦除單位為1段。主存儲器和信息存儲器的特性除分段大小外基本相同。
2
有3個16位控制寄存器:FCTL1,F(xiàn)CTL2,F(xiàn)CTL3。為了防止誤操作,寫入時高字節(jié)必須為0A5H,但讀出時為096H。
(1)
定義對Flash存儲器的擦/寫操作。
Erase 和MEras 位控制擦除操作,置位后,往定義的區(qū)域范圍內(nèi)任一地址進(jìn)行寫操作(寫入任意數(shù))后該段即被擦除。前者每次只擦除一段,后者擦除所有段。
WRT和SEG WRT位控制寫操作:前者每次寫1個字節(jié),后者可在段內(nèi)連續(xù)寫入。
(2)
定義Flash時鐘發(fā)生器的時鐘源和頻率,一般可取上電復(fù)位時的缺省值。
(3)
指示對Flash存儲器操作過程中的出錯狀態(tài)。
其中,較重要的是BUSY位,置位表示不能對Flash存儲器操作;否則會出錯。在每次進(jìn)行擦/寫操作前都要測試該位。
3
進(jìn)行擦/寫操作的編程電壓(VPP)由片內(nèi)產(chǎn)生;擦/寫時鐘由Flash時鐘發(fā)生器產(chǎn)生。在擦/寫時不能有中斷產(chǎn)生,也不能執(zhí)行位于將被擦/寫區(qū)域的程序。如果想要保留原數(shù)據(jù),應(yīng)在擦除前先把數(shù)據(jù)轉(zhuǎn)存入RAM中,擦除后再寫回。
擦除時,先在FCTL2中設(shè)定時鐘;如果沒有特殊要求,可用上電時的缺省值。然后測FCTL3的BUSY位。等到BUSY復(fù)位,在FCTL1中設(shè)定Erase(1段擦除)或MEras位(多段擦除),再往目標(biāo)地址范圍內(nèi)任一地址寫入任意數(shù)據(jù)后,即完成對這一段的擦除。
寫入操作類似于擦除操作,只是往目標(biāo)地址中寫入的是實際值。
對Flash存儲器的讀操作與RAM和ROM完全一樣。
三、
1.
掉電保護(hù)功能是針對一個工業(yè)時間繼電器設(shè)計的,有關(guān)部分的電路如圖4所示。電源電壓為5V,穩(wěn)壓電壓為3.3V加至F1121的VCC。比較器A的反向輸入端(P2.4)取自分壓電阻(圖中分壓值為20V);同向輸入端為參考電壓,設(shè)為內(nèi)部電壓(由軟件設(shè)定,這里為VCC/2,即1.65V)。正常工作時比較器A輸出為低,由圖中參數(shù)可算出。當(dāng)電源電壓降為4.125V時,VCC仍穩(wěn)定在3.3V;但比較器A輸出將翻轉(zhuǎn),產(chǎn)生中斷。
Flash存儲器寫入時電壓必須保持在2.7~3.6V,因此2.7V是處理的下限。1段(512個字節(jié))的寫入時間為3ms。據(jù)此,可選擇合適的電容,由RC放電電路可得:
式中,V0= 3.3V,V(t)=2.7V,t=3ms,R=5MΩ,則:
經(jīng)實際測試,在取C=1μF時即能正常工作。為可靠起見,可取C=10μF。如果寫入的數(shù)據(jù)較多,需要更長的處理時間,可以加大電容容量,并在供電回路中串接二極管,以限制反向放電。
從正常工作狀態(tài)到臨界狀態(tài),電壓有0.875V(5.0V-4.125V)的緩沖,因此,電源電壓的變動將不會引起誤操作。
2.
程序分為上電復(fù)位初始化程序和掉電中斷處理程序,如圖5及圖6所示。
程序初始化時,必須先讀取掉電保護(hù)標(biāo)志來決定程序流向,然后把掉電標(biāo)志復(fù)位。在中斷處理程序中,對Flash存儲器寫入數(shù)據(jù)前都應(yīng)先擦除標(biāo)志所在區(qū)域;但為節(jié)省中斷處理時間,可在初始化時預(yù)先進(jìn)行擦除操作,以備下一次的掉電處理寫入。
掉電處理程序中必須完成兩件事:掉電保護(hù)標(biāo)志置位(也應(yīng)寫在Flash存儲器中);將待保護(hù)數(shù)據(jù)寫入Flash存儲器中。一般可把數(shù)據(jù)存入信息存儲器中,如果數(shù)據(jù)量大,可寫入沒有被程序占用的主存儲器中。寫入時要關(guān)閉所有中斷,同時對原系統(tǒng)當(dāng)前執(zhí)行的程序作相應(yīng)的現(xiàn)場保護(hù)處理。
應(yīng)用掉電保護(hù)功能的工業(yè)時間繼電器,需保存16字節(jié)預(yù)置參數(shù)和16字節(jié)掉電瞬間運行狀態(tài)參量以及1字節(jié)的掉電保護(hù)標(biāo)志,即總的保存數(shù)據(jù)為33字節(jié)。其中,16字節(jié)的預(yù)置參數(shù)在運行過程中設(shè)定,同時已寫入B段中。因此,中斷處理程序只須將17字節(jié)的狀態(tài)參量寫入A段中。經(jīng)多次實際斷電試驗,工業(yè)時間繼電器均能在重新上電時正確恢復(fù)斷電時的保護(hù)數(shù)據(jù)。
參考文獻(xiàn)
1
評論