0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

MAXQ環(huán)境下受保護(hù)的EEPROM操作

星星科技指導(dǎo)員 ? 來源:ADI ? 作者:ADI ? 2023-03-02 16:22 ? 次閱讀

非易失性存儲器對于嵌入式微控制器應(yīng)用至關(guān)重要。本應(yīng)用筆記解釋了如何使用基于事務(wù)的提交回滾機(jī)制來保護(hù)外部EEPROM存儲器器件的內(nèi)容。雖然針對的是外部存儲器器件,但這里介紹的原理同樣適用于許多MAXQ微控制器的內(nèi)部EEPROM。

介紹

對于嵌入式微控制器應(yīng)用,非易失性存儲器通常是必不可少的。無論是維護(hù)因斷電而必須保留的設(shè)置,還是存儲公司的關(guān)鍵交易記錄,可靠的非易失性存儲器都是現(xiàn)代微控制器領(lǐng)域的基本要素。

通常,非易失性存儲采用外部串行存儲器的形式。從字面上看,數(shù)十億個(gè)這樣的內(nèi)存組件多年來在該領(lǐng)域已被證明是可靠的?,F(xiàn)在,密度從幾百字節(jié)到一兆字節(jié)甚至更多,幾乎可以在需要維護(hù)設(shè)置的所有設(shè)備中找到至少一種這些緊湊、廉價(jià)的設(shè)備。

任何類型的非易失性存儲(從EEPROM到閃存再到旋轉(zhuǎn)存儲)的一個(gè)問題是由于寫入周期中斷而導(dǎo)致的數(shù)據(jù)丟失。如果在執(zhí)行寫入周期時(shí)電源出現(xiàn)故障,則在電源恢復(fù)后,數(shù)據(jù)損壞可能會導(dǎo)致數(shù)據(jù)損壞,而沒有任何簡單的恢復(fù)機(jī)制。

本文介紹一種基于事務(wù)的提交回滾機(jī)制,以保護(hù)外部串行EEPROM存儲器器件的內(nèi)容。本文介紹的原理同樣適用于許多MAXQ>微控制器中包含的內(nèi)部EEPROM。此應(yīng)用程序的文件可供下載(ZIP,20.5kb)。

I2C EEPROM的特性

串行存儲器器件具有多種接口,但最常用的接口是I2C。這種總線具有許多優(yōu)點(diǎn):高度標(biāo)準(zhǔn)化;它只需要從控制器到內(nèi)存的兩根電線;它具有非常靈活的時(shí)序要求,使其能夠由軟件驅(qū)動。一個(gè)I2C主機(jī)可以驅(qū)動多個(gè)I2C從器件,從而最大限度地減少主器件上的引腳數(shù)。

在所有EEPROM器件中,寫入周期明顯長于讀取周期。這是因?yàn)殡姾稍趯懭胫芷谥型ㄟ^隧道機(jī)制穿過絕緣屏障傳輸,并且此操作需要時(shí)間。雖然增加電壓可以加速這一過程,但過大的電位會導(dǎo)致勢壘的介電擊穿,從而損壞器件。EEPROM 器件的典型寫入周期時(shí)間約為 10 毫秒;讀取周期通常發(fā)生在幾百納秒內(nèi)。

許多I2C EEPROM器件試圖通過使用頁面模式來降低寫入周期時(shí)間的重要性。此模式允許將多個(gè)字節(jié)傳輸?shù)骄彌_區(qū),然后一次寫入數(shù)組。I2C存儲器器件的典型頁面大小為32字節(jié)。因此,只需一個(gè)寫入周期即可填充 EEPROM 陣列的 32 個(gè)字節(jié)。

這一點(diǎn)很重要,因?yàn)榇蠩EPROM器件具有指定的耐久性:頁面可以容忍的生命周期寫入周期數(shù)的上限。寫入周期的典型耐久性范圍為 10,000 到 1,000,000。然而,即使有一百萬次寫入周期的耐久性,也很容易看出軟件如何快速磨損存儲設(shè)備。每秒僅執(zhí)行 100 個(gè)寫入周期,在不到三個(gè)小時(shí)的時(shí)間內(nèi),設(shè)備寫入周期計(jì)數(shù)就耗盡了。

考慮到這些基本的EEPROM特性,嵌入式處理器的穩(wěn)健非易失性存儲系統(tǒng)的設(shè)計(jì)人員必須牢記以下幾點(diǎn):

任何一頁都不應(yīng)成為重復(fù)寫入的目標(biāo)。具體來說,將一個(gè)頁面設(shè)置為每次寫入另一個(gè)頁面時(shí)都必須更新的“目錄”是不可接受的。

