非易失性存儲器對于嵌入式微控制器應用至關重要。本應用筆記解釋了如何使用基于事務的提交回滾機制來保護外部EEPROM存儲器器件的內容。雖然針對的是外部存儲器器件,但這里介紹的原理同樣適用于許多MAXQ微控制器的內部EEPROM。
介紹
對于嵌入式微控制器應用,非易失性存儲器通常是必不可少的。無論是維護因斷電而必須保留的設置,還是存儲公司的關鍵交易記錄,可靠的非易失性存儲器都是現(xiàn)代微控制器領域的基本要素。
通常,非易失性存儲采用外部串行存儲器的形式。從字面上看,數(shù)十億個這樣的內存組件多年來在該領域已被證明是可靠的?,F(xiàn)在,密度從幾百字節(jié)到一兆字節(jié)甚至更多,幾乎可以在需要維護設置的所有設備中找到至少一種這些緊湊、廉價的設備。
任何類型的非易失性存儲(從EEPROM到閃存再到旋轉存儲)的一個問題是由于寫入周期中斷而導致的數(shù)據(jù)丟失。如果在執(zhí)行寫入周期時電源出現(xiàn)故障,則在電源恢復后,數(shù)據(jù)損壞可能會導致數(shù)據(jù)損壞,而沒有任何簡單的恢復機制。
本文介紹一種基于事務的提交回滾機制,以保護外部串行EEPROM存儲器器件的內容。本文介紹的原理同樣適用于許多MAXQ>微控制器中包含的內部EEPROM。此應用程序的文件可供下載(ZIP,20.5kb)。
I2C EEPROM的特性
串行存儲器器件具有多種接口,但最常用的接口是I2C。這種總線具有許多優(yōu)點:高度標準化;它只需要從控制器到內存的兩根電線;它具有非常靈活的時序要求,使其能夠由軟件驅動。一個I2C主機可以驅動多個I2C從器件,從而最大限度地減少主器件上的引腳數(shù)。
在所有EEPROM器件中,寫入周期明顯長于讀取周期。這是因為電荷在寫入周期中通過隧道機制穿過絕緣屏障傳輸,并且此操作需要時間。雖然增加電壓可以加速這一過程,但過大的電位會導致勢壘的介電擊穿,從而損壞器件。EEPROM 器件的典型寫入周期時間約為 10 毫秒;讀取周期通常發(fā)生在幾百納秒內。
許多I2C EEPROM器件試圖通過使用頁面模式來降低寫入周期時間的重要性。此模式允許將多個字節(jié)傳輸?shù)骄彌_區(qū),然后一次寫入數(shù)組。I2C存儲器器件的典型頁面大小為32字節(jié)。因此,只需一個寫入周期即可填充 EEPROM 陣列的 32 個字節(jié)。
這一點很重要,因為串行EEPROM器件具有指定的耐久性:頁面可以容忍的生命周期寫入周期數(shù)的上限。寫入周期的典型耐久性范圍為 10,000 到 1,000,000。然而,即使有一百萬次寫入周期的耐久性,也很容易看出軟件如何快速磨損存儲設備。每秒僅執(zhí)行 100 個寫入周期,在不到三個小時的時間內,設備寫入周期計數(shù)就耗盡了。
考慮到這些基本的EEPROM特性,嵌入式處理器的穩(wěn)健非易失性存儲系統(tǒng)的設計人員必須牢記以下幾點:
任何一頁都不應成為重復寫入的目標。具體來說,將一個頁面設置為每次寫入另一個頁面時都必須更新的“目錄”是不可接受的。
如果在寫入周期內電源中斷,則必須提供一種機制來:(1) 檢測中斷的寫入:和 (2) 完成事務;或 (3) 將事務回滾到預寫條件。
必須通過某種類型的檢查數(shù)據(jù)機制(校驗和、CRC、消息摘要)來確保數(shù)據(jù)完整性。
設計目標
雖然上述EEPROM考慮因素可以通過許多非易失性文件系統(tǒng)來解決,但這種文件機制給小型嵌入式微控制器帶來了沉重的負擔。許多文件系統(tǒng)需要比小型微控制器更多的RAM,而完整的文件系統(tǒng)比大多數(shù)應用程序所需的RAM要多。
考慮到這一點,以下是EEPROM數(shù)據(jù)保護機制的目標:
輕量級:保護機制應為檢查數(shù)據(jù)保留不超過 10% 的 EEPROM 空間。它應該只需要少量的計算開銷。
塊大?。菏鼙Wo塊的塊大小應與EEPROM中的本機寫入頁相同。由于EEPROM器件的頁面大小始終是2的偶數(shù)次冪,因此軟件編碼比從每個塊保留一個或兩個字節(jié)更容易。
耐久性:不應為每個受保護的周期寫入任何單個頁面。
穩(wěn)?。好總€電源故障實例都應該是可證明的可恢復的。
此處介紹的保護機制有六個接口功能:讀取、寫入、提交、回滾、檢查和清理。
read 函數(shù)接受塊號和指向 32 字節(jié)緩沖區(qū)的指針。如果緩沖區(qū)地址和塊號在有效范圍內,則例程會將指定的塊讀入緩沖區(qū)并檢查其有效性。它將返回條件有效讀取、無效讀取、無效緩沖區(qū)地址或無效頁碼或保護失敗。
寫入函數(shù)接受塊號和指向先前填充了要寫入的數(shù)據(jù)的 32 字節(jié)緩沖區(qū)的指針。如果緩沖區(qū)地址和塊號在有效范圍內,例程會將數(shù)據(jù)復制到非易失性保持緩沖區(qū),并將緩沖區(qū)標記為準備提交。
提交和回滾函數(shù)是可以在寫入后執(zhí)行的互補操作。commit 函數(shù)將最近寫入的緩沖區(qū)復制到其在內存數(shù)組中的最終位置,并為要寫入的下一個數(shù)據(jù)集準備緩沖區(qū)結構?;貪L功能本質上是一個“撤消”。它反轉最近寫入操作的效果,并為下一次寫入準備緩沖區(qū)子系統(tǒng)。
檢查功能讀取存儲設備的每個塊并驗證存儲數(shù)據(jù)的有效性。它還檢查緩沖區(qū)子系統(tǒng),以確保沒有掛起的寫入。任何無效塊或任何掛起的寫入都會導致檢查返回錯誤條件。
清理功能修復了損壞的EEPROM。特別是,它嘗試確定發(fā)生了哪些故障以及可以執(zhí)行哪些操作來解決問題。
有關所有這些功能的更多詳細信息,請參閱下面的操作詳細信息。

