自在自线亚洲а∨天堂在线-中文字幕一区视频播放-扒开双腿猛进入喷水高潮叫声-欧美日本亚洲一区二区-老熟妇高潮偷拍一区二区-国产精品高清一区二区不卡-午夜色福利视频一区二区三区-亚洲国产成人精品福利在线观看-亚洲欧美成人一区二区在线电影

機電之家資源網(wǎng)
單片機首頁|單片機基礎(chǔ)|單片機應(yīng)用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
MAXQ環(huán)境下EEPROM的保護措施
MAXQ環(huán)境下EEPROM的保護措施
 更新時間:2008-8-18 9:51:29  點擊數(shù):24
【字體: 字體顏色

                      圖2. 讀操作的流程圖

    讀操作這個最簡單的接口函數(shù),也是相當(dāng)復(fù)雜的。圖2給出了操作流程:

    檢查頁面地址和緩存地址,以檢驗它們的有效性。如果地址無效,則就此結(jié)束操作,函數(shù)返回一個無效緩存地址或無效頁面編號錯誤代碼。
將所選頁面讀入緩存。

    計算校驗頁面的地址,并將相應(yīng)的校驗頁面讀入暫存區(qū)。

    計算校驗頁面的CRC。如果校驗頁面的數(shù)據(jù)無效,則返回一個保護失敗錯誤代碼。

    計算數(shù)據(jù)緩存的CRC,并將其與暫存區(qū)中對應(yīng)讀取頁面的CRC進行比較。如果CRC匹配,則程序返回有效讀代碼;如果CRC不匹配,則程序返回?zé)o效讀代碼。無論結(jié)果怎樣,實際讀取的數(shù)據(jù)都保存在返回緩存中,以供調(diào)用讀操作的程序使用。

    寫操作

     

                          圖3. 寫操作的流程圖
 
    如上所述,寫操作并不是真正將數(shù)據(jù)寫入主存儲區(qū)。實際上,寫操作是將數(shù)據(jù)寫入4個緩存之一。在這種方式下,主存儲區(qū)內(nèi)原先的數(shù)據(jù)將一直保持到整個有效寫操作流程完成后為止。圖3的流程說明了以下幾點:

    檢查頁面地址和緩存地址,以檢驗其有效性。如果地址無效,操作在這里結(jié)束,函數(shù)返回一個無效緩存地址或無效頁面編號錯誤代碼。

    讀取每個寫緩存的狀態(tài)域。如果任何緩存處于占用狀態(tài),則操作失敗并返回寫過程(write sequence)錯誤代碼。

    4個寫緩存之一應(yīng)處于終止?fàn)顟B(tài)。如果是這樣,激活下一個緩存。數(shù)據(jù)被復(fù)制到寫緩存的數(shù)據(jù)域。頁面地址被寫入地址域。計算CRC校驗結(jié)果并將其寫入CRC域。將狀態(tài)改為占用。將前一個緩存置為可用狀態(tài)(即更新原來的終止?fàn)顟B(tài))。

    需要注意,此時對新寫的頁面進行讀操作,將返回頁面原來的數(shù)值。只有等提交操作完成后,才會返回新值。

    提交操作

    

                      圖4. 提交操作的流程

    提交函數(shù)不需要參數(shù)。它的工作就是如實地將數(shù)據(jù)從寫緩存?zhèn)魉偷街鞔鎯^(qū),然后將寫緩存標(biāo)記為終止?fàn)顟B(tài)。提交函數(shù)的操作流程如圖4所示:
讀取每個寫緩存的狀態(tài)域。應(yīng)該只有1個緩存標(biāo)記為占用狀態(tài)。否則,函數(shù)在此結(jié)束,并返回一個寫過程錯誤代碼。

    對被占用的緩存進行CRC校驗。如果不匹配,則返回一個數(shù)據(jù)損壞錯誤代碼。提取頁面地址,并將數(shù)據(jù)寫入主存儲區(qū)的指定頁面。 計算緩存的數(shù)據(jù)部分的CRC。該值被保存在一個臨時寄存器中。 找到對應(yīng)所選主存儲區(qū)頁面的校驗頁面,并讀取該校驗頁面的內(nèi)容。 用前面計算的CRC更新校驗頁面,為校驗頁面計算新的CRC。 將校驗頁面數(shù)據(jù)重新寫回校驗存儲區(qū)。 將寫緩存更新為終止?fàn)顟B(tài)。

    回退操作

    

                 圖5. 回退操作的流程圖

    如圖5所示,回退函數(shù)是最簡單的操作之一。由于主存儲區(qū)只有在完成一個提交操作后才更新數(shù)據(jù),而不是在一個寫操作之后更新的,所以回退操作只需將寫緩存置為無效狀態(tài)即可。
