新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > AVR內部EEPROM數據丟失問題的原因與解決方案

        AVR內部EEPROM數據丟失問題的原因與解決方案

        作者: 時間:2012-08-16 來源:網絡 收藏


        1.Mega168512字節,把分為兩個區,每個區256個字節,然后以8個字節為一個段,那么每個區就有32段。
        數據區:0x000-0x0FF
        0段:0x000-0x007
        1段:0x008-0x00F
        ……
        31段:0x0F8-0x0FF

        備份區:0x100-0x1FF

        每個段8個字節,其中前6個字節為有效數據,后2個字節為CRC16校驗,數據格式下圖所示:

        點擊瀏覽下一頁

        2.讀寫操作
        EEPROM的操作以段為單位,
        段寫入函數:寫數據到數據區時,先計算數據CRC16校驗,然后同時把數據寫入到數據區和備份區;
        段讀取函數:讀取數據時,同時讀取數據區以及備份區,如果數據區校驗有誤,備份區數據校驗正確,就用備份區數據恢復數據區數據;

        如果備份區數據有誤,數據區數據正確,那么數據寫入備份區重新備份;如果數據區備份區數據都有誤,那么返回讀取失敗。

        3.數據區與備份區的對應關系
        數據讀寫操作以段進行,內部的數據區與備份區怎么映射呢?為了防治數據與備份同時被意外修改,那么數據與備份地址空間相隔不能太

        近,并且數據與備份的地址,應該盡量不同。假設數據地址為Data_Addr,備份地址為Bakup_Addr,我使用下面的函數映射地址:
        Bakup_Addr=(Data_Addr+0x100)^0x03F
        加0x100是把地址定義到備份區,與0x03F異或,是把低6bits取反,這樣處理,數據與備份的地址空間較遠,并且地址有7bits的不同。
        例如,第3段的地址:0x018-0x01F,
        對應的備份區為:0x127-0x120
        如下圖所示:
        點擊瀏覽下一頁

        4.讀寫函數加入寫保護判斷,在讀寫EEPROM前關閉寫保護,讀寫完畢后,立即開啟寫保護,這樣可以有效防止程序跑飛造成的EEPROM意外修改



        5.第0塊建議禁止使用。


        上一頁 1 2 下一頁

        關鍵詞: AVR EEPROM 數據丟失

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 兴隆县| 屏边| 太康县| 新和县| 台山市| 淳安县| 尼勒克县| 南昌市| 灵武市| 旌德县| 太白县| 巴彦县| 靖江市| 榕江县| 南漳县| 蕲春县| 武陟县| 华坪县| 卢氏县| 南昌市| 佛学| 正定县| 屏东县| 南充市| 永安市| 桃园市| 达尔| 砀山县| 和田市| 海安县| 安岳县| 固安县| 新密市| 吉隆县| 盘锦市| 阆中市| 白银市| 资溪县| 湖南省| 嘉义县| 深州市|