如果在寫入周期內(nèi)電源中斷,則必須提供一種機(jī)制來:(1) 檢測中斷的寫入:和 (2) 完成事務(wù);或 (3) 將事務(wù)回滾到預(yù)寫條件。

必須通過某種類型的檢查數(shù)據(jù)機(jī)制(校驗(yàn)和、CRC、消息摘要)來確保數(shù)據(jù)完整性。

設(shè)計(jì)目標(biāo)

雖然上述EEPROM考慮因素可以通過許多非易失性文件系統(tǒng)來解決,但這種文件機(jī)制給小型嵌入式微控制器帶來了沉重的負(fù)擔(dān)。許多文件系統(tǒng)需要比小型微控制器更多的RAM,而完整的文件系統(tǒng)比大多數(shù)應(yīng)用程序所需的RAM要多。

考慮到這一點(diǎn),以下是EEPROM數(shù)據(jù)保護(hù)機(jī)制的目標(biāo):

輕量級:保護(hù)機(jī)制應(yīng)為檢查數(shù)據(jù)保留不超過 10% 的 EEPROM 空間。它應(yīng)該只需要少量的計(jì)算開銷。

塊大?。菏鼙Wo(hù)塊的塊大小應(yīng)與EEPROM中的本機(jī)寫入頁相同。由于EEPROM器件的頁面大小始終是2的偶數(shù)次冪,因此軟件編碼比從每個(gè)塊保留一個(gè)或兩個(gè)字節(jié)更容易。

耐久性:不應(yīng)為每個(gè)受保護(hù)的周期寫入任何單個(gè)頁面。

穩(wěn)?。好總€(gè)電源故障實(shí)例都應(yīng)該是可證明的可恢復(fù)的。

此處介紹的保護(hù)機(jī)制有六個(gè)接口功能:讀取、寫入、提交、回滾、檢查和清理。

read 函數(shù)接受塊號和指向 32 字節(jié)緩沖區(qū)的指針。如果緩沖區(qū)地址和塊號在有效范圍內(nèi),則例程會將指定的塊讀入緩沖區(qū)并檢查其有效性。它將返回條件有效讀取、無效讀取、無效緩沖區(qū)地址或無效頁碼或保護(hù)失敗。

寫入函數(shù)接受塊號和指向先前填充了要寫入的數(shù)據(jù)的 32 字節(jié)緩沖區(qū)的指針。如果緩沖區(qū)地址和塊號在有效范圍內(nèi),例程會將數(shù)據(jù)復(fù)制到非易失性保持緩沖區(qū),并將緩沖區(qū)標(biāo)記為準(zhǔn)備提交。

提交和回滾函數(shù)是可以在寫入后執(zhí)行的互補(bǔ)操作。commit 函數(shù)將最近寫入的緩沖區(qū)復(fù)制到其在內(nèi)存數(shù)組中的最終位置,并為要寫入的下一個(gè)數(shù)據(jù)集準(zhǔn)備緩沖區(qū)結(jié)構(gòu)?;貪L功能本質(zhì)上是一個(gè)“撤消”。它反轉(zhuǎn)最近寫入操作的效果,并為下一次寫入準(zhǔn)備緩沖區(qū)子系統(tǒng)。

檢查功能讀取存儲設(shè)備的每個(gè)塊并驗(yàn)證存儲數(shù)據(jù)的有效性。它還檢查緩沖區(qū)子系統(tǒng),以確保沒有掛起的寫入。任何無效塊或任何掛起的寫入都會導(dǎo)致檢查返回錯(cuò)誤條件。

清理功能修復(fù)了損壞的EEPROM。特別是,它嘗試確定發(fā)生了哪些故障以及可以執(zhí)行哪些操作來解決問題。

有關(guān)所有這些功能的更多詳細(xì)信息,請參閱下面的操作詳細(xì)信息。

pYYBAGQAXLCAQPJ1AABb7BHvzQg580.gif

圖1.EEPROM 陣列的結(jié)構(gòu)。該數(shù)組分為三個(gè)區(qū)域:包含實(shí)際用戶數(shù)據(jù)的主數(shù)組;為主數(shù)組中的每一行包含一個(gè) CRC 的檢查數(shù)組;以及包含四個(gè)緩沖區(qū)的緩沖區(qū)數(shù)組,用于存儲臨時(shí)寫入數(shù)據(jù)。

電子電氣結(jié)構(gòu)

有關(guān)EEPROM的結(jié)構(gòu),請參閱上面的圖1。EEPROM包含三個(gè)主要領(lǐng)域:

主陣列:EEPROM的最大部分專用于數(shù)據(jù)存儲。在 16kB 的設(shè)備中,總共有 512 頁,每頁 32 字節(jié)。在這樣的設(shè)備中,前473頁專用于實(shí)際數(shù)據(jù)存儲。