讀取每個寫緩存的狀態(tài)域。應(yīng)該只有一個緩存被標(biāo)記為占用。否則,函數(shù)在此結(jié)束,并返回一個寫過程錯誤代碼。 將所選的寫緩存狀態(tài)域置為終止。

    檢查操作

    

                      圖6. 檢查操作的流程圖
 
    在任何上電情況下,都需要調(diào)用檢查函數(shù)以確保EEPROM可以接受數(shù)據(jù)。檢查函數(shù)檢驗存儲系統(tǒng)的可用性,并報告任何發(fā)現(xiàn)的錯誤。該函數(shù)的檢查操作如圖6所示:
讀取每個寫緩存。確認(rèn)只有一個緩存不是可用狀態(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),都應(yīng)該可以繼續(xù)使用了。所有未提交的寫操作將被回退,并且完成失敗的提交操作。
圖7演示了清理操作是如何工作的:

    如果檢查操作返回一個EEPROM未初始化的錯誤代碼,則初始化EEPROM。清除所有數(shù)據(jù)頁面,并且初始化所有校驗頁面。除最后一個寫緩存被初始化為終止?fàn)顟B(tài)外,清除其它所有寫緩存并置為可用狀態(tài)。

    如果檢查操作返回一個寫操作中斷錯誤代碼,則找到那個不是可用狀態(tài)的寫緩存。將它的狀態(tài)改為終止?fàn)顟B(tài)。

    如果檢查操作返回一個提交中斷錯誤代碼,則找到CRC不匹配的主頁面。計算出它的CRC并更新相關(guān)校驗頁面。

    如果檢查操作返回保護失敗錯誤代碼,則表示緊隨提交操作的更新校驗頁面操作被中斷。讀出所有與錯誤校驗頁面相關(guān)的主存儲區(qū)頁面,并刷新校驗頁面。

    安全性證明

    要證明系統(tǒng)的安全性,需要確定寫操作過程中數(shù)據(jù)容易損壞的時刻。(讀操作從本質(zhì)上來說是安全的。讀操作期間不會對EEPROM頁面進行寫操作,因此數(shù)據(jù)不會被損壞。) 確定了這些易損時刻后,只需要再確定一個恢復(fù)過程。如果恢復(fù)機制涵蓋了所有可能的數(shù)據(jù)損失情況,而且如果我們假定在任何一個可能破壞EEPROM寫周期的事件之后,都將首先執(zhí)行校驗/清理周期(例如上電),那么系統(tǒng)就是安全的。

    在大多數(shù)串行EEPROM器件中,一個寫操作首先將頁面的每位數(shù)據(jù)都置為已知值,然后將所有需要改變的位設(shè)置為需要的值。因此在掉電時,中斷的寫操作極有可能破壞該頁的所有字節(jié)。通?梢酝ㄟ^向損壞頁面寫入新數(shù)據(jù),進而從這一失效事件中恢復(fù)出來。但這會失去原來的數(shù)據(jù)。

    寫操作過程中數(shù)據(jù)容易損壞的時刻如下所述(按發(fā)生的時間順序排列):

    對數(shù)據(jù)域進行寫操作:如果此時發(fā)生電源失效事件,檢查操作不會檢測到錯誤。正在被寫入的寫緩存仍顯示可用狀態(tài),但可用的緩存不包含有效的CRC值。 向當(dāng)前寫緩存寫入狀態(tài)信息:這個操作將狀態(tài)域改為占用狀態(tài),設(shè)定CRC并為寫操作填入頁面地址。如果這個過程被中斷,可能發(fā)生如下情況:(1) 狀態(tài)無效,從而導(dǎo)致一個寫操作中斷錯誤;(2) 狀態(tài)有效,但CRC錯誤,仍會導(dǎo)致一個寫操作中斷錯誤;(3) 狀態(tài)和CRC域有效。在最后這種情形下,系統(tǒng)有未提交處理的寫操作?梢詸z測到這一狀態(tài),因為此時一個緩存將處于占用狀態(tài)而另一個緩存為終止?fàn)顟B(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ù)域復(fù)制到主存儲區(qū):如果寫操作被中斷,主存儲區(qū)的1個頁面數(shù)據(jù)可能被破壞。檢查函數(shù)會檢測到兩種狀態(tài):(1) 一個有效的占用寫緩存;(2) 中斷的提交操作導(dǎo)致主存儲區(qū)頁面數(shù)據(jù)損壞。寫緩存和校驗存儲區(qū)是安全的。在這種情況下,清理操作會完成提交操作并返回一個干凈的系統(tǒng)。注意:即使寫操作已經(jīng)完成,檢查操作仍會因為校驗存儲區(qū)的CRC與計算出的CRC不匹配而報錯。

    更新校驗存儲區(qū)的CRC:如果對校驗頁面的寫操作被中斷,則整個頁面的數(shù)據(jù)都可能被破壞。這意味著主存儲區(qū)的15個頁面都對應(yīng)著無效的CRC。但是由于校驗存儲區(qū)的每一頁都有自己的校驗和,而且在寫操作中斷后會產(chǎn)生校驗和錯誤,因此檢查程序會發(fā)現(xiàn)這一點。在這種情況下,檢查程序會返回保護失敗。修復(fù)方法如下:首先重新計算所有受影響的15個頁面的CRC值。然后將這些值和該頁自身的有效CRC值一起寫入校驗頁面。

    更新寫緩存的狀態(tài)信息:如果當(dāng)狀態(tài)變量從占用狀態(tài)變?yōu)榻K止?fàn)顟B(tài)時,寫周期被中斷,那么整個寫緩存頁面的數(shù)據(jù)都可能被損壞。但是,校驗存儲區(qū)和主存儲區(qū)都是安全的。檢查操作會找到數(shù)據(jù)損壞的頁面,并返回寫操作中斷錯誤代碼。當(dāng)運行清理程序時,它將復(fù)位寫緩存子系統(tǒng),并完成提交操作。 最后,在回退操作中數(shù)據(jù)容易損壞的時刻為:

    更新寫緩存的狀態(tài):與提交周期的最終狀態(tài)類似,該操作只是簡單地將寫緩存的占用狀態(tài)復(fù)位至終止?fàn)顟B(tài)。如果它被中斷,則檢查程序會返回寫操作中斷,并且清理程序會重新初始化所有的寫緩存區(qū)域。校驗存儲區(qū)和主存儲區(qū)仍是安全的。

    可以看出,無論電源何時掉電或處理器何時被復(fù)位,存儲子系統(tǒng)都可保持?jǐn)?shù)據(jù)的完整性。發(fā)生電源失效事件后,存儲子系統(tǒng)會返回到可進行讀或?qū)懙臓顟B(tài)。如果一個提交操作被中斷,子系統(tǒng)會返回到可執(zhí)行提交或回退操作的狀態(tài)。

    設(shè)計起步

    MAXQ微控制器的EEPROM存儲系統(tǒng)功能完備。系統(tǒng)設(shè)計者可以根據(jù)需要來增強該系統(tǒng)的功能。但需要注意以下幾點:

    C封裝程序:在多數(shù)C語言標(biāo)準(zhǔn)中,與匯編語言子程序雙向傳送數(shù)據(jù)時都有一套標(biāo)準(zhǔn)的方法。例如在IAR開發(fā)環(huán)境下,參數(shù)在低編號的累加器中傳入和傳出。由于參數(shù)已經(jīng)傳入A[0]和A[1],為這些程序建立一個C封裝器,就像寫函數(shù)原型一樣容易。在其它C環(huán)境下,參數(shù)傳遞是通過數(shù)據(jù)棧進行的,需要一個簡單的封裝子程序。

    并發(fā)處理:首先要保證寫周期的完整性,并且提供一套能夠保證完整性的機制,對于整個平臺的成敗至關(guān)重要。但很多應(yīng)用都需要這樣一種機制,即可以讓一系列寫周期排隊并一次執(zhí)行完畢,從而保證全都執(zhí)行或全都不執(zhí)行。但本文討論的機制不能工作在這種方式下。如果一個系統(tǒng)存有跨越多個頁面的信息記錄,則可以中斷一個寫操作,這使得恢復(fù)之后的記錄涵蓋了包含部分新數(shù)據(jù)的頁面和包含部分舊數(shù)據(jù)的頁面。有一種方法可避免該問題,即在執(zhí)行提交操作之前允許多重寫操作。這種方法并不像聽上去那么簡單,因為一個部分提交的事務(wù),可能同時包括新紀(jì)錄片斷、舊記錄片斷和損壞的頁面。

    平均讀寫機制:平均讀寫作為閃存文件系統(tǒng)的一個特點,是指虛擬化頁面地址,使得被頻繁寫入的頁面會出現(xiàn)在存儲器的任何物理位置。但是很難找到實現(xiàn)這一目標(biāo)的最佳方法。這是因為,最直接的解決方法(活動存儲塊的目錄處于固定的位置,并且每次寫操作后都要對它進行更新)會導(dǎo)致存儲目錄的頁面迅速損耗。所以,就像處理數(shù)據(jù)頁面那樣,還必須虛擬化和離散化目錄本身。 其它頁面尺寸:這里給出的系統(tǒng)假定采用一個16kB、每頁32字節(jié)的存儲器件。如果所選擇的器件具有更大的頁面尺寸(64字節(jié)或128字節(jié)),這些函數(shù)仍可工作,只是會伴隨一些額外的寫入損耗。(更新128字節(jié)頁面中的32字節(jié)區(qū)段時,會對整個128字節(jié)頁面執(zhí)行寫操作)。但這些函數(shù)無法對具有更小頁面尺寸的器件進行操作?梢詷(gòu)建一個能夠在線確定EEPROM器件特性的系統(tǒng),并可根據(jù)實際特性配置系統(tǒng)的參數(shù)。

    增強的安全性:本系統(tǒng)對以下類型的錯誤提供保護:由于電源失效或不可預(yù)期的系統(tǒng)復(fù)位而造成的EEPROM操作中斷。但EEPROM器件偶爾也會因為其它原因出錯。例如,由于電路噪聲或致電離輻射導(dǎo)致的軟件錯誤;蛘哂捎谝粋或多個存儲單元損耗而導(dǎo)致硬件錯誤。

    一種解決方法是計算并維護校正子(syndrome),而不是采用簡單的CRC校驗字。校正子和校驗字類似,但是包含了足夠的信息以修復(fù)簡單的位錯誤。最簡單的校正子系統(tǒng)可以用log2n + 1個校驗位來檢驗n個數(shù)據(jù)位。因此,對于一個32字節(jié)(256位)的頁面來說,一個僅包含9位的校正子就可以修正任何1位錯誤。對數(shù)據(jù)完整性的要求更加嚴(yán)格時,可以采用更加復(fù)雜的系統(tǒng)來解決類似問題。

    結(jié)語

    外部串行EEPROM為微控制器環(huán)境下存儲非易失數(shù)據(jù)提供了一種可靠的方法。利用本文提到的技術(shù),即使面臨寫操作中斷的情況,串行EEPROM依然能夠可靠地工作。在任何對數(shù)據(jù)完整性要求較高的應(yīng)用中,設(shè)計者都可以考慮這些技術(shù)。
 
    (來源:Maxim公司)

  • 上一篇: 內(nèi)容可尋址存儲器MCM69C232及其應(yīng)用
  • 下一篇: 小常識:印制電路板設(shè)計原則和抗干擾措施
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術(shù)支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機電設(shè)備,機電供求等信息由機電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實性、準(zhǔn)確性和合法性。
    機電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機電一體化學(xué)會
    中國行業(yè)電子商務(wù)100強網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1