圖1.EEPROM 陣列的結構。該數(shù)組分為三個區(qū)域:包含實際用戶數(shù)據(jù)的主數(shù)組;為主數(shù)組中的每一行包含一個 CRC 的檢查數(shù)組;以及包含四個緩沖區(qū)的緩沖區(qū)數(shù)組,用于存儲臨時寫入數(shù)據(jù)。
電子電氣結構
有關EEPROM的結構,請參閱上面的圖1。EEPROM包含三個主要領域:
主陣列:EEPROM的最大部分專用于數(shù)據(jù)存儲。在 16kB 的設備中,總共有 512 頁,每頁 32 字節(jié)。在這樣的設備中,前473頁專用于實際數(shù)據(jù)存儲。
檢查數(shù)組:EEPROM 的第二部分檢查主數(shù)組中每一行的單詞。檢查數(shù)組的每一頁都包含一組 15 位 16 位 CRC 值。每個頁面中的最終 CRC 值將檢查該頁面。校驗數(shù)組占用 473 頁(第 503 頁至第 <> 頁)。
緩沖陣列:EEPROM 的最后一部分包含 32 頁,構成 16 個寫入緩沖區(qū)。每個緩沖區(qū)由四個字段組成:一個數(shù)據(jù)字段,其中包含要在下一個提交指令處寫入主數(shù)組的 1 字節(jié)數(shù)據(jù);標識緩沖區(qū)引用的頁面地址的地址字段;標識緩沖區(qū)狀態(tài)(即可用、已占用、已過期)的狀態(tài)字段;以及檢查整個寫入緩沖區(qū)的 <> 位 CRC 字段。有關緩沖結構,請參見上面的圖 <>。
這種EEPROM結構滿足了設計的大部分主要目標。首先,由于主數(shù)組中的每個頁面都在輔助位置進行檢查,因此頁面的所有位都可用于用戶數(shù)據(jù)。其次,由于主數(shù)組中的每個頁面都由 check 數(shù)組中的唯一字進行檢查,因此 check 數(shù)組中沒有單點故障,整個數(shù)組中沒有必須在每個寫入周期更新的單個頁面。最后,使用四個寫入緩沖區(qū)來分配寫入周期的磨損。
操作細節(jié)
在未受保護的EEPROM中,操作細節(jié)很簡單。讀取周期只是將字節(jié)從所選地址傳輸?shù)街鳈C;寫入周期將字節(jié)從主機傳輸?shù)紼EPROM,并等待操作完成(在大多數(shù)設備中為幾毫秒)。然而,在受保護的EEPROM環(huán)境中,讀取和寫入是更復雜的操作。在下一節(jié)中,將剖析每個操作,以準確發(fā)現(xiàn)調用函數(shù)時發(fā)生的情況。
讀