檢查數(shù)組:EEPROM 的第二部分檢查主數(shù)組中每一行的單詞。檢查數(shù)組的每一頁都包含一組 15 位 16 位 CRC 值。每個(gè)頁面中的最終 CRC 值將檢查該頁面。校驗(yàn)數(shù)組占用 473 頁(第 503 頁至第 <> 頁)。

緩沖陣列:EEPROM 的最后一部分包含 32 頁,構(gòu)成 16 個(gè)寫入緩沖區(qū)。每個(gè)緩沖區(qū)由四個(gè)字段組成:一個(gè)數(shù)據(jù)字段,其中包含要在下一個(gè)提交指令處寫入主數(shù)組的 1 字節(jié)數(shù)據(jù);標(biāo)識緩沖區(qū)引用的頁面地址的地址字段;標(biāo)識緩沖區(qū)狀態(tài)(即可用、已占用、已過期)的狀態(tài)字段;以及檢查整個(gè)寫入緩沖區(qū)的 <> 位 CRC 字段。有關(guān)緩沖結(jié)構(gòu),請參見上面的圖 <>。

這種EEPROM結(jié)構(gòu)滿足了設(shè)計(jì)的大部分主要目標(biāo)。首先,由于主數(shù)組中的每個(gè)頁面都在輔助位置進(jìn)行檢查,因此頁面的所有位都可用于用戶數(shù)據(jù)。其次,由于主數(shù)組中的每個(gè)頁面都由 check 數(shù)組中的唯一字進(jìn)行檢查,因此 check 數(shù)組中沒有單點(diǎn)故障,整個(gè)數(shù)組中沒有必須在每個(gè)寫入周期更新的單個(gè)頁面。最后,使用四個(gè)寫入緩沖區(qū)來分配寫入周期的磨損。

操作細(xì)節(jié)

在未受保護(hù)的EEPROM中,操作細(xì)節(jié)很簡單。讀取周期只是將字節(jié)從所選地址傳輸?shù)街鳈C(jī);寫入周期將字節(jié)從主機(jī)傳輸?shù)紼EPROM,并等待操作完成(在大多數(shù)設(shè)備中為幾毫秒)。然而,在受保護(hù)的EEPROM環(huán)境中,讀取和寫入是更復(fù)雜的操作。在下一節(jié)中,將剖析每個(gè)操作,以準(zhǔn)確發(fā)現(xiàn)調(diào)用函數(shù)時(shí)發(fā)生的情況。

poYBAGQAXLGATE8YAAA-2wj3cqg272.gif

圖2.讀取操作的流程圖。

讀取操作是最簡單的接口函數(shù),但仍然相當(dāng)復(fù)雜。圖 2 說明了操作流程:

檢查頁面地址和緩沖區(qū)地址以驗(yàn)證它們是否有效。否則,操作將在此處結(jié)束,函數(shù)返回?zé)o效的緩沖區(qū)地址或無效的頁碼錯(cuò)誤。

所選頁將讀入緩沖區(qū)。

計(jì)算檢查頁的地址,并將校驗(yàn)頁讀入暫存緩沖區(qū)。

計(jì)算檢查頁的CRC。如果無效,則返回保護(hù)失敗錯(cuò)誤。

CRC是在數(shù)據(jù)緩沖區(qū)上計(jì)算的,并與存儲在與讀取頁對應(yīng)的暫存緩沖區(qū)中的CRC進(jìn)行比較。如果 CRC 匹配,則例程返回有效讀取;如果 CRC 不匹配,則例程返回?zé)o效讀取。在任何情況下,實(shí)際讀取的數(shù)據(jù)都保留在返回緩沖區(qū)中,供調(diào)用例程根據(jù)需要使用。

chaijie_default.png

圖3.寫入操作的流程圖。

如上所述,寫入操作實(shí)際上并沒有寫入主數(shù)組。相反,寫入操作將其數(shù)據(jù)存儲在四個(gè)緩沖區(qū)之一中。通過這種方式,主數(shù)組中的先前數(shù)據(jù)將被保留,直到確保寫入過程的有效性。圖 3 中的流程圖顯示:

檢查頁面地址和緩沖區(qū)地址以驗(yàn)證它們是否有效。否則,操作將在此處結(jié)束,函數(shù)返回?zé)o效的緩沖區(qū)地址或無效的頁碼錯(cuò)誤。

讀取每個(gè)寫入緩沖區(qū)的狀態(tài)字段。如果任何緩沖區(qū)的狀態(tài)已占用,則操作將失敗并顯示寫入序列錯(cuò)誤。

四個(gè)寫入緩沖區(qū)中的一個(gè)應(yīng)處于過期狀態(tài)。如果是這樣,則激活序列中的下一個(gè)緩沖區(qū)。

