1. 程式人生 > >延長EEPROM使用壽命的程式優化方法

延長EEPROM使用壽命的程式優化方法

文章原始地址:http://feotech.com/?p=67
EEPROM(Electrically Erasable Programmable Read一Only Memory)即電子擦除式只讀儲存器,它是一種非揮發性儲存器,與擦除式只讀儲存器(EPROM)類似,電源消失後,儲存的資料依然存在,要消除儲存在其中的內容,不是用紫外線照射方式,而是以電子訊號直接消除即可。
正是由於EEPROM具有以上特點,該器件可廣泛應用於對資料儲存安全性及可靠性要求高的應用場合,如門禁考勤系統,測量和醫療儀表,非接觸式智慧卡,稅控收款機,預付費電度表或復費率電度表、水錶、煤氣表以及家電遙控器等應用場合。該型別儲存器在可靠資料儲存領域會獲得越來越廣泛的應用。
但是,EEPROM有固定的使用壽命,這是指某一位由1寫為O或由O寫為1的次數。不同廠家的產品,相同廠家不同型號、系列的產品,它們的壽命也不盡相同,100萬次為常見主流產品。假若某EEPROM壽命為100萬次,每秒擦寫一次,則其使用時間為1000000/(3600×24)=12天。這對於需要較長時間儲存資料的應用場合,顯然不滿足要求。

1 延長EEPROM壽命的方法
一般應用中,要儲存的資料比較單一,EEPROM空間與要儲存的資料相比要大得多。為此,可採用一種利用儲存器空間延長EEPROM工作壽命的方法。
方法l:不固定資料存放的地址,而是用一個固定的基地址加上EEPROM內的一個單元的內容(即偏移地址)作為真正的地址;若發現儲存單元已壞(寫入和讀出的內容不同),則偏移地址加1,重新寫入。如果採用100倍的儲存器空間冗餘,可將EEPROM的實際壽命延長100倍。
方法2:從第一個儲存單元開始儲存資料N次,然後轉到下一個單元再存N次,依次類推,當最後一個單元存放N次之後,再轉到第一個單元重新開始。本文推薦採用該法,因為上一種方法存在一個致命缺陷:當某一個EEPROM單元寫壞再用下一個單元時,原先儲存的資料就讀不出來了。本文後面的內容也依此作根據進行闡釋。

2 EEPROM資料儲存地址的確認
嵌入式系統中的EEPROM電源消失後,儲存的資料依然存在。確認資料所存地址是能夠正確將所存資料讀出的基本條件,但是掉電後再上電時如何確認資料的地址指標呢?可以採用以下的方法。
2.1 找最大資料法
查詢EEPROM中的最大資料,就是掉電前最後一次儲存的資料。該法對於微控制器來講,程式設計時程式量較大,可採用折半查詢法或分塊查詢法降低程式程式碼量。
2.2用後還原法
迴圈將當前資料寫入EEPROM後,立即將前面的EEPROM空間都清0再上電,查詢資料非0的EEPROM空間即可。有的微控制器要求在寫入資料之前,必須將所有空間都恢復為OxFF,這樣查詢非0xFF的資料空間即可。
2.3地址指標法
為每一個數據在EEPROM中設一個地址指標EE—ADR[i],這樣只要確認EEADR[i]數值即可找到相應資料。對於地址指標法有下述一些技巧。
①一個地址指標對應一個數據。該方法思路簡單,假設EEPROM空間可以存放50組資料和50個地址ADR[i],一組資料佔用4個位元組,一個地址佔用1個位元組,共250位元組,在儲存資料時,使50個地址指向50組資料的首地址,且使小於變數i的ADR[i]都清零,或重新賦值為0xFF。查詢資料時,找到非O或非0xFF的ADR[i],然後根據ADR[i]的值來確定資料的儲存地址即可。
②用兩個變數來記錄資料儲存的地址,ADDR一0LD和ADDILNEW分別標誌當前資料讀出時的地址和新採集來的資料下一次要儲存的地址。

③用一個位元組的EEPROM空間作為地址指標。此時,地址指標的數值總是和資料儲存的地址值相等,此種情況最具有技巧性,因為此時可以使用最少的地址指標,因而可以最大量的節省。EEPROM空間,從而延長EEP—ROM壽命。此方法的思路是:假設第O位元組作為地址指標,當該指標值為1時,資料從第一個地址開始儲存;為2時,資料從第二個地址開始儲存,依此類推。