圖2.讀取操作的流程圖。
讀取操作是最簡單的接口函數(shù),但仍然相當復雜。圖 2 說明了操作流程:
檢查頁面地址和緩沖區(qū)地址以驗證它們是否有效。否則,操作將在此處結束,函數(shù)返回無效的緩沖區(qū)地址或無效的頁碼錯誤。
所選頁將讀入緩沖區(qū)。
計算檢查頁的地址,并將校驗頁讀入暫存緩沖區(qū)。
計算檢查頁的CRC。如果無效,則返回保護失敗錯誤。
CRC是在數(shù)據(jù)緩沖區(qū)上計算的,并與存儲在與讀取頁對應的暫存緩沖區(qū)中的CRC進行比較。如果 CRC 匹配,則例程返回有效讀取;如果 CRC 不匹配,則例程返回無效讀取。在任何情況下,實際讀取的數(shù)據(jù)都保留在返回緩沖區(qū)中,供調用例程根據(jù)需要使用。
寫

圖3.寫入操作的流程圖。
如上所述,寫入操作實際上并沒有寫入主數(shù)組。相反,寫入操作將其數(shù)據(jù)存儲在四個緩沖區(qū)之一中。通過這種方式,主數(shù)組中的先前數(shù)據(jù)將被保留,直到確保寫入過程的有效性。圖 3 中的流程圖顯示:
檢查頁面地址和緩沖區(qū)地址以驗證它們是否有效。否則,操作將在此處結束,函數(shù)返回無效的緩沖區(qū)地址或無效的頁碼錯誤。
讀取每個寫入緩沖區(qū)的狀態(tài)字段。如果任何緩沖區(qū)的狀態(tài)已占用,則操作將失敗并顯示寫入序列錯誤。
四個寫入緩沖區(qū)中的一個應處于過期狀態(tài)。如果是這樣,則激活序列中的下一個緩沖區(qū)。
數(shù)據(jù)將復制到寫入緩沖區(qū)的數(shù)據(jù)字段。
頁面地址將寫入地址字段。計算 CRC 并將其寫入 CRC 字段。狀態(tài)將更新為已占用。以前的緩沖區(qū)設置為可用狀態(tài)(即,從過期更新)。
請注意,此時,讀取操作將返回新寫入頁面的舊值。在提交操作完成之前,不會返回新值。

圖4.提交操作的流程圖。
提交函數(shù)不需要任何參數(shù)。它唯一的工作是忠實地將數(shù)據(jù)從寫緩沖區(qū)傳輸?shù)街鲾?shù)組,然后標記寫緩沖區(qū)已過期。提交函數(shù)的操作如圖 4 所示:
讀取每個寫入緩沖區(qū)的狀態(tài)字段。正好應該將一個緩沖區(qū)標記為已占用。如果不是這樣,則函數(shù)在此處以寫入序列錯誤結束。
使用CRC檢查占用的緩沖區(qū)。如果沒有匹配項,則會引發(fā)數(shù)據(jù)損壞錯誤。
提取地址,并將數(shù)據(jù)寫入主數(shù)組中的指定頁面。
CRC 是跨緩沖區(qū)的數(shù)據(jù)部分計算的。該值保存在臨時寄存器中。
檢查頁面已找到并讀取所選主頁。
使用先前計算的CRC更新檢查頁面,并為檢查頁面計算新的CRC。
檢查頁將寫回檢查數(shù)組。
寫入緩沖區(qū)將更新為過期狀態(tài)。
反轉