數(shù)據(jù)將復(fù)制到寫入緩沖區(qū)的數(shù)據(jù)字段。

頁面地址將寫入地址字段。計(jì)算 CRC 并將其寫入 CRC 字段。狀態(tài)將更新為已占用。以前的緩沖區(qū)設(shè)置為可用狀態(tài)(即,從過期更新)。

請注意,此時(shí),讀取操作將返回新寫入頁面的舊值。在提交操作完成之前,不會返回新值。

pYYBAGQAXLOAL9KGAAA0AdC7JZo189.gif

圖4.提交操作的流程圖。

提交函數(shù)不需要任何參數(shù)。它唯一的工作是忠實(shí)地將數(shù)據(jù)從寫緩沖區(qū)傳輸?shù)街鲾?shù)組,然后標(biāo)記寫緩沖區(qū)已過期。提交函數(shù)的操作如圖 4 所示:

讀取每個(gè)寫入緩沖區(qū)的狀態(tài)字段。正好應(yīng)該將一個(gè)緩沖區(qū)標(biāo)記為已占用。如果不是這樣,則函數(shù)在此處以寫入序列錯(cuò)誤結(jié)束。

使用CRC檢查占用的緩沖區(qū)。如果沒有匹配項(xiàng),則會引發(fā)數(shù)據(jù)損壞錯(cuò)誤。

提取地址,并將數(shù)據(jù)寫入主數(shù)組中的指定頁面。

CRC 是跨緩沖區(qū)的數(shù)據(jù)部分計(jì)算的。該值保存在臨時(shí)寄存器中。

檢查頁面已找到并讀取所選主頁。

使用先前計(jì)算的CRC更新檢查頁面,并為檢查頁面計(jì)算新的CRC。

檢查頁將寫回檢查數(shù)組。

寫入緩沖區(qū)將更新為過期狀態(tài)。

反轉(zhuǎn)

poYBAGQAXLSAT2KhAAAaPOIREvY166.gif

圖5.回滾操作的流程圖。

回滾函數(shù)(如圖 5 所示)是最簡單的函數(shù)之一。由于主數(shù)組不會在寫入操作后更新,而只會在提交操作完成后更新,因此回滾只需要使寫入緩沖區(qū)失效。

讀取每個(gè)寫入緩沖區(qū)的狀態(tài)字段。正好應(yīng)該將一個(gè)緩沖區(qū)標(biāo)記為已占用。如果不是這樣,則函數(shù)在此處以寫入序列錯(cuò)誤結(jié)束。

所選寫入緩沖區(qū)的狀態(tài)字段被賦予值已過期。

檢查

pYYBAGQAXLWARec4AAA9z2Rs7EA496.gif

圖6.檢查操作的流程圖。

在任何上電事件中,都應(yīng)調(diào)用檢查功能以驗(yàn)證EEPROM是否已準(zhǔn)備好接受數(shù)據(jù)。檢查功能將驗(yàn)證存儲系統(tǒng)的運(yùn)行狀況并報(bào)告遇到的任何錯(cuò)誤。它執(zhí)行圖 6 中所示的檢查:

讀取每個(gè)寫入緩沖區(qū)。驗(yàn)證只有一個(gè)緩沖區(qū)未處于可用狀態(tài)。如果只有一個(gè)緩沖區(qū)包含未定義的狀態(tài)代碼,則返回中斷寫入錯(cuò)誤。如果所有緩沖區(qū)都包含未定義的狀態(tài)代碼,則返回未初始化的 EEPROM 錯(cuò)誤。

如果只有一個(gè)緩沖區(qū)包含占用的狀態(tài)代碼,則 CRC 該緩沖區(qū)。如果 CRC 失敗,則返回中斷的寫入錯(cuò)誤。

檢查檢查數(shù)組的每一頁。如果任何行未通過其 CRC 檢查,則返回保護(hù)失敗錯(cuò)誤。

最后,根據(jù)其存儲的 CRC 檢查主數(shù)組的每一頁。如果任何單個(gè)頁面的 CRC 失敗,請標(biāo)記中斷的提交錯(cuò)誤。

清理

poYBAGQAXLeADNLXAAAz_AABWXE255.gif

圖7.清理操作的流程圖。

清理功能可解決EEPROM系統(tǒng)存在的任何問題。當(dāng)清理退出時(shí),EEPROM 子系統(tǒng)應(yīng)隨時(shí)可供使用,無論它處于何種狀態(tài)。將回滾所有未提交的寫入,并完成失敗的提交操作。

圖 7 顯示了清理的工作原理

如果檢查返回未初始化的 EEPROM 錯(cuò)誤,則初始化 EEPROM。清除所有數(shù)據(jù)頁,并初始化所有檢查頁。所有寫入緩沖區(qū)都將被清除并以可用狀態(tài)寫入 - 最后一個(gè)寫入緩沖區(qū)除外,該緩沖區(qū)以過期狀態(tài)初始化。

