新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 提高M(jìn)SP430G系列單片機(jī)的Flash擦寫壽命的方法

提高M(jìn)SP430G系列單片機(jī)的Flash擦寫壽命的方法

作者: 時(shí)間:2012-12-06 來源:網(wǎng)絡(luò) 收藏

2.2 劃分子頁方案

中劃分出至少2 個(gè)頁(Page)用作模擬EEPROM,根據(jù)應(yīng)用需求將需寫入EEPROM 進(jìn)行保存的變量數(shù)據(jù)劃分成一個(gè)定長的數(shù)組(子頁),例如16 個(gè)字節(jié)或者32 字節(jié),將頁劃分成若干子頁后,需對(duì) 中的所有子頁按照地址順序進(jìn)行逐次編號(hào)。每個(gè)子頁的第一個(gè)字節(jié)通常用來指示該子頁的狀態(tài),子頁狀態(tài)可以為:空、已寫入或者失效。

在芯片上電初始化時(shí),首先查找出第一個(gè)尚未寫入數(shù)據(jù)的子頁,并進(jìn)行標(biāo)識(shí),在進(jìn)行寫EEPROM操作時(shí),應(yīng)用程序需將待寫入EEPROM 子頁的所有數(shù)據(jù)按照事先約定好的順序整理好,再一次性將所有變量數(shù)據(jù)寫入空的子頁中,最后將模擬EEPROM 的操作指針指向下一個(gè)空閑的子頁,等待下一次寫入。待將一個(gè)頁的數(shù)據(jù)寫滿后,再進(jìn)行一次擦除操作。需要處理好指向子頁的指針的跳轉(zhuǎn)。

每個(gè)頁存在3 種可能狀態(tài):

擦除態(tài):該頁是空的。

已寫滿數(shù)據(jù)狀態(tài):該頁已經(jīng)寫滿數(shù)據(jù)。

有效頁狀態(tài):該頁包含著有效數(shù)據(jù)并且該頁尚未寫滿,仍可向子頁寫入數(shù)據(jù)。

圖三介紹了使用子頁的方式實(shí)現(xiàn) 模擬EEPROM的數(shù)據(jù)處理方法。

提高M(jìn)SP430G系列單片機(jī)的Flash擦寫壽命的方法

2.2.1 軟件描述

在軟件實(shí)現(xiàn)上,為了便于軟件處理,建議定義一些關(guān)鍵宏定義和結(jié)構(gòu)體,指定Flash 模擬EEPROM 的起始、結(jié)束地址、頁的大小、子頁的大小、每個(gè)頁的子頁數(shù)目等參數(shù),同時(shí)將需要操作的參數(shù)封裝起來,便于軟件操作和管理,不建議定義許多離散的標(biāo)志變量。

提高M(jìn)SP430G系列單片機(jī)的Flash擦寫壽命的方法
提高M(jìn)SP430G系列單片機(jī)的Flash擦寫壽命的方法

在軟件操作上,F(xiàn)lash 模擬EEPROM模塊需要提供幾個(gè)API 接口給應(yīng)用程序調(diào)用。

? 通過typedef 關(guān)鍵字定義設(shè)備類型,typedef unsigned char u8;

? ChkFstPowerOnInfo()用于檢測(cè)芯片是否為第一次上電并初始化EEPROM 參數(shù)到內(nèi)存,原型如下。

Void ChkFstPowerOnInfo(void);

? FlashWrite()用于寫Flash,傳遞的形參包括指向待寫入數(shù)據(jù)的指針,待寫入數(shù)據(jù)在子頁中的起始字節(jié)編號(hào),寫入數(shù)據(jù)的長度,原型如下。

void FlashWrite( u8 *array, u8 startNum, u8 length );

? FlashErase()用于擦除Flash,傳遞的形參是子頁的編號(hào),在擦除函數(shù)中需要根據(jù)子頁的編號(hào)判斷是否需要執(zhí)行頁的擦除操作,原型如下。

void FlashErase(u8 seg_sn);

2.2.2 軟件流程圖

軟件啟動(dòng)后,初始化模擬EEPROM流程圖描述如下。

提高M(jìn)SP430G系列單片機(jī)的Flash擦寫壽命的方法

調(diào)用API,向模擬EEPROM 寫入數(shù)據(jù)的軟件流程如圖五所示。在軟件處理中,要特別注意目標(biāo)指針的切換和保證寫入數(shù)據(jù)的正確性,在代碼空間允許的情況下,可以增加一些校驗(yàn)算法來保證。

pos機(jī)相關(guān)文章:pos機(jī)原理




評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