圖5.回滾操作的流程圖。
回滾函數(shù)(如圖 5 所示)是最簡單的函數(shù)之一。由于主數(shù)組不會在寫入操作后更新,而只會在提交操作完成后更新,因此回滾只需要使寫入緩沖區(qū)失效。
讀取每個寫入緩沖區(qū)的狀態(tài)字段。正好應該將一個緩沖區(qū)標記為已占用。如果不是這樣,則函數(shù)在此處以寫入序列錯誤結束。
所選寫入緩沖區(qū)的狀態(tài)字段被賦予值已過期。
檢查

圖6.檢查操作的流程圖。
在任何上電事件中,都應調用檢查功能以驗證EEPROM是否已準備好接受數(shù)據(jù)。檢查功能將驗證存儲系統(tǒng)的運行狀況并報告遇到的任何錯誤。它執(zhí)行圖 6 中所示的檢查:
讀取每個寫入緩沖區(qū)。驗證只有一個緩沖區(qū)未處于可用狀態(tài)。如果只有一個緩沖區(qū)包含未定義的狀態(tài)代碼,則返回中斷寫入錯誤。如果所有緩沖區(qū)都包含未定義的狀態(tài)代碼,則返回未初始化的 EEPROM 錯誤。
如果只有一個緩沖區(qū)包含占用的狀態(tài)代碼,則 CRC 該緩沖區(qū)。如果 CRC 失敗,則返回中斷的寫入錯誤。
檢查檢查數(shù)組的每一頁。如果任何行未通過其 CRC 檢查,則返回保護失敗錯誤。
最后,根據(jù)其存儲的 CRC 檢查主數(shù)組的每一頁。如果任何單個頁面的 CRC 失敗,請標記中斷的提交錯誤。
清理