如果 check 返回中斷的寫入錯(cuò)誤,請查找狀態(tài)不是可用的一個(gè)寫入緩沖區(qū)。將該狀態(tài)更改為已過期。

如果 check 返回中斷的提交錯(cuò)誤,請查找 CRC 不匹配的主頁。計(jì)算其CRC并更新關(guān)聯(lián)的檢查頁面。

如果檢查返回保護(hù)失敗,則在提交操作中斷后更新檢查頁。讀取與缺陷檢查頁面關(guān)聯(lián)的所有主頁,并刷新檢查頁面。

安全證明

系統(tǒng)安全性的證明集中在識別寫入事務(wù)期間的易受攻擊時(shí)刻。(讀取事務(wù)本質(zhì)上是安全的。在讀取操作期間不會寫入EEPROM的頁面,因此數(shù)據(jù)不會損壞。在確定了這些脆弱時(shí)刻之后,人們只需要確定一個(gè)恢復(fù)過程。如果恢復(fù)機(jī)制涵蓋了所有已識別的漏洞,并且如果我們假設(shè)檢查/清理周期將是任何可能破壞EEPROM寫入周期的操作(例如上電)之后的第一個(gè)事件,那么系統(tǒng)是可證明安全的。

通常在大多數(shù)串行EEPROM器件中,寫操作首先將受影響頁面中的每個(gè)位設(shè)置為已知值,然后更改必須更改的位以寫入請求的值。因此,當(dāng)電源出現(xiàn)故障時(shí),很可能在中斷的寫入操作期間頁面的所有字節(jié)都損壞。通??梢酝ㄟ^將新數(shù)據(jù)寫入損壞的頁面來從此故障事件中恢復(fù)。盡管如此,以前的數(shù)據(jù)還是會丟失。

寫入操作期間的易受攻擊時(shí)刻是(按時(shí)間順序):

在對數(shù)據(jù)字段的寫入操作期間:如果此時(shí)發(fā)生電源故障,則檢查操作不會檢測到錯(cuò)誤。正在寫入的寫入緩沖區(qū)仍具有可用狀態(tài),并且可用緩沖區(qū)不包含有效的 CRC 值。

當(dāng)前寫入緩沖區(qū)的寫入狀態(tài):此操作將狀態(tài)字段更改為已占用,設(shè)置 CRC,并填寫寫入操作的頁面地址。如果此過程中斷,則滿足以下條件之一:(1) 狀態(tài)將無效,導(dǎo)致寫入錯(cuò)誤中斷;(2)狀態(tài)有效,但CRC失敗,再次導(dǎo)致寫入錯(cuò)誤中斷;或 (3) 狀態(tài)和 CRC 字段將有效。在最后一種情況下,系統(tǒng)有一個(gè)未提交的寫入掛起??梢詸z測到這種情況,因?yàn)橐粋€(gè)緩沖區(qū)將被占用,另一個(gè)緩沖區(qū)將過期。如果子系統(tǒng)的其余部分簽出,則用戶代碼可以通過發(fā)出提交或回滾操作來繼續(xù)。無論如何,主陣列和檢查數(shù)組都是安全的。

將以前的緩沖區(qū)狀態(tài)清除為可用:緩沖區(qū)將具有損壞狀態(tài)或 CRC,下一個(gè)緩沖區(qū)將被占用。這意味著清除該緩沖區(qū)狀態(tài)的操作已中斷,可以提交或回滾。

在寫入和提交操作之間:只有一個(gè)寫入緩沖區(qū)具有占用狀態(tài),其 CRC 將進(jìn)行驗(yàn)證。用戶代碼可以請求提交或回滾。寫緩沖數(shù)組、檢查數(shù)組和主陣列是安全的。

提交操作的易受攻擊時(shí)刻包括:

將數(shù)據(jù)字段復(fù)制到主陣列:如果寫入操作中斷,則主陣列的一頁可能會損壞。check 函數(shù)會將 (1) 有效的、占用的寫入緩沖區(qū)和 (2) 損壞的主數(shù)組頁的情況標(biāo)識為中斷的提交。寫緩沖數(shù)組和檢查數(shù)組將是安全的。在這種情況下,清理將完成提交并返回已清理的系統(tǒng)。即使寫入完成,請注意檢查操作也會失敗,因?yàn)闄z查數(shù)組中的 CRC 將與計(jì)算的 CRC 不同。

