EPROM是可編程器件,主流�(chǎn)品是采用雙層�(二層poly)結構,主要結構如圖所�:
浮柵中沒有電子注入時,在控制柵加電壓時,浮柵中的電子跑到上層,下層出現(xiàn)空穴�
由于感應,便會吸引電子,并開啟溝��
如果浮柵中有電子的注入時,即加大的管子的閾值電壓,溝道處于關閉狀�(tài).這樣就達成了開關功能�
如圖2所�,這是EPROM的寫入過�,在漏極加高壓,電子從源極流向漏極溝道充分開啟.在高壓的作用�,電子的拉力加強,能量使電子的溫度極度上升,變?yōu)闊犭�?hot electrON).這種電子幾乎不受原子的振動作用引起的散射,在受控制柵的施加的高壓時,熱電子使能躍過SiO2的勢�,注入到浮柵中�
在沒有別的外力的情況�,電子會很好的保持�.在需要消去電子時,利用紫外線進行照射,給電子足夠的能量,逃逸出浮柵�
EEPROM的寫入過�,是利用了隧道效�,即能量小于能量勢壘的電子能夠穿越勢壘到達另一��
量子力學認為物理尺寸與電子自由程相當�,電子將呈現(xiàn)波動�,這里就是表明物體要足夠的小�
就pn結來�,當p和n的雜�(zhì)濃度達到一定水平時,并且空間電荷極少時,電子就會因隧道效應向導帶遷��
電子的能量處于某個級別允許級別的范圍稱為"�",較低的能帶稱為價�,較高的能帶稱為導��
電子到達較高的導帶時就可以在原子間自由的運動,這種運動就是電流�
EEPROM寫入過程,如圖3所�,根據(jù)隧道效應,包圍浮柵的SiO2,必須極薄以降低勢��
源漏極接�,處于導通狀�(tài).在控制柵上施加高于閾值電壓的高壓,以減少電場作�,吸引電子穿越�
要達到消去電子的要求,EEPROM也是通過隧道效應達成�.如圖4所�,在漏極加高壓,控制柵為0V,翻轉拉力方�,將電子從浮柵中拉出。這個動�,如果控制不�,會出現(xiàn)過消去的結果�
全球各單片機生產(chǎn)廠商在MCS-51�(nèi)核基礎上,派生了大量的51�(nèi)核系列單片機,極大地豐富了MCS-51的種�,致使MCS-51單片機是目前國內(nèi)應用最廣泛的一種單片機�.其中STC公司推出了STC89系列單片�,增加了大量新功能,提高�51的性能,是MCS-51家族中的佼佼�.早期的單片機控制系統(tǒng),采用單片機加片外EEPROM配合,來存儲一些需要預置的重要參數(shù),并在�(shù)碼管上顯示出�.由于單片機控制的整流器要求實時性很�,而早期EEPROM的寫周期�10 ms左右,因此運行參數(shù)的預置是在整流器待機的情況下進行�.而很多情況下需要在運行的同時記錄數(shù)�(jù),如用單片機控制的12脈波汽車電泳整流器要求在運行的同時實時記錄重要數(shù)�(jù),而且在掉電時不丟�.由于�12脈波整流器中運行的單片機程序,其周期必須小�1.67 ms(交流電網(wǎng)�1個周期是20 ms,除以12就是l[_]67 ms),這就要求實時記錄的時間在1ms以下甚至更短(考慮到程序的�(zhí)行時�).�(jīng)查閱資料�(fā)�(xiàn),目前很多EEPROM達不到這個要求[1],即使時間最短的AT89S8252單片機片�(nèi).EEP-ROM的寫周期也是2.5 ms.本文通過對EEPROM的巧妙應�,實現(xiàn)了整流器在線記錄�(shù)�(jù)的功能�
1 尋找符合要求的單片機
設備使用的是Atmel公司的AT89C52(40DIP封裝)單片機和EEPROM芯片2817A.要想在不改變原設備電路板的情況下完成要求的功�,就只能在兼容的MCS-51系列單片機中想辦�.AT89S8252片內(nèi)含有2 KB的EEPROM,�(jīng)編程測試�(fā)�(xiàn),它雖然能實時記錄�(shù)�(jù)并且斷電不丟�,但是在向片內(nèi)EEPROM中記�1個數(shù)�(jù)�,能引起輸出電壓和電流的波�,不能滿足實際運行的需�.其原因是AT89S8252單片機片�(nèi)EEPROM的寫周期�2.5 ms,超過�1.67 ms的程序的�(zhí)行周�,從而影響了程序的正常運�.所以執(zhí)行周期是解決問題的關��
STC89C51RC/RD+系列單片機片�(nèi)含有EEPROM(Data Flash),讀1個字節(jié)/編程1個字節(jié)/擦除1個扇區(qū)(512字節(jié))的時間分別為10/μs/60μs/10 ms.編程1個字節(jié)的時間為60μs,遠小于AT89S8252片內(nèi)EEPROM 2.5 ms的編程時�,這為解決問題提供了思路�
2問題的解�
單片機STC89C55RD+(40DIP封裝),其引�、功能完全與AT89C52兼容,與MCS-51程序也兼�,片內(nèi)含有20KB的Flash程序存儲�,16KB的EEPROM�(shù)�(jù)存儲�.把原用于AT89C52中的程序寫到STC89C255RD+�,放到原設備上運行,可長期穩(wěn)定地運行.�(jīng)修改的在整流器中運行的單片機程序,實時記錄一些數(shù)�(jù)到STC289C55RD+的EEPROM�,整流器可正常運行,但不能執(zhí)行扇區(qū)擦除操作.�(zhí)行扇區(qū)擦除操作將嚴重影響整流器的正常運�,引起輸出電壓和電流的很大波動.�(zhí)行扇區(qū)擦除操作�,從示波器來看整流器的輸出間斷�20 ms,電壓電流顯示很大的波�.用示波器捕捉到了EEPROM寫時的波�,輸出波形暫停�20 ms,1個周波電�,電壓波形如圖1所�,不執(zhí)行扇區(qū)擦除操作時的波形如圖2所�.從圖中可以看�,問題得到了很好的解決�
究其原因,這與EEPROM的特點有�.STC89C5lRC/RD+系列單片機片�(nèi)的EEPROM,與普通的EEPROM不同.普通的EEPROM有字節(jié)讀/寫功�,不需要擦�,在字節(jié)寫的時候自動擦�.而STC89C51RC/RD+系列單片機片�(nèi)的EEPROM,具有Flash的特�,只能在擦除了扇區(qū)后進行字節(jié)�,寫過的字節(jié)中不能重復寫,只有待扇區(qū)擦除后才能重新寫,而且沒有字節(jié)擦除功能,只能扇區(qū)擦除�
3 EEPROM(Data FIash)的巧妙應�
基于以上EEPROM(Data Flash)不易擦除的特�,可以寫后先不擦除.利用EEPROM(Data Flash)容易寫、時間短(字節(jié)寫只�60 μs)的特�,可以充分利用其寫的功�.根據(jù)汽車電泳整流器的特點:每泳1輛汽�,整流器的輸出電流就從0逐漸上升到電�,然后又逐漸回到0.從電流的變化可以準確地識別出電泳過的車的�(shù)�.每識別出1輛車,就在EEPROM(Data Flash)�1個字節(jié)�(起始地址�0000H)寫入#01H(也可以是其他�(shù),但不能為#OFFH),然后地址自動�1,等待識別出下一輛車.這樣就通過EEPROM(Data Flash)字節(jié)地址的方�,間接記錄了汽車電泳整流器電泳過的車輛總數(shù),并可在數(shù)碼管上顯示出�.16 KB的EEPROM(Data Flash)可記�16 384輛車.待將計滿�,可按擦除按鈕擦除EEP-ROM(Data Flash)中的所有扇區(qū),再重新計�(shù).如按�10分鐘電泳1輛車,1天工�16小時,可連續(xù)記錄16 384/60/10×16)=170�.此種方法也可用于對電泳整流器連續(xù)工作時間的累�,如每10分鐘記錄1個數(shù)�(jù),可連續(xù)記錄16 384/(60/10)=2 730小時�
整流器停機斷電后,每次開機給單片機上電�,在初始化程序�,首先從地址#0000H讀片內(nèi)EEPROM的數(shù)�(jù),如果�(shù)�(jù)不為#OFFH,地址自動�1,再讀下一個字節(jié),直到所讀�(shù)�(jù)�#OFFH為止.此時EEPROM的地址指針�(shù)�(jù),即為前面累加的電泳車輛數(shù)(或累計電泳工作時�),可在�(shù)碼管上顯示出�.整流器工作后,按前�
結語
結合上產(chǎn)的實際情�,在不改變原設備電路板的情況下,通過使用MCS-51系列兼容單片機STC89C55RD+,巧妙利用其片�(nèi)EEPROM,實現(xiàn)了在整流器運行的同時記錄�(shù)�(jù)的功�,切掉點情況下不丟失數(shù)�(jù).這種方法有效地提高了原設備的功能,給用戶的使用到來了極大的方便,并且通過實驗驗證了此方法是可行的�
介紹
在嵌入式微控制器應用�,通常都要用到非易失性存儲器.無論是掉電時維持需要保存的設置,還是存儲公司的重要記�,可靠的非易失性存儲器都是�(xiàn)代微控制器領域的一個基本單��
非易失性存儲常常采用外部串行存儲器實現(xiàn).多年以來,該領域用到了�(shù)十億顆類似存儲器�,它們的可靠性得到了的廣泛認�.目前,存儲器可以做到幾百字節(jié)�1兆字節(jié)甚至更大的容�,在每一個需要保持設置的設備�,都能找到這樣一個緊�、廉價的器件�
包括EEPROM、閃存和旋轉式存儲器在內(nèi),所有類型的非易失性存儲器都面臨一個共同的問題:寫周期被中斷�,�(shù)�(jù)會丟�.一旦在寫周期執(zhí)行過程中掉電,那么即使再恢復電�,也很難修復損壞的�(shù)�(jù). 本文提出了一種基于事務的提交-回退機制,用于保護一個外部串行EEPROM存儲器件的內(nèi)�.這些措施同樣適用于大多數(shù)MAXQ微控制器的內(nèi)置EEPROM.可以下載本應用的代碼文件(ZIP,20.5kb)�
I2C EEPROM的特�
串行存儲器件有多種接�,但最常用的接口是I2C接口.這種總線接口有很多優(yōu)�:高度標準化的接口;控制器和存儲器之間只需兩條�;而且具有靈活的時序要�,可以由軟件驅�.一個I2C主機可以驅動很多I2C從機,從而減少了主機的引腳數(shù)�
在所有EEPROM器件�,寫周期都要比讀周期長的�.因為在寫周期過程�,電荷需要借助隧道效應并通過絕緣層進行轉移,而這個過程很費時�.雖然增加電壓可以加快這個過�,但是過高的電壓會導致絕緣層的介質(zhì)擊穿,從而損壞器�.典型的EEPROM器件寫周期持�(xù)10毫秒左右;而讀周期通常需要幾百個納��
為了顯著縮短寫周期的時間,許多I2C EEPROM器件采用頁面模式.該模式允許將多個字節(jié)傳送到緩存�,然后將數(shù)�(jù)一次性寫入存儲區(qū).I2C存儲器件的典型頁面尺寸為32字節(jié).因此,可以在一個寫周期�(nèi)向EEPROM填入32個字節(jié)�
這一點非常重�,因為串行EEPROM器件都具有特定的耐久�:即每個頁面所能承受的寫周期次�(shù)上限.典型的寫周期次數(shù)�10,000�1,000,000�.然�,即使存儲器件能夠承受1百萬次寫周期,軟件也會很快將其損耗殆�.軟件每秒僅執(zhí)�100次寫周期,那么不到3個小時就會耗盡器件的寫周期次數(shù)�
考慮到這些基本的EEPROM特�,設計者為一個嵌入式處理器設計可靠的非易失存儲系�(tǒng)�,需切記以下幾點:
不要在同一頁面上反復執(zhí)行寫操作.尤其是不要將某個頁面設置成寫入任何其它頁面時都要更新的"目錄"�
如果在寫周期過程中電源被中斷,必須提供以下機制:(1) 檢測被中斷的寫操�;(2) 完成被中斷的操作;(3) 或者將事件回退至寫操作之前的狀�(tài)�
必須通過某些�(shù)�(jù)校驗機制(校驗�、CRC或消息摘�)來保證數(shù)�(jù)的完整性�
設計目標
雖然上面提到的EEPROM問題可通過多種非易失文件系�(tǒng)加以解決,但這樣的文件機制對于小型嵌入式微控制器來說負擔過重.很多文件系統(tǒng)需要更多的RAM,遠遠超出了小型微控制器所能提供的容量,而且對于多數(shù)應用,也不需要一個完整的文件系統(tǒng)�
考慮到這一�,下面列出了EEPROM�(shù)�(jù)保護機制的設計目�:
精簡:保護機制用于存儲校驗�(shù)�(jù)的空間不應超過EEPROM�10[%],它應該只需要少量的計算開銷�
塊大�:被保護的塊大�,應該和EEPROM的寫操作頁面大小一�.由于EEPROM器件的頁面大小通常�2的偶�(shù)次冪,因此與每個塊保留1�2個字節(jié)的做法相�,相同的尺寸大小更便于軟件編碼�
耐久�:每個保護周期不要對同一頁面進行寫操��
可靠�:每次掉電情況�,�(shù)�(jù)都應是可恢復��
這里提到的保護機制有6個接口函�(shù):讀、寫、提�、回退、檢查和清理�
讀函數(shù)接收一個塊編號和一個指�32字節(jié)緩存的指�.如果緩存地址和塊編號處于有效范圍�(nèi),程序就會將指定的塊數(shù)�(jù)讀入緩�,并校驗數(shù)�(jù)的有效�.它會返回如下狀�(tài):有效讀(valid read)、無效讀(invalid read)、無效緩存地址(invalid buffer address)、無效頁面編�(invalid page number)或保護失�(protectiON failure)�
寫函�(shù)接收一個塊編號和一個指向填好數(shù)�(jù)�32字節(jié)緩存的指�.如果緩存地址和塊編號處于有效范圍�(nèi),程序就會將數(shù)�(jù)寫入非易失性緩�,并標記緩存狀�(tài)以準備提��
提交和回退函數(shù),是可以在寫操作之后執(zhí)行的互補型操�.提交函數(shù)將最近被寫入的緩存數(shù)�(jù)復制到對應的存儲區(qū)最終位�,并為下一個待寫入的數(shù)�(jù)塊準備好緩存結構.回退函數(shù)實際上就是一�"取消"操作.它消除最近一次寫操作�(chǎn)生的效果,并為下一個寫操作準備好緩存子系統(tǒng). 檢查函數(shù)讀取存儲器件的每個數(shù)�(jù)�,并檢查存儲數(shù)�(jù)的有效�.該函�(shù)還檢查緩存子系統(tǒng),以確保沒有未�(zhí)行的寫操�.任何無效塊或未執(zhí)行的寫操作都會使檢查函數(shù)返回一個錯誤狀�(tài)�
清理函數(shù)修復一個數(shù)�(jù)損壞的EEPROM.實際�,它將試圖找出�(fā)生的錯誤,并采取相應的解決措施�
關于這些函數(shù)的更多細節(jié),參見下面的操作詳��
�1. EEPROM存儲器的結構.存儲器被劃分�3個區(qū)�:主存儲區(qū),包含實際用戶�(shù)�(jù);校驗存儲區(qū),包含主存儲區(qū)�1頁的CRC;緩存,包含存儲臨時寫入�(shù)�(jù)的四個緩��
EEPROM結構
參考上面圖1給出的EEPROM結構.EEPROM包含三個主要區(qū)�:
主存儲區(qū):EEPROM的區(qū)域用于存儲用戶數(shù)�(jù).在一�16kB器件�(nèi),包括512�、每�32字節(jié)的存儲空�.在這樣的器件中,開始�473個頁面專門用來存儲�(shù)�(jù)�
校驗存儲區(qū):EEPROM的第二個部�,用于校驗主存儲區(qū)每個頁面的�(shù)�(jù).校驗存儲區(qū)的每1頁都包含15�16位的CRC�.�1頁的1個CRC用于校驗本頁�(shù)�(jù).校驗存儲區(qū)占用31�(�473�503�)�
緩存:EEPROM的部�,包含�8個頁面構成的4個寫緩存.每個緩存包�4個域:�(shù)�(jù)�,它包�32字節(jié)�(shù)�(jù),�(zhí)行下一個提交命令時,�(shù)�(jù)將被寫入主存儲區(qū);地址�,它表示緩存數(shù)�(jù)要寫入的頁面地址;狀�(tài)�,它表示緩存的狀�(tài)(包括可用(available)、占�(occupied)和終�(expired)狀�(tài));16位CRC�,用來校驗整個寫緩存.緩存結構見圖1所示�
這種EEPROM結構可以實現(xiàn)主要的設計目�.首先,由于主存儲區(qū)�1頁數(shù)�(jù)的校驗結果都存儲在另一個位�,所以頁面的所有位都用于存儲用戶數(shù)�(jù).其次,由于主存儲區(qū)的每1頁都通過校驗存儲區(qū)的特定字來校�,因此校驗存儲區(qū)不會有單點錯�,并且也不會在每個寫周期中都去更新整個校驗存儲區(qū)的同一頁面.,使用4個寫緩存分散了寫周期帶來的損��
操作詳解
對于一個不帶保護功能的EEPROM,具體操作非常簡單.一個讀周期簡單地將字節(jié)從所選擇的地址傳送給主機;一個寫周期將字節(jié)從主機寫入EEPROM,并等待操作完�(大多�(shù)器件需要幾個毫秒的時間).然�,在一個提供保護的EEPROM�(huán)境下,讀和寫操作就比較復雜了.在以下各節(jié)�,對每個操作進行了分�,以便了解函數(shù)被調(diào)用時到底是如何操作的�
讀操作
�2. 讀操作的流程圖
讀操作這個最簡單的接口函�(shù),也是相當復雜�.�2給出了操作流�:
檢查頁面地址和緩存地址,以檢驗它們的有效�.如果地址無效,則就此結束操�,函數(shù)返回一個無效緩存地址或無效頁面編號錯誤代��
將所選頁面讀入緩��
計算校驗頁面的地址,并將相應的校驗頁面讀入暫存區(qū)�
計算校驗頁面的CRC.如果校驗頁面的數(shù)�(jù)無效,則返回一個保護失敗錯誤代��
計算�(shù)�(jù)緩存的CRC,并將其與暫存區(qū)中對應讀取頁面的CRC進行比較.如果CRC匹配,則程序返回有效讀代碼;如果CRC不匹�,則程序返回無效讀代碼.無論結果怎樣,實際讀取的�(shù)�(jù)都保存在返回緩存�,以供�(diào)用讀操作的程序使用�
寫操�
�3. 寫操作的流程�
如上所�,寫操作并不是真正將數(shù)�(jù)寫入主存儲區(qū).實際�,寫操作是將數(shù)�(jù)寫入4個緩存之一.在這種方式�,主存儲區(qū)�(nèi)原先的數(shù)�(jù)將一直保持到整個有效寫操作流程完成后為�.�3的流程說明了以下幾點:
檢查頁面地址和緩存地址,以檢驗其有效�.如果地址無效,操作在這里結束,函數(shù)返回一個無效緩存地址或無效頁面編號錯誤代��
讀取每個寫緩存的狀�(tài)�.如果任何緩存處于占用狀�(tài),則操作失敗并返回寫過�(write sequence)錯誤代碼�
4個寫緩存之一應處于終止狀�(tài).如果是這樣,激活下一個緩��
�(shù)�(jù)被復制到寫緩存的�(shù)�(jù)域�
頁面地址被寫入地址�.計算CRC校驗結果并將其寫入CRC�.將狀�(tài)改為占用.將前一個緩存置為可用狀�(tài)(即更新原來的終止狀�(tài))�
需要注�,此時對新寫的頁面進行讀操作,將返回頁面原來的�(shù)�.只有等提交操作完成后,才會返回新值�
提交操作
�4. 提交操作的流�
提交函數(shù)不需要參�(shù).它的工作就是如實地將�(shù)�(jù)從寫緩存?zhèn)魉偷街鞔鎯^(qū),然后將寫緩存標記為終止狀�(tài).提交函數(shù)的操作流程如�4所�:
讀取每個寫緩存的狀�(tài)�.應該只有1個緩存標記為占用狀�(tài).否則,函數(shù)在此結束,并返回一個寫過程錯誤代碼�
對被占用的緩存進行CRC校驗.如果不匹�,則返回一個數(shù)�(jù)損壞錯誤代碼�
提取頁面地址,并將�(shù)�(jù)寫入主存儲區(qū)的指定頁��
計算緩存的數(shù)�(jù)部分的CRC.該值被保存在一個臨時寄存器中�
找到對應所選主存儲區(qū)頁面的校驗頁�,并讀取該校驗頁面的內(nèi)��
用前面計算的CRC更新校驗頁面,為校驗頁面計算新的CRC�
將校驗頁面數(shù)�(jù)重新寫回校驗存儲區(qū)�
將寫緩存更新為終止狀�(tài)�
回退操作
�5. 回退操作的流程圖
如圖5所�,回退函數(shù)是最簡單的操作之一.由于主存儲區(qū)只有在完成一個提交操作后才更新數(shù)�(jù),而不是在一個寫操作之后更新�,所以回退操作只需將寫緩存置為無效狀�(tài)即可�
讀取每個寫緩存的狀�(tài)�.應該只有一個緩存被標記為占�.否則,函數(shù)在此結束,并返回一個寫過程錯誤代碼�
將所選的寫緩存狀�(tài)域置為終��
檢查操作
�6. 檢查操作的流程圖
在任何上電情況下,都需要調(diào)用檢查函�(shù)以確保EEPROM可以接受�(shù)�(jù).檢查函數(shù)檢驗存儲系統(tǒng)的可用�,并報告任何發(fā)�(xiàn)的錯�.該函�(shù)的檢查操作如�6所�:
讀取每個寫緩存,確認只有一個緩存不是可用狀�(tài).如果只有一個緩存含有未定義的狀�(tài)代碼,則返回一個寫操作中斷(interrupted write)錯誤代碼。如果所有緩存均包含未定義的狀�(tài)代碼,則返回EEPROM未初始化(uninitialized EEPROM)錯誤代碼�
如果僅有一個緩存包含占用狀�(tài)代碼,計算此緩存的CRC.如果CRC不匹�,則返回一個寫操作中斷錯誤代碼�
檢查校驗存儲區(qū)的每一個頁�.如果任何頁面沒有通過CRC校驗,則返回保護失敗錯誤代碼�
,檢查主存儲區(qū)的每一�,并與存儲的各頁CRC進行對比.如果�1頁未通過CRC校驗,則返回一個提交中�(interrupted commit)錯誤代碼�
清理操作
�7. 清理操作的流�
清理函數(shù)解決EEPROM系統(tǒng)存在的任何問�.在清理操作退出時,無論EEPROM子系�(tǒng)先前是何種狀�(tài),都應該可以繼�(xù)使用�.所有未提交的寫操作將被回退,并且完成失敗的提交操��
�7演示了清理操作是如何工作�:
如果檢查操作返回一個EEPROM未初始化的錯誤代�,則初始化EEPROM.清除所有數(shù)�(jù)頁面,并且初始化所有校驗頁�.除一個寫緩存被初始化為終止狀�(tài)�,清除其它所有寫緩存并置為可用狀�(tài)�
如果檢查操作返回一個寫操作中斷錯誤代碼,則找到那個不是可用狀�(tài)的寫緩存.將它的狀�(tài)改為終止狀�(tài)�
如果檢查操作返回一個提交中斷錯誤代�,則找到CRC不匹配的主頁�.計算出它的CRC并更新相關校驗頁��
如果檢查操作返回保護失敗錯誤代碼,則表示緊隨提交操作的更新校驗頁面操作被中�.讀出所有與錯誤校驗頁面相關的主存儲區(qū)頁面,并刷新校驗頁��
安全性證�
要證明系�(tǒng)的安全�,需要確定寫操作過程中數(shù)�(jù)容易損壞的時�.(讀操作從本�(zhì)上來說是安全�.讀操作期間不會對EEPROM頁面進行寫操�,因此�(shù)�(jù)不會被損�.) 確定了這些易損時刻�,只需要再確定一個恢復過�.如果恢復機制涵蓋了所有可能的�(shù)�(jù)損失情況,而且如果我們假定在任何一個可能破壞EEPROM寫周期的事件之后,都將首先�(zhí)行校�/清理周期(例如上電),那么系統(tǒng)就是安全��
在大多數(shù)串行EEPROM器件�,一個寫操作首先將頁面的每位�(shù)�(jù)都置為已知�,然后將所有需要改變的位設置為需要的�.因此在掉電時,中斷的寫操作極有可能破壞該頁的所有字節(jié).�??梢酝ㄟ^向損壞頁面寫入新�(shù)�(jù),進而從這一失效事件中恢復出�.但這會失去原來的數(shù)�(jù)�
寫操作過程中�(shù)�(jù)容易損壞的時刻如下所�(按發(fā)生的時間順序排列):
對數(shù)�(jù)域進行寫操�:如果此時�(fā)生電源失效事�,檢查操作不會檢測到錯�.正在被寫入的寫緩存仍顯示可用狀�(tài),但可用的緩存不包含有效的CRC值�
向當前寫緩存寫入狀�(tài)信息:這個操作將狀�(tài)域改為占用狀�(tài),設定CRC并為寫操作填入頁面地址.如果這個過程被中斷,可能�(fā)生如下情�:(1) 狀�(tài)無效,從而導致一個寫操作中斷錯誤;(2) 狀�(tài)有效,但CRC錯誤,仍會導致一個寫操作中斷錯誤;(3) 狀�(tài)和CRC域有�.在這種情形�,系統(tǒng)有未提交處理的寫操作.可以檢測到這一狀�(tài),因為此時一個緩存將處于占用狀�(tài)而另一個緩存為終止狀�(tài).如果子系�(tǒng)的其它部分檢查通過,則用戶代碼可通過�(fā)出提交或回退操作繼續(xù)�(zhí)�.無論�(fā)生何種情�,主存儲區(qū)和校驗存儲區(qū)都是安全��
前一個緩存狀�(tài)清除為可用狀�(tài):緩存可能有損壞的狀�(tài)或CRC,而下一個緩存為占用狀�(tài).這意味著清除該緩存的狀�(tài)時操作被中斷,這種情況下可以執(zhí)行提交或回退操作�
在寫操作和提交操作之�:只有一個寫緩存將處于占用狀�(tài),并且通過了CRC校驗.用戶代碼可以請求提交或回退操作.寫緩存、校驗存儲區(qū)和主存儲區(qū)都是安全��
提交操作過程中數(shù)�(jù)容易損壞的時刻如下所�:
將數(shù)�(jù)域復制到主存儲區(qū):如果寫操作被中斷,主存儲區(qū)�1個頁面數(shù)�(jù)可能被破�.檢查函數(shù)會檢測到兩種狀�(tài):(1) 一個有效的占用寫緩�;(2) 中斷的提交操作導致主存儲區(qū)頁面�(shù)�(jù)損壞。寫緩存和校驗存儲區(qū)是安全的,在這種情況�,清理操作會完成提交操作并返回一個干凈的系統(tǒng)。注�:即使寫操作已�(jīng)完成,檢查操作仍會因為校驗存儲區(qū)的CRC與計算出的CRC不匹配而報��
更新校驗存儲區(qū)的CRC:如果對校驗頁面的寫操作被中斷,則整個頁面的�(shù)�(jù)都可能被破壞.這意味著主存儲區(qū)�15個頁面都對應著無效的CRC.但是由于校驗存儲區(qū)的每一頁都有自己的校驗�,而且在寫操作中斷后會�(chǎn)生校驗和錯誤,因此檢查程序會發(fā)�(xiàn)這一�.在這種情況�,檢查程序會返回保護失�.修復方法如下:首先重新計算所有受影響�15個頁面的CRC�.然后將這些值和該頁自身的有效CRC值一起寫入校驗頁靀�
更新寫緩存的狀�(tài)信息:如果當狀�(tài)變量從占用狀�(tài)�?yōu)榻K止狀�(tài)�,寫周期被中斷,那么整個寫緩存頁面的數(shù)�(jù)都可能被損壞。但�,校驗存儲區(qū)和主存儲區(qū)都是安全�。檢查操作會找到�(shù)�(jù)損壞的頁�,并返回寫操作中斷錯誤代碼.當運行清理程序時,它將復位寫緩存子系統(tǒng),并完成提交操��
,在回退操作中數(shù)�(jù)容易損壞的時刻為:
更新寫緩存的狀�(tài):與提交周期的最終狀�(tài)類似,該操作只是簡單地將寫緩存的占用狀�(tài)復位至終止狀�(tài).如果它被中斷,則檢查程序會返回寫操作中�,并且清理程序會重新初始化所有的寫緩存區(qū)�.校驗存儲區(qū)和主存儲區(qū)仍是安全��
可以看出,無論電源何時掉電或處理器何時被復�,存儲子系�(tǒng)都可保持�(shù)�(jù)的完整�.�(fā)生電源失效事件后,存儲子系�(tǒng)會返回到可進行讀或寫的狀�(tài).如果一個提交操作被中斷,子系�(tǒng)會返回到可執(zhí)行提交或回退操作的狀�(tài)�
設計起步
MAXQ微控制器的EEPROM存儲系統(tǒng)功能完備.系統(tǒng)設計者可以根�(jù)需要來增強該系�(tǒng)的功�.但需要注意以下幾�:
C封裝程序:在多�(shù)C語言標準�,與匯編語言子程序雙向傳送數(shù)�(jù)時都有一套標準的方法.例如在IAR開發(fā)�(huán)境下,參數(shù)在低編號的累加器中傳入和傳出.由于參數(shù)已經(jīng)傳入A[0]和A[1],為這些程序建立一個C封裝�,就像寫函�(shù)原型一樣容�.在其它C�(huán)境下,參數(shù)傳遞是通過�(shù)�(jù)棧進行�,需要一個簡單的封裝子程��
并發(fā)處理:首先要保證寫周期的完整�,并且提供一套能夠保證完整性的機制,對于整個平臺的成敗至關重要.但很多應用都需要這樣一種機�,即可以讓一系列寫周期排隊并一次執(zhí)行完�,從而保證全都執(zhí)行或全都不執(zhí)�.但本文討論的機制不能工作在這種方式�.如果一個系�(tǒng)存有跨越多個頁面的信息記錄,則可以中斷一個寫操作,這使得恢復之后的記錄涵蓋了包含部分新�(shù)�(jù)的頁面和包含部分舊數(shù)�(jù)的頁�.有一種方法可避免該問�,即在�(zhí)行提交操作之前允許多重寫操作.這種方法并不像聽上去那么簡單,因為一個部分提交的事務,可能同時包括新紀錄片�、舊記錄片斷和損壞的頁面�
平均讀寫機�:平均讀寫作為閃存文件系�(tǒng)的一個特�,是指虛擬化頁面地址,使得被頻繁寫入的頁面會出�(xiàn)在存儲器的任何物理位�.但是很難找到實現(xiàn)這一目標的方�.這是因為,最直接的解決方�(活動存儲塊的目錄處于固定的位�,并且每次寫操作后都要對它進行更新)會導致存儲目錄的頁面迅速損�.所�,就像處理�(shù)�(jù)頁面那樣,還必須虛擬化和離散化目錄本身�
其它頁面尺寸:這里給出的系�(tǒng)假定采用一�16kB、每�32字節(jié)的存儲器�.如果所選擇的器件具有更大的頁面尺寸(64字節(jié)�128字節(jié)),這些函數(shù)仍可工作,只是會伴隨一些額外的寫入損�.(更新128字節(jié)頁面中的32字節(jié)區(qū)段時,會對整�128字節(jié)頁面�(zhí)行寫操作).但這些函數(shù)無法對具有更小頁面尺寸的器件進行操作.可以構建一個能夠在線確定EEPROM器件特性的系統(tǒng),并可根據(jù)實際特性配置系�(tǒng)的參�(shù)�
增強的安全�:本系�(tǒng)對以下類型的錯誤提供保護:由于電源失效或不可預期的系統(tǒng)復位而造成的EEPROM操作中斷.但EEPROM器件偶爾也會因為其它原因出錯.例如,由于電路噪聲或致電離輻射導致的軟件錯�.或者由于一個或多個存儲單元損耗而導致硬件錯��
一種解決方法是計算并維護校正子(syndrome),而不是采用簡單的CRC校驗�.校正子和校驗字類�,但是包含了足夠的信息以修復簡單的位錯�.最簡單的校正子系統(tǒng)可以用log2n + 1個校驗位來檢驗n個數(shù)�(jù)�.因此,對于一�32字節(jié)(256�)的頁面來�,一個僅包含9位的校正子就可以修正任何1位錯�.對數(shù)�(jù)完整性的要求更加嚴格�,可以采用更加復雜的系�(tǒng)來解決類似問��
結語
外部串行EEPROM為微控制器環(huán)境下存儲非易失數(shù)�(jù)提供了一種可靠的方法.利用本文提到的技�,即使面臨寫操作中斷的情況,串行EEPROM依然能夠可靠地工�.在任何對�(shù)�(jù)完整性要求較高的應用�,設計者都可以考慮這些技術�
維庫電子通,電子知識,一查百通!
已收錄詞�153979