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