更新檢查數(shù)組中的CRC:如果對檢查數(shù)組中的頁面的寫入操作中斷,則整個(gè)頁面可能會損壞。這意味著主數(shù)組中的 15 個(gè)頁面將具有無效的 CRC 值。但是 check 可以發(fā)現(xiàn)這一點(diǎn),因?yàn)?check 數(shù)組中的每個(gè)頁面都有自己的校驗(yàn)和,并且在寫入中斷后這將失敗。在這種情況下,檢查將返回保護(hù)失敗。解決方法是,首先,重新計(jì)算所有 15 個(gè)受影響頁面的 CRC 值。然后將這些值寫入檢查數(shù)組中的頁面,以及頁面本身的有效 CRC 值。

更新寫入緩沖區(qū)數(shù)組中的狀態(tài):如果在狀態(tài)變量從占用更改為過期時(shí)寫入周期中斷,則整行可能已損壞。但是,檢查數(shù)組和主數(shù)組將保持安全。檢查將發(fā)現(xiàn)一個(gè)頁面損壞,并將拋出中斷的寫入錯(cuò)誤。當(dāng)清理運(yùn)行時(shí),它將重置寫入緩沖區(qū)子系統(tǒng),完成提交操作。

最后,回滾期間的脆弱時(shí)刻是:

更新寫入緩沖區(qū)數(shù)組中的狀態(tài):類似于提交周期的最終狀態(tài),這只是將寫入緩沖區(qū)中的占用狀態(tài)重置為過期狀態(tài)。如果這被中斷,檢查例程將返回中斷的寫入,清理將重新初始化整個(gè)寫入緩沖區(qū)數(shù)組。同樣,檢查數(shù)組和主數(shù)組是安全的。

因此,可以看出,無論何時(shí)斷電或處理器復(fù)位,存儲子系統(tǒng)都保持其完整性。電源故障后,存儲子系統(tǒng)將返回到準(zhǔn)備寫入或讀取的狀態(tài)。如果提交操作被中斷,子系統(tǒng)將返回到提交或回滾成功的狀態(tài)。

從這里開始設(shè)計(jì)

用于MAXQ微控制器的EEPROM存儲系統(tǒng)已經(jīng)完成。系統(tǒng)的增強(qiáng)由各個(gè)系統(tǒng)集成商自行決定。盡管如此,還是想到了一些想法:

C 包裝器:在大多數(shù) C 方言中,有一種標(biāo)準(zhǔn)方法可以在匯編語言子例程之間傳輸數(shù)據(jù)。例如,在 IAR 環(huán)境中,參數(shù)在低編號累加器中傳入和傳出。為這些例程創(chuàng)建 C 包裝器就像編寫函數(shù)原型一樣簡單,因?yàn)閰?shù)已經(jīng)在 A[0] 和 A[1] 中傳遞。在其他 C 環(huán)境中,參數(shù)在數(shù)據(jù)堆棧上傳遞,需要一個(gè)簡單的包裝器子例程。

并發(fā)事務(wù):保證寫入周期的完整性至關(guān)重要,提供一種實(shí)現(xiàn)這種完整性的機(jī)制對于平臺的整體成功至關(guān)重要。但是,許多應(yīng)用程序需要一種機(jī)制,通過該機(jī)制,可以將一系列寫入周期排隊(duì),然后作為一個(gè)單元執(zhí)行,并保證要么全部執(zhí)行,要么不執(zhí)行。此處介紹的機(jī)制不是這樣工作的。如果系統(tǒng)正在維護(hù)跨多個(gè)頁的記錄,則可以中斷寫入,以便在恢復(fù)后,記錄包含包含部分新條目的頁和包含部分舊條目的頁。避免此問題的一種方法是在執(zhí)行提交之前允許多個(gè)寫入操作。此方法并不像聽起來那么簡單,因?yàn)椴糠痔峤坏氖聞?wù)可能包含新記錄片段、舊記錄片段和損壞頁面的混合。

磨損均衡:閃存文件系統(tǒng)的一項(xiàng)功能,磨損均衡是指虛擬化頁面地址的做法,以便頻繁寫入的頁面可以物理地出現(xiàn)在陣列中的任何位置。這種做法的最佳方法并不明顯。這是因?yàn)樽蠲黠@的解決方案(位于固定位置的可移動扇區(qū)的目錄,每次寫入一次都會更新)會導(dǎo)致存儲目錄的頁面迅速磨損。相反,目錄本身必須虛擬化和分布式,就像數(shù)據(jù)頁一樣。

替代幾何形狀:此處介紹的系統(tǒng)假設(shè) 16kB 部分具有 32 字節(jié)頁面。如果所選部分具有較大的頁面(64 字節(jié)或 128 字節(jié)),則函數(shù)仍將工作,但會有一些額外的寫入磨損。(更新 32 字節(jié)頁面的一個(gè) 128 字節(jié)段將對整個(gè) 128 字節(jié)頁面執(zhí)行寫入。但這些功能不適用于包含較小頁面的設(shè)備??梢詷?gòu)建一個(gè)系統(tǒng),即時(shí)確定特定EEPROM器件的特性,并相應(yīng)地配置系統(tǒng)參數(shù)。

