提高M(jìn)SP430G單片機(jī)的Flash擦寫(xiě)壽命的方法
Void ChkFstPowerOnInfo(void);
? FlashWrite()用于寫(xiě)Flash,傳遞的形參包括指向待寫(xiě)入數(shù)據(jù)的指針,待寫(xiě)入數(shù)據(jù)在子頁(yè)中的起始字節(jié)編號(hào),寫(xiě)入數(shù)據(jù)的長(zhǎng)度,原型如下。
void FlashWrite( u8 *array, u8 startNum, u8 length );
? FlashErase()用于擦除Flash,傳遞的形參是子頁(yè)的編號(hào),在擦除函數(shù)中需要根據(jù)子頁(yè)的編號(hào)判斷是否需要執(zhí)行頁(yè)的擦除操作,原型如下。
void FlashErase(u8 seg_sn);
2.2.2 軟件流程圖
軟件啟動(dòng)后,初始化模擬EEPROM流程圖描述如下。
調(diào)用API,向模擬EEPROM 寫(xiě)入數(shù)據(jù)的軟件流程如圖五所示。在軟件處理中,要特別注意目標(biāo)指針的切換和保證寫(xiě)入數(shù)據(jù)的正確性,在代碼空間允許的情況下,可以增加一些校驗(yàn)算法來(lái)保證。
采用劃分子頁(yè)的方案總結(jié)如下。
? 每次寫(xiě)入模擬EEPROM的數(shù)據(jù)長(zhǎng)度為定長(zhǎng),即為子頁(yè)的長(zhǎng)度。
? 軟件需要定義一個(gè)存儲(chǔ)變量結(jié)構(gòu)體,用于刷新和同步模擬EEPROM內(nèi)容。在將數(shù)據(jù)寫(xiě)入模擬EEPROM之前,程序員需要按照約定的數(shù)據(jù)格式,在內(nèi)存中將所有的目標(biāo)存儲(chǔ)變量進(jìn)行整理。
? 在軟件處理上,需要計(jì)算當(dāng)前寫(xiě)入和下一次寫(xiě)入的物理地址;在每一次執(zhí)行寫(xiě)入操作后,根據(jù)子頁(yè)長(zhǎng)度大小,將指向子頁(yè)的目的操作指針自動(dòng)累加。
? 待一個(gè)頁(yè)(Page)寫(xiě)滿后,需要將最后更新的模擬EEPROM數(shù)據(jù)拷貝到下一個(gè)頁(yè),再對(duì)寫(xiě)滿頁(yè)執(zhí)行一次擦除操作。
? 在嵌入式軟件處理上需加入合適的校驗(yàn)機(jī)制,保證寫(xiě)入數(shù)據(jù)的正確性并監(jiān)測(cè)用于模擬EEPROM功能的Flash 子頁(yè)是否已經(jīng)失效。
2.3 兩種方案的對(duì)比分析
兩種方案的對(duì)比分析見(jiàn)表二。
表二 兩種方案的對(duì)比分析
評(píng)論