圖7.清理操作的流程圖。
清理功能可解決EEPROM系統(tǒng)存在的任何問題。當清理退出時,EEPROM 子系統(tǒng)應隨時可供使用,無論它處于何種狀態(tài)。將回滾所有未提交的寫入,并完成失敗的提交操作。
圖 7 顯示了清理的工作原理:
如果檢查返回未初始化的 EEPROM 錯誤,則初始化 EEPROM。清除所有數(shù)據(jù)頁,并初始化所有檢查頁。所有寫入緩沖區(qū)都將被清除并以可用狀態(tài)寫入 - 最后一個寫入緩沖區(qū)除外,該緩沖區(qū)以過期狀態(tài)初始化。
如果 check 返回中斷的寫入錯誤,請查找狀態(tài)不是可用的一個寫入緩沖區(qū)。將該狀態(tài)更改為已過期。
如果 check 返回中斷的提交錯誤,請查找 CRC 不匹配的主頁。計算其CRC并更新關聯(lián)的檢查頁面。
如果檢查返回保護失敗,則在提交操作中斷后更新檢查頁。讀取與缺陷檢查頁面關聯(lián)的所有主頁,并刷新檢查頁面。
安全證明
系統(tǒng)安全性的證明集中在識別寫入事務期間的易受攻擊時刻。(讀取事務本質上是安全的。在讀取操作期間不會寫入EEPROM的頁面,因此數(shù)據(jù)不會損壞。在確定了這些脆弱時刻之后,人們只需要確定一個恢復過程。如果恢復機制涵蓋了所有已識別的漏洞,并且如果我們假設檢查/清理周期將是任何可能破壞EEPROM寫入周期的操作(例如上電)之后的第一個事件,那么系統(tǒng)是可證明安全的。
通常在大多數(shù)串行EEPROM器件中,寫操作首先將受影響頁面中的每個位設置為已知值,然后更改必須更改的位以寫入請求的值。因此,當電源出現(xiàn)故障時,很可能在中斷的寫入操作期間頁面的所有字節(jié)都損壞。通??梢酝ㄟ^將新數(shù)據(jù)寫入損壞的頁面來從此故障事件中恢復。盡管如此,以前的數(shù)據(jù)還是會丟失。
寫入操作期間的易受攻擊時刻是(按時間順序):
在對數(shù)據(jù)字段的寫入操作期間:如果此時發(fā)生電源故障,則檢查操作不會檢測到錯誤。正在寫入的寫入緩沖區(qū)仍具有可用狀態(tài),并且可用緩沖區(qū)不包含有效的 CRC 值。
當前寫入緩沖區(qū)的寫入狀態(tài):此操作將狀態(tài)字段更改為已占用,設置 CRC,并填寫寫入操作的頁面地址。如果此過程中斷,則滿足以下條件之一:(1) 狀態(tài)將無效,導致寫入錯誤中斷;(2)狀態(tài)有效,但CRC失敗,再次導致寫入錯誤中斷;或 (3) 狀態(tài)和 CRC 字段將有效。在最后一種情況下,系統(tǒng)有一個未提交的寫入掛起。可以檢測到這種情況,因為一個緩沖區(qū)將被占用,另一個緩沖區(qū)將過期。如果子系統(tǒng)的其余部分簽出,則用戶代碼可以通過發(fā)出提交或回滾操作來繼續(xù)。無論如何,主陣列和檢查數(shù)組都是安全的。
將以前的緩沖區(qū)狀態(tài)清除為可用:緩沖區(qū)將具有損壞狀態(tài)或 CRC,下一個緩沖區(qū)將被占用。這意味著清除該緩沖區(qū)狀態(tài)的操作已中斷,可以提交或回滾。
在寫入和提交操作之間:只有一個寫入緩沖區(qū)具有占用狀態(tài),其 CRC 將進行驗證。用戶代碼可以請求提交或回滾。寫緩沖數(shù)組、檢查數(shù)組和主陣列是安全的。
提交操作的易受攻擊時刻包括:
將數(shù)據(jù)字段復制到主陣列:如果寫入操作中斷,則主陣列的一頁可能會損壞。check 函數(shù)會將 (1) 有效的、占用的寫入緩沖區(qū)和 (2) 損壞的主數(shù)組頁的情況標識為中斷的提交。寫緩沖數(shù)組和檢查數(shù)組將是安全的。在這種情況下,清理將完成提交并返回已清理的系統(tǒng)。即使寫入完成,請注意檢查操作也會失敗,因為檢查數(shù)組中的 CRC 將與計算的 CRC 不同。
更新檢查數(shù)組中的CRC:如果對檢查數(shù)組中的頁面的寫入操作中斷,則整個頁面可能會損壞。這意味著主數(shù)組中的 15 個頁面將具有無效的 CRC 值。但是 check 可以發(fā)現(xiàn)這一點,因為 check 數(shù)組中的每個頁面都有自己的校驗和,并且在寫入中斷后這將失敗。在這種情況下,檢查將返回保護失敗。解決方法是,首先,重新計算所有 15 個受影響頁面的 CRC 值。然后將這些值寫入檢查數(shù)組中的頁面,以及頁面本身的有效 CRC 值。
更新寫入緩沖區(qū)數(shù)組中的狀態(tài):如果在狀態(tài)變量從占用更改為過期時寫入周期中斷,則整行可能已損壞。但是,檢查數(shù)組和主數(shù)組將保持安全。檢查將發(fā)現(xiàn)一個頁面損壞,并將拋出中斷的寫入錯誤。當清理運行時,它將重置寫入緩沖區(qū)子系統(tǒng),完成提交操作。
最后,回滾期間的脆弱時刻是:
更新寫入緩沖區(qū)數(shù)組中的狀態(tài):類似于提交周期的最終狀態(tài),這只是將寫入緩沖區(qū)中的占用狀態(tài)重置為過期狀態(tài)。如果這被中斷,檢查例程將返回中斷的寫入,清理將重新初始化整個寫入緩沖區(qū)數(shù)組。同樣,檢查數(shù)組和主數(shù)組是安全的。
因此,可以看出,無論何時斷電或處理器復位,存儲子系統(tǒng)都保持其完整性。電源故障后,存儲子系統(tǒng)將返回到準備寫入或讀取的狀態(tài)。如果提交操作被中斷,子系統(tǒng)將返回到提交或回滾成功的狀態(tài)。
從這里開始設計
用于MAXQ微控制器的EEPROM存儲系統(tǒng)已經完成。系統(tǒng)的增強由各個系統(tǒng)集成商自行決定。盡管如此,還是想到了一些想法:
C 包裝器:在大多數(shù) C 方言中,有一種標準方法可以在匯編語言子例程之間傳輸數(shù)據(jù)。例如,在 IAR 環(huán)境中,參數(shù)在低編號累加器中傳入和傳出。為這些例程創(chuàng)建 C 包裝器就像編寫函數(shù)原型一樣簡單,因為參數(shù)已經在 A[0] 和 A[1] 中傳遞。在其他 C 環(huán)境中,參數(shù)在數(shù)據(jù)堆棧上傳遞,需要一個簡單的包裝器子例程。
并發(fā)事務:保證寫入周期的完整性至關重要,提供一種實現(xiàn)這種完整性的機制對于平臺的整體成功至關重要。但是,許多應用程序需要一種機制,通過該機制,可以將一系列寫入周期排隊,然后作為一個單元執(zhí)行,并保證要么全部執(zhí)行,要么不執(zhí)行。此處介紹的機制不是這樣工作的。如果系統(tǒng)正在維護跨多個頁的記錄,則可以中斷寫入,以便在恢復后,記錄包含包含部分新條目的頁和包含部分舊條目的頁。避免此問題的一種方法是在執(zhí)行提交之前允許多個寫入操作。此方法并不像聽起來那么簡單,因為部分提交的事務可能包含新記錄片段、舊記錄片段和損壞頁面的混合。
磨損均衡:閃存文件系統(tǒng)的一項功能,磨損均衡是指虛擬化頁面地址的做法,以便頻繁寫入的頁面可以物理地出現(xiàn)在陣列中的任何位置。這種做法的最佳方法并不明顯。這是因為最明顯的解決方案(位于固定位置的可移動扇區(qū)的目錄,每次寫入一次都會更新)會導致存儲目錄的頁面迅速磨損。相反,目錄本身必須虛擬化和分布式,就像數(shù)據(jù)頁一樣。
替代幾何形狀:此處介紹的系統(tǒng)假設 16kB 部分具有 32 字節(jié)頁面。如果所選部分具有較大的頁面(64 字節(jié)或 128 字節(jié)),則函數(shù)仍將工作,但會有一些額外的寫入磨損。(更新 32 字節(jié)頁面的一個 128 字節(jié)段將對整個 128 字節(jié)頁面執(zhí)行寫入。但這些功能不適用于包含較小頁面的設備??梢詷嫿ㄒ粋€系統(tǒng),即時確定特定EEPROM器件的特性,并相應地配置系統(tǒng)參數(shù)。
增強的安全性:該系統(tǒng)可防止一種類型的故障:由于電源故障或意外系統(tǒng)重置而導致EEPROM操作中斷。但EEPROM器件可能會(偶爾)以其他方式失敗。這方面的一個例子是電路噪聲或電離輻射引起的軟故障。另一個例子是由于一個或多個電池的磨損而導致的硬故障。
處理這些問題的一種方法是計算和維護綜合征,而不是簡單的CRC檢查詞。綜合征類似于校驗字,但包含足夠的信息來糾正簡單的位錯誤。最簡單的綜合征系統(tǒng)可以用日志檢查n個數(shù)據(jù)位2n + 1 個校驗位。因此,對于 32 字節(jié)(256 位)的頁面大小,只有 <> 位的綜合征字可以糾正任何單位錯誤。隨著對數(shù)據(jù)完整性的要求變得更加嚴格,可以對問題產生更復雜的影響。
結論
外部串行EEPROM提供了一種在微控制器環(huán)境中存儲非易失性數(shù)據(jù)的可靠方法。使用此處介紹的技術,即使面對中斷的寫入周期,串行EEPROM也可以變得可靠。每當數(shù)據(jù)完整性對應用程序至關重要時,設計人員就應考慮這些技術。
審核編輯:郭婷
-
微控制器
+關注
關注
48文章
8244瀏覽量
162120 -
存儲器
+關注
關注
39文章
7713瀏覽量
170784 -
EEPROM
+關注
關注
9文章
1127瀏覽量
85485
發(fā)布評論請先 登錄
EEPROM讀寫操作常見的陷阱
MAXQ8913芯片結束資料分享
USB收發(fā)器的微控制電路MAXQ612相關資料下載
在MAXQ環(huán)境中編程
MAXQ揭密
MAXQ架構的表操作
利用MAXQ3210進行環(huán)境監(jiān)視
MAXQ環(huán)境下EEPROM的保護措施
MAXQ1061加密控制器保護存儲安全
eeprom故障是什么意思_EEPROM讀寫操作常見的陷阱
使用MAXQ3210進行環(huán)境監(jiān)測
如何使用MAXQ串行驅動器開發(fā)應用

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