增強(qiáng)的安全性:該系統(tǒng)可防止一種類型的故障:由于電源故障或意外系統(tǒng)重置而導(dǎo)致EEPROM操作中斷。但EEPROM器件可能會(偶爾)以其他方式失敗。這方面的一個(gè)例子是電路噪聲或電離輻射引起的軟故障。另一個(gè)例子是由于一個(gè)或多個(gè)電池的磨損而導(dǎo)致的硬故障。

處理這些問題的一種方法是計(jì)算和維護(hù)綜合征,而不是簡單的CRC檢查詞。綜合征類似于校驗(yàn)字,但包含足夠的信息來糾正簡單的位錯(cuò)誤。最簡單的綜合征系統(tǒng)可以用日志檢查n個(gè)數(shù)據(jù)位2n + 1 個(gè)校驗(yàn)位。因此,對于 32 字節(jié)(256 位)的頁面大小,只有 <> 位的綜合征字可以糾正任何單位錯(cuò)誤。隨著對數(shù)據(jù)完整性的要求變得更加嚴(yán)格,可以對問題產(chǎn)生更復(fù)雜的影響。

結(jié)論

外部串行EEPROM提供了一種在微控制器環(huán)境中存儲非易失性數(shù)據(jù)的可靠方法。使用此處介紹的技術(shù),即使面對中斷的寫入周期,串行EEPROM也可以變得可靠。每當(dāng)數(shù)據(jù)完整性對應(yīng)用程序至關(guān)重要時(shí),設(shè)計(jì)人員就應(yīng)考慮這些技術(shù)。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 微控制器
    +關(guān)注

    關(guān)注

    48

    文章

    7454

    瀏覽量

    150852
  • 存儲器
    +關(guān)注

    關(guān)注

    38

    文章

    7430

    瀏覽量

    163514
  • EEPROM
    +關(guān)注

    關(guān)注

    9

    文章

    1008

    瀏覽量

    81332
