<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 利用基于閃存的MCU實(shí)現用戶(hù)數據存儲

利用基于閃存的MCU實(shí)現用戶(hù)數據存儲

作者: 時(shí)間:2008-06-11 來(lái)源:Maxim公司 Ben Smith 收藏

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

本文引用地址:http://dyxdggzs.com/article/84016.htm

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

  這種解決方案非常耗時(shí),但不管存儲陣列多大(在合理范圍內)都能正常工作。該方案不會(huì )在RAM中創(chuàng )建一份指針列表,而是針對每個(gè)單一條目(entry)在源陣列中作多次穿越。因此壓縮算法變?yōu)椋?/p>

  1. 從源陣列中讀一個(gè)單元;

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

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

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

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

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

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

  這個(gè)過(guò)程的構建使得存儲的數據非常安全。在使用器件時(shí)必須面對的危險是寫(xiě)入或擦除操作期間發(fā)生電源故障。

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

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

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

  3. 如果在頁(yè)頭部被寫(xiě)入新頁(yè)時(shí)發(fā)生電源故障,數據是不受影響的。頁(yè)頭部的更新操作可以重新開(kāi)始。

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

  性能增強

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

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

  上述系統的另外一個(gè)限制是讀取訪(fǎng)問(wèn)時(shí)間必需很長(cháng)。為了尋找最新的記錄,每一次讀取都必須讀遍陣列中的每個(gè)記錄。有三種方法可以用來(lái)改善訪(fǎng)問(wèn)時(shí)間:

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

  2. 向后穿越表格?,F在你可以簡(jiǎn)單停留在第一次出現的請求單元上。

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


上一頁(yè) 1 2 3 下一頁(yè)

關(guān)鍵詞: 閃存 MCU 微控制器 EEPROM

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>