提高M(jìn)SP430G 系列單片機(jī)的Flash 擦寫壽命方法
2.2.1 軟件描述
本文引用地址:http://www.ex-cimer.com/article/263652.htm在軟件實現(xiàn)上,為了便于軟件處理,建議定義一些關(guān)鍵宏定義和結(jié)構(gòu)體,指定 Flash 模擬
EEPROM 的起始、結(jié)束地址、頁的大小、子頁的大小、每個頁的子頁數(shù)目等參數(shù),同時將需要操作的參數(shù)封裝起來,便于軟件操作和管理,不建議定義許多離散的標(biāo)志變量。
在軟件操作上,Flash 模擬EEPROM 模塊需要提供幾個API 接口給應(yīng)用程序調(diào)用。
通過typedef 關(guān)鍵字定義設(shè)備類型,typedef unsigned char u8;
ChkFstPowerOnInfo()用于檢測芯片是否為第一次上電并初始化 EEPROM 參數(shù)到內(nèi)存,原型如下。
Void ChkFstPowerOnInfo(void);
FlashWrite()用于寫 Flash,傳遞的形參包括指向待寫入數(shù)據(jù)的指針,待寫入數(shù)據(jù)在子頁中的起始字節(jié)編號,寫入數(shù)據(jù)的長度,原型如下。
void FlashWrite( u8 *array, u8 startNum, u8 length );
FlashErase()用于擦除 Flash,傳遞的形參是子頁的編號,在擦除函數(shù)中需要根據(jù)子頁的編號判斷是否需要執(zhí)行頁的擦除操作,原型如下。
void FlashErase(u8 seg_sn);
2.2.2 軟件流程圖
軟件啟動后,初始化模擬EEPROM 流程圖描述如下。
圖四 初始化流程圖
調(diào)用 API,向模擬 EEPROM 寫入數(shù)據(jù)的軟件流程如圖五所示。在軟件處理中,要特別注意目標(biāo)指針的切換和保證寫入數(shù)據(jù)的正確性,在代碼空間允許的情況下,可以增加一些校驗算法來保證。
圖五 寫入模擬EEPROM 數(shù)據(jù)流程
采用劃分子頁的方案總結(jié)如下。
每次寫入模擬EEPROM 的數(shù)據(jù)長度為定長,即為子頁的長度。
軟件需要定義一個存儲變量結(jié)構(gòu)體,用于刷新和同步模擬EEPROM 內(nèi)容。在將數(shù)據(jù)寫入模擬EEPROM 之前,程序員需要按照約定的數(shù)據(jù)格式,在內(nèi)存中將所有的目標(biāo)存儲變量進(jìn)行整理。
在軟件處理上,需要計算當(dāng)前寫入和下一次寫入的物理地址;在每一次執(zhí)行寫入操作后,根據(jù)子頁長度大小,將指向子頁的目的操作指針自動累加。
待一個頁(Page)寫滿后,需要將最后更新的模擬EEPROM 數(shù)據(jù)拷貝到下一個頁,再對寫滿頁執(zhí)行一次擦除操作。
在嵌入式軟件處理上需加入合適的校驗機(jī)制,保證寫入數(shù)據(jù)的正確性并監(jiān)測用于模擬EEPROM功能的Flash 子頁是否已經(jīng)失效。
2.3 兩種方案的對比分析
兩種方案的對比分析見表二。
表二 兩種方案的對比分析
3.實際的嵌入式應(yīng)用
根據(jù)軟件需要,建議采用字節(jié)(8bit)做為操作的最小粒度,適用性會更廣泛。
3.1 Flash 存儲器擦寫壽命的提升
對于MSP430G 系列的Flash 存儲器,可以保證至少10000 次的編程和擦除壽命。如圖六所示。
圖六 MSP430G 系列單片機(jī)Flash 編程和擦除壽命
采用劃分小頁結(jié)合至少分配2 個大頁的操作方式,則可以大大增加Flash 模擬EEPROM 的擦寫壽命。例如,對于MSP430G 系列單片機(jī),如果將每個小頁的尺寸劃分為16 字節(jié),采用2 個大頁(每頁512 字節(jié))作為模擬 EEPROM 使用,則可以提供 64 個操作子頁((512/16)x2=64),可以保證至少640000 次的擦寫壽命。
3.2 掉電時的異常處理
如果正在進(jìn)行Flash 數(shù)據(jù)存儲時發(fā)生掉電,數(shù)據(jù)可能會保存不成功,存在異常。為了增強(qiáng)健壯性,在軟件處理上,需要考慮設(shè)備異常掉電等可能會導(dǎo)致Flash 擦寫失敗的情況。
在軟件處理中,當(dāng)成功保存Flash 數(shù)據(jù)后,再寫入該子頁的狀態(tài)標(biāo)志。單片機(jī)上電后,用戶程序?qū)⒉檎易詈笠淮螌懭氲淖禹?,再將該子頁的?shù)據(jù)內(nèi)容并恢復(fù)到內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)中。
4. 系統(tǒng)可靠性設(shè)計
4.1 時鐘源的選擇
由于驅(qū)動Flash 的時鐘源(ACLK、MCLK、SMCLK)和時鐘頻率可以設(shè)定,為了保證在將數(shù)據(jù)寫入模擬EEPROM 時的可靠性,建議在將Flash 的時鐘頻率降低后,再對其進(jìn)行操作。例如將Flash 的時鐘頻率降低到1MHz 后,進(jìn)行寫入操作。需要注意,在降低了時鐘頻率后,若此時鐘源也是定時器(Timer)的時鐘源,則可能會影響到定時器的定時準(zhǔn)確性,需要軟件上做好處理。
4.2 代碼在RAM 中運行
由于向Flash 寫入數(shù)據(jù)操作是通過執(zhí)行Flash 中程序代碼,對Flash 進(jìn)行擦除和編程操作。由于對Flash 的編程需要mcu 內(nèi)部執(zhí)行一個升壓操作,所以如果有足夠的內(nèi)存空間,建議將編程、擦除等關(guān)鍵代碼拷貝到RAM 中運行,可以使用關(guān)鍵字__ramfunc 指定,如下圖七所示。
圖七 使用關(guān)鍵字__ramfunc 將程序指定到Ram 中運行
5.總結(jié)
本文從軟件方面,以及安全性方面探討了使用MSP430G 系列單片機(jī)在使用Flash 模擬EEPROM方面的應(yīng)用,提供了兩種不同的方式供選擇。兩種方式都可以大幅度提高模擬EEPROM 的編寫、擦除壽命,并且滿足高可靠性的應(yīng)用設(shè)計,用戶可以結(jié)合具體的應(yīng)用進(jìn)行選擇。
存儲器相關(guān)文章:存儲器原理
評論