收藏 人收藏

    評論

    相關(guān)推薦

    EEPROM讀寫操作常見的陷阱

    時(shí),EEPROM數(shù)據(jù)偶爾會丟失。 原因:在斷電時(shí)剛好在進(jìn)行EEPROM操作。解決方法:加大電源濾波電容的容量,增加電壓檢測功能,當(dāng)電壓偏低時(shí)禁止EEPROM寫入
    發(fā)表于 10-18 14:31

    MAXQ8913芯片結(jié)束資料分享

    光學(xué)圖像穩(wěn)定器,伺服環(huán)路控制,帶有揚(yáng)聲器驅(qū)動的語音發(fā)生器?! ?b class='flag-5'>MAXQ8913特性  ·高性能、低功耗16位MAXQ? RISC內(nèi)核  ·單周期、16 x 16硬件乘法/累加操作,帶有48位累加器
    發(fā)表于 09-28 10:22

    USB收發(fā)器的微控制電路MAXQ612相關(guān)資料下載

    閃存和6KB數(shù)據(jù)SRAM。通過安全存儲器管理單元(MMU)提供知識產(chǎn)權(quán)(IP)保護(hù),該安全MMU可支持多種授權(quán)等級配置,保護(hù)代碼不被復(fù)制和進(jìn)行逆向工程。授權(quán)等級使廠商可以提供MAXQ612/M
    發(fā)表于 04-19 07:37

    MAXQ環(huán)境中編程

    摘要:MAXQ2000微控制器的在線調(diào)試與程序裝載功能與IAR Embedded Workbench開發(fā)環(huán)境相結(jié)合,為設(shè)計(jì)者提供C或匯編級的應(yīng)用開發(fā)與測試手段。MAXQ2000基于硬件的調(diào)試引擎與自舉裝載過程在
    發(fā)表于 04-23 17:36 ?16次下載

    MAXQ揭密

    摘要:MAXQ內(nèi)核是功能強(qiáng)大的、單周期、基于傳遞觸發(fā)的CPU。本文通過演示如何根據(jù)簡單的MOVE操作建立整個(gè)指令集來證明MAXQ的強(qiáng)大性能。 MAXQ處理器家族包括功能強(qiáng)大的
    發(fā)表于 04-23 16:26 ?1371次閱讀
    <b class='flag-5'>MAXQ</b>揭密

    MAXQ架構(gòu)的表操作

    摘要:MAXQ微控制器采用Harvard結(jié)構(gòu)。然而,不應(yīng)該認(rèn)為MAXQ微控制器也沿襲了Harvard結(jié)構(gòu)通常所具有的局限性—不能訪問存儲于代碼空間的常量。相反,嵌入在每個(gè)MAXQ器件中的工具使得
    發(fā)表于 04-23 16:40 ?766次閱讀

    利用MAXQ3210進(jìn)行環(huán)境監(jiān)視

    摘要:在MAXQ系列以及其他嵌入式微控制器中,MAXQ3210獨(dú)具特色。它把基于EEPROM的代碼和數(shù)據(jù)存儲、壓電喇叭驅(qū)動器、9V穩(wěn)壓器集成在低引腳數(shù)封裝內(nèi)。高性能的16位RISC核使其運(yùn)行速度
    發(fā)表于 04-23 17:24 ?609次閱讀

    MAXQ環(huán)境EEPROM保護(hù)措施

    摘要:在嵌入式微控制器應(yīng)用中,非易失性存儲器是必不可少的。本應(yīng)用筆記闡述了如何利用基于事務(wù)(transaction)的提交-回退(commit-rollback)機(jī)制,來保護(hù)一個(gè)外部EEPROM存儲器件的內(nèi)容
    發(fā)表于 04-24 09:09 ?1671次閱讀
    <b class='flag-5'>MAXQ</b><b class='flag-5'>環(huán)境</b><b class='flag-5'>下</b><b class='flag-5'>EEPROM</b>的<b class='flag-5'>保護(hù)</b>措施

    STM8S_IAR_EEPROM操作

    STM8S 內(nèi)部eeprom操作,寄存器版
    發(fā)表于 08-31 15:24 ?10次下載

    MAXQ1061加密控制器保護(hù)存儲安全

    MAXQ1061是用于嵌入式設(shè)備的DeepCover?加密控制器。DeepCover嵌入式安全方案采用多重先進(jìn)的物理安全機(jī)制保護(hù)敏感數(shù)據(jù),提供最高等級的密鑰存儲安全保護(hù)。
    的頭像 發(fā)表于 10-09 05:00 ?3709次閱讀

    eeprom故障是什么意思_EEPROM讀寫操作常見的陷阱

    EEPROM是電可擦可編程只讀存儲器的意思,eeprom故障可能是輸入輸出存儲器錯(cuò)誤,也可能是輸入輸出存儲器芯片斷路、短路或者內(nèi)部擊穿。按照相關(guān)協(xié)議來看,EEPROM錯(cuò)誤的情況多數(shù)為A0區(qū)間的值由于誤
    的頭像 發(fā)表于 08-04 10:14 ?4.1w次閱讀
    <b class='flag-5'>eeprom</b>故障是什么意思_<b class='flag-5'>EEPROM</b>讀寫<b class='flag-5'>操作</b>常見的陷阱

    MAXQ環(huán)境保護(hù)EEPROM操作

    發(fā)表于 11-18 23:48 ?0次下載
    <b class='flag-5'>MAXQ</b><b class='flag-5'>環(huán)境</b>中<b class='flag-5'>受</b><b class='flag-5'>保護(hù)</b>的<b class='flag-5'>EEPROM</b><b class='flag-5'>操作</b>

    使用MAXQ3210進(jìn)行環(huán)境監(jiān)測

    MAXQ3210是MAXQ微控制器的低引腳數(shù)實(shí)現(xiàn)方案,設(shè)計(jì)用于不需要昂貴微控制器提供的外設(shè)支持的應(yīng)用。雖然MAXQ3210非常適合環(huán)境傳感器,但它確實(shí)是一款通用、高性能、省電的微控制器
    的頭像 發(fā)表于 03-02 14:15 ?605次閱讀
    使用<b class='flag-5'>MAXQ</b>3210進(jìn)行<b class='flag-5'>環(huán)境</b>監(jiān)測

    如何使用MAXQ串行驅(qū)動器開發(fā)應(yīng)用

    工作臺?,這是使用C語言和匯編語言的MAXQ應(yīng)用的兩個(gè)集成開發(fā)和調(diào)試環(huán)境。C語言示例代碼演示了MAXQ串行驅(qū)動器的使用和限制,以及如何使用MAXQ串行驅(qū)動器實(shí)現(xiàn)RTS/CTS流控制。
    的頭像 發(fā)表于 03-03 13:47 ?827次閱讀
    如何使用<b class='flag-5'>MAXQ</b>串行驅(qū)動器開發(fā)應(yīng)用

    eeprom存儲原理、存儲結(jié)構(gòu)及讀寫操作

    EEPROM(Electrically Erasable Programmable Read-Only Memory,電可擦可編程只讀存儲器)是一種非易失性存儲器,可以在不移除電源的情況進(jìn)行讀寫
    的頭像 發(fā)表于 08-05 17:03 ?1708次閱讀