關於FLASH延長寫壽命演算法

2021-06-20 12:57:37 字數 1152 閱讀 3210

假定現在有乙個產品,需要儲存一些引數,引數的個數並不多,總共為10個位元組,用eeprom來儲存就可以滿足需求,我們選用了容量為256位元組的 eeprom,如果我們不做過多考慮,很有可能就是直接將這10個位元組從eeprom的首位址開始儲存,每次改寫也是直接修改這部分內容,這樣我們最多可 以儲存引數10萬次。只要我們做一點簡單處理,就可以將儲存引數的次數成倍增加,來看看我們應該如何實現。

直接儲存的最簡方法:

位址 0x00   0x01   0x02   ...  0x09 

內容 data1 data2 data3  ...  data10

改進的儲存方法:

處理方法是將256位元組按16位元組大小分成16等份,按後面格式儲存引數

位址 0x10*n +0x00 +0x01  +0x02 ... +0x09  +0x0a  +0x0b +0x0c  +0x0d +0x0e +0x0f

內容                  flag     data1 data2 ...  data9  data10 保留1  保留2  保留3   保留4  check_sum

check_sum=(flag+data1+data2+...+data10+保留1+...+保留4 )&0xff

flag為0xa5表示當前16個位元組為正在使用的記錄,為其它值表示當前16位元組已經丟棄

讀取引數的時候先從位址0x10*n+0x00讀flag,如果為0xa5表明當前記錄為正在使用中,讀出全部內容,並按前面公式進行校驗,如果校驗出 錯,則當前引數不可靠,直接使用預設引數,並將當前區域的flag改寫為0,同時在位址0x10*(n+1)位置開始將預設引數寫入,位址0x10* (n+1)寫入內容為0xa5。如果所有區域都沒有發現有效記錄,在位址0寫入預設引數。

每次需要更改引數設定時,先將當前記錄位置的flag改為0,然後再下一條記錄位置寫入新的引數,這個順序可以做出適當改進,比如對寫入時斷電等意外情況 做出考慮,從而得到更可靠的寫入結果,不過就按此方法也都可以滿足應用需求。

再來對比一下兩種方法,最簡方法只能儲存10萬次,改進的方法理論上增加了16倍,達到160萬次,如果預估最簡方法產品是3年內絕對不會出錯,現在就增 加到了48年,乙個電子產品使用超過3年還是有可能,但用48年的可能性就非常之小,可以視同為0。對於flash晶元也是同樣道理,這裡就不重複舉例說 明,在應用中也應該做出同樣的處理。

原文:

關於呼叫flash

5up3rh3iblog 前段時間在gareth heyes的微薄上看到一條資訊 這個可以在webkit下工作.又是一條新的xss規則。於是測試了下qqmail 和126mail都可以工作 qqmail現在已經fix了 奇怪的是,gareth heyes是怎麼發現這個的呢?fuzz?於是我用我以前搞...

使用FlashWrite燒寫FLASH

這裡所指的 flashwrite 是與banyan u arm 器配套及其後台服務程式配套使用的 flash 燒寫工具,可以通過 器的 jtag 介面將程式燒寫到 flash 儲存器中。使用flashwrite 之前要先執行 banyan daemon 在配置和初始化目標板之後,才能將程式燒寫到 f...

關於flash的總結

1 書寫規範 package 繼承的sprite和movieclip的區別 sprite 是不使用時間軸的使用者介面 ui 元件的邏輯基類。movieclip movieclip 類從以下類繼承而來 sprite displayobjectcontainer interactiveobject di...