新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 提高 MSP430G 系列單片機的 Flash 擦寫壽命的方法

        提高 MSP430G 系列單片機的 Flash 擦寫壽命的方法

        作者: 時間:2012-12-04 來源:網絡 收藏

        每個頁存在3 種可能狀態:

        擦除態:該頁是空的。

        已寫滿數據狀態:該頁已經寫滿數據。

        有效頁狀態:該頁包含著有效數據并且該頁尚未寫滿,仍可向子頁寫入數據。

        圖三介紹了使用子頁的方式實現 模擬EEPROM的數據處理

        2.2.1 軟件描述

        在軟件實現上,為了便于軟件處理,建議定義一些關鍵宏定義和結構體,指定 模擬EEPROM 的起始、結束地址、頁的大小、子頁的大小、每個頁的子頁數目等參數,同時將需要操作的參數封裝起來,便于軟件操作和管理,不建議定義許多離散的標志變量。

        在軟件操作上, 模擬EEPROM模塊需要提供幾個API 接口給應用程序調用。

        • 通過typedef 關鍵字定義設備類型,typedef unsigned char u8;

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

        Void ChkFstPowerOnInfo(void);

        • FlashWrite()用于寫Flash,傳遞的形參包括指向待寫入數據的指針,待寫入數據在子頁中的起始字節編號,寫入數據的長度,原型如下。

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

        • FlashErase()用于擦除Flash,傳遞的形參是子頁的編號,在擦除函數中需要根據子頁的編號判斷是否需要執行頁的擦除操作,原型如下。

        void FlashErase(u8 seg_sn);

        2.2.2 軟件流程圖

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

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

        采用劃分子頁的方案總結如下。

        • 每次寫入模擬EEPROM的數據長度為定長,即為子頁的長度。

        • 軟件需要定義一個存儲變量結構體,用于刷新和同步模擬EEPROM內容。在將數據寫入模擬EEPROM之前,程序員需要按照約定的數據格式,在內存中將所有的目標存儲變量進行整理。

        • 在軟件處理上,需要計算當前寫入和下一次寫入的物理地址;在每一次執行寫入操作后,根據子頁長度大小,將指向子頁的目的操作指針自動累加。

        • 待一個頁(Page)寫滿后,需要將最后更新的模擬EEPROM數據拷貝到下一個頁,再對寫滿頁執行一次擦除操作。

        • 在嵌入式軟件處理上需加入合適的校驗機制,保證寫入數據的正確性并監測用于模擬EEPROM功能的Flash 子頁是否已經失效。

        2.3 兩種方案的對比分析

        兩種方案的對比分析見表二。

        表二 兩種方案的對比分析

        表二 兩種方案的對比分析

        3. 實際的嵌入式應用

        根據軟件需要,建議采用字節(8bit)做為操作的最小粒度,適用性會更廣泛。

        3.1 Flash 存儲器的提升對于 的Flash 存儲器,可以保證至少10000 次的編程和擦除。如圖六所示。

        圖六 MSP430G 系列單片機Flash 編程和擦除壽命

        圖六 Flash 編程和擦除

        采用劃分小頁結合至少分配2 個大頁的操作方式,則可以大大增加Flash 模擬EEPROM 的壽命。例如,對于 ,如果將每個小頁的尺寸劃分為16 字節,采用2 個大頁(每頁512 字節)作為模擬EEPROM 使用,則可以提供64 個操作子頁((512/16)x2=64),可以保證至少640000 次的壽命。

        3.2 掉電時的異常處理

        如果正在進行Flash 數據存儲時發生掉電,數據可能會保存不成功,存在異常。為了增強健壯性,在軟件處理上,需要考慮設備異常掉電等可能會導致Flash 擦寫失敗的情況。

        在軟件處理中,當成功保存Flash 數據后,再寫入該子頁的狀態標志。上電后,用戶程序將查找最后一次寫入的子頁,再將該子頁的數據內容并恢復到內存中的數據結構中。

        4. 系統可靠性設計

        4.1 時鐘源的選擇

        由于驅動Flash 的時鐘源(ACLK、MCLK、SMCLK)和時鐘頻率可以設定,為了保證在將數據寫入模擬EEPROM時的可靠性,建議在將Flash 的時鐘頻率降低后,再對其進行操作。例如將Flash 的時鐘頻率降低到1MHz 后,進行寫入操作。需要注意,在降低了時鐘頻率后,若此時鐘源也是定時器(Timer)的時鐘源,則可能會影響到定時器的定時準確性,需要軟件上做好處理。

        4.2 代碼在RAM中運行

        由于向Flash 寫入數據操作是通過執行Flash 中程序代碼,對Flash 進行擦除和編程操作。由于對Flash 的編程需要mcu 內部執行一個升壓操作,所以如果有足夠的內存空間,建議將編程、擦除等關鍵代碼拷貝到RAM中運行,可以使用關鍵字__ramfunc 指定,如下圖七所示。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 兴海县| 常熟市| 修武县| 芜湖市| 鸡泽县| 伊金霍洛旗| 澳门| 策勒县| 乐安县| 建宁县| 繁昌县| 蛟河市| 三原县| 松潘县| 清流县| 香港 | 灵宝市| 广元市| 扬中市| 玉门市| 望奎县| 广宗县| 无为县| 竹北市| 金门县| 阳西县| 元氏县| 涿鹿县| 仙游县| 文登市| 越西县| 旬阳县| 鄯善县| 清苑县| 特克斯县| 太保市| 盐津县| 万盛区| 安义县| 武邑县| 万宁市|