新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 利用基于閃存的MCU實現用戶數據存儲

        利用基于閃存的MCU實現用戶數據存儲

        作者: 時間:2008-06-11 來源:Maxim公司 Ben Smith 收藏

          第一步有些技巧,因此我們稍詳細地進行介紹。執行這一步的簡單方法是將它分成兩小步:第一步,使用RAM陣列存儲記錄號和陣列中最新記錄的地址;第二步,穿過RAM陣列將最新的記錄拷貝到新的頁。這個過程很快,相對也比較順利。

        本文引用地址:http://www.104case.com/article/84016.htm

          這種方案的問題是所用處理器(見圖1)的RAM為1K字。這種方案將限制可存儲進RAM中的單一數據數量,因為這個RAM還要節省下來用作緩存。這是明顯不能接受的。

          這種解決方案非常耗時,但不管存儲陣列多大(在合理范圍內)都能正常工作。該方案不會在RAM中創建一份指針列表,而是針對每個單一條目(entry)在源陣列中作多次穿越。因此壓縮算法變為:

          1. 從源陣列中讀一個單元;

          2. 在目標陣列中尋找該單元。如果找到了,表示這個單元已經被寫入。增加源指針值,回到第(1)步;

          3. 掃描源陣列尋找單元的最新拷貝;

          4. 將數據單元的最新拷貝寫入目標陣列;

          5. 增加源指針,并回到第(1)步。

          最終,在目標陣列中每個數據單元都有一個唯一的條目。圖4描述了一個已填滿的頁。源頁現在可以被安全地刪除,頁的頭部被寫入到目標陣列。

        圖4:在空間恢復之后的圖2所示數據頁內容

          這個過程的構建使得存儲的數據非常安全。在使用器件時必須面對的危險是寫入或擦除操作期間發生電源故障。

          如果發生電源故障,則有可能一個或多個頁被破壞(在寫入時),或未被完全刪除(在刪除操作時)。但上述壓縮操作本身是安全的。因為:

          1. 如果在寫入操作期間發生電源故障,源頁是完全不受影響的。在電源恢復后,新寫的頁很容易被識別(它們沒有頁頭),將其擦除后重新開始寫入操作。

          2. 如果在舊頁被擦除期間發生電源故障,它們可能包含無效的頭部。這些頁可以被刪除,然后將頭部增加到新的頁中。

          3. 如果在頁頭部被寫入新頁時發生電源故障,數據是不受影響的。頁頭部的更新操作可以重新開始。

          總之,應該沒有什么情況能讓意外事件造成無可挽救地破壞陣列數據。

          性能增強

          目前的存儲子系統沒有差錯檢測機制。在數據單元識別符中目前有6個比特是保留未用的。

          設計師可以使用CRC6算法(x6+x+1)計算整個數據單元的CRC以確保不會產生任何讀或寫錯誤。雖然這不是一個特別可靠的算法(它會從64個多位差錯中漏掉一個),但它能檢測實際中可能發生的大多數差錯。

          上述系統的另外一個限制是讀取訪問時間必需很長。為了尋找最新的記錄,每一次讀取都必須讀遍陣列中的每個記錄。有三種方法可以用來改善訪問時間:

          1. 在數據單元中留一個空的字用于前向指針。當數值更新時,在前向指針中填入指向新條目的內容。這樣這個表可以當作一個鏈接列表。

          2. 向后穿越表格。現在你可以簡單停留在第一次出現的請求單元上。

          3. 如果只有少量的單一單元,可以在上電時就創建一個包含單元ID和指針的RAM陣列。隨后的訪問將非常迅速—只要讀取RAM陣列就可以發現到哪里去獲得數據單元。


        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 建水县| 裕民县| 临高县| 玉溪市| 龙里县| 滨海县| 忻城县| 阿拉善盟| 久治县| 沂南县| 资阳市| 岫岩| 德钦县| 泾源县| 焉耆| 洪雅县| 台南县| 大名县| 牟定县| 思南县| 阆中市| 开封市| 读书| 泾阳县| 五河县| 教育| 孝感市| 霍邱县| 雷波县| 石狮市| 崇文区| 德安县| 个旧市| 司法| 临泉县| 梁山县| 衡南县| 玉田县| 南和县| 公主岭市| 汪清县|