《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 微波|射頻 > 設(shè)計(jì)應(yīng)用 > 充分利用MAXQ處理器的非易失存儲服務(wù)
充分利用MAXQ處理器的非易失存儲服務(wù)
摘要: 需要非易失數(shù)據(jù)存儲的應(yīng)用通常都需要使用外部串行EEPROM。這篇文章介紹了僅使用MAXQ微控制器中已有的閃存提供非易失數(shù)據(jù)存儲的方法。
關(guān)鍵詞: 存儲器 MAXQ處理器 EEPROM 閃存 CRC
Abstract:
Key words :

  引言

  需要微控制器的應(yīng)用通常也需要一些機(jī)制,即使在掉電的情況下也可以保存設(shè)置。例如,一臺收音機(jī),假如在更換電池的時候會丟失之前的電臺設(shè)置,肯定不會在當(dāng)今的市場上獲得成功。客戶期望喜歡的頻道、溫度預(yù)設(shè)值、參數(shù)首選項(xiàng)和其他持久性的信息能夠一直被保存。

  為滿足客戶對非易失數(shù)據(jù)存儲的要求,設(shè)計(jì)師通常會使用一個串行EEPROM。這些EEPROM器件體積很小、價格便宜、而且在市場上已經(jīng)被長期使用,設(shè)計(jì)工程師使用這些器件非常便利。但是在當(dāng)今對成本非常敏感的市場領(lǐng)域,增加一個并不昂貴的EEPROM可能會使設(shè)計(jì)超出預(yù)算。

  很多處理器使用閃存存儲程序代碼,使用靜態(tài)RAM存儲數(shù)據(jù)信息。盡管充分利用閃存未使用的部分作為非易失數(shù)據(jù)存儲很有吸引力,但是傳統(tǒng)的哈佛架構(gòu)制約了這種應(yīng)用。MAXQ架構(gòu)屬于哈佛架構(gòu),具有獨(dú)立的代碼和數(shù)據(jù)總線。但MAXQ器件包含的硬件部分可以實(shí)現(xiàn)偽馮諾依曼架構(gòu),如同訪問數(shù)據(jù)空間一樣訪問代碼空間。這種額外的多功能性,結(jié)合MAXQ的效用函數(shù),可實(shí)現(xiàn)存儲器的擦寫服務(wù),為完整的可讀寫非易失存儲子系統(tǒng)提供了解決方案。

  關(guān)于閃存的基本考慮

  閃存是一種電子可擦除存儲。通常也被認(rèn)為是“主讀”。簡言之,盡管閃存是可寫的,但數(shù)據(jù)更新并不會很頻繁,多數(shù)的操作都是讀操作。多數(shù)閃存器件從字面意思來講都是可寫的,但每次只能整塊擦除。這使得那些存儲器件通常都不適合用于易變存儲,只適合用作從不改變內(nèi)容的固定數(shù)據(jù)存儲。

  有兩種類型的閃存:NAND閃存和NOR閃存。NAND閃存用在存儲卡和U盤中。通常,由于數(shù)據(jù)按時鐘串行傳輸,從NAND器件中讀數(shù)據(jù)需要數(shù)個周期。這種有序的操作使NAND閃存不適合用作程序代碼存儲,因?yàn)樽x取時間會太長。相反,NOR閃存類似傳統(tǒng)字節(jié)寬度或字寬度存儲。讀取NOR閃存就像讀取ROM器件:先發(fā)器件選擇和地址命令,在等待足夠的存取時間之后,從總線上讀取數(shù)據(jù)。NOR閃存用于MAXQ處理器中。

  MAXQ處理器的閃存

  MAXQ處理器中使用的閃存單元被擦除時會變成“1”狀態(tài)。因此,在擦除后,存儲單元中的每個位置都將包含0xFFFF。對某一存儲位置進(jìn)行編程會把某些位從“1”變成“0”狀態(tài)。為了使被編程過的位重新變回“1”狀態(tài),整個單元必須被擦除。

  任何電擦除的存儲器件必須面臨的問題是持久性。根據(jù)特定的技術(shù),一個閃存單元在完全失效之前,可以忍耐的擦除次數(shù)少達(dá)1,000次,多達(dá)1,000,000次。因此,使用閃存做數(shù)據(jù)存儲的任何應(yīng)用都必須保證寫操作循環(huán)在整個陣列中均勻分布,不允許某一個位置的擦除編程次數(shù)比其他位置多很多。

  多數(shù)閃存器件都允許把之前已經(jīng)編程過的位置中的沒有編程過的位從“1”變成“0”狀態(tài)。例如,對于多數(shù)器件,允許對某個位置編程,把數(shù)據(jù)從0xFFFE變?yōu)?x7FFE,在這個編程過程中,沒有任一個位從“0”變成“1”。然而,MAXQ系列器件中使用的閃存,不允許對已經(jīng)編程過的位置再編程,即使沒有發(fā)生從“0”到“1”的變化。這樣的寫操作會失敗,保持?jǐn)?shù)據(jù)在0xFFFE狀態(tài)。

  MAXQ器件編程受限制的理由如下。正在被編程的存儲單元起初是作為代碼空間的,所以必須很謹(jǐn)慎,禁止對已寫過的位置的任何寫操作。0xFFFF指令指一條無效的源代碼,它不太可能出現(xiàn)在有效的代碼單元內(nèi)。因此,阻止對已編程過的位置的寫操作能夠幫助保持代碼單元的完整性。

  使用MAXQ2000的設(shè)計(jì)方案

  在這篇文章中,我們主要討論一個MAXQ器件:MAXQ2000。這個微處理器具有64kB的程序存儲空間,具體劃分為128個單元,每個單元具有256個16位的字。下面介紹兩種設(shè)計(jì)方案。第一種方案適用于信息寫一次后在產(chǎn)品的生命周期內(nèi)不會再頻繁改動,例如校準(zhǔn)數(shù)據(jù)、版本信息和特征參數(shù)等等。第二種方案針對更普通的裝置,這種設(shè)計(jì)要允許數(shù)據(jù)頻繁改動,例如使用信息或者詳細(xì)記錄等。

  方案1

  問題:校準(zhǔn)數(shù)據(jù)需要存儲在產(chǎn)品中。產(chǎn)品會一直需要重新校準(zhǔn),所以校準(zhǔn)數(shù)據(jù)必須保存在一個可改寫的存儲空間中。

  解決方案:這實(shí)際上是可以想象的到的最簡單的情況。MAXQ2000程序存儲空間中預(yù)留了兩個單元用于存儲校準(zhǔn)數(shù)據(jù),一個是字地址0x7E00,另一個是0x7F00。當(dāng)MAXQ2000第一次收到保存校準(zhǔn)數(shù)據(jù)的命令,它就會檢查這兩個單元并確保它們是空的。校準(zhǔn)數(shù)據(jù)被保存到第一個單元。

  當(dāng)MAXQ2000第二次收到保存校準(zhǔn)數(shù)據(jù)的命令,它會再次檢查這兩個單元。當(dāng)發(fā)現(xiàn)0單元已被使用,它會把校準(zhǔn)數(shù)據(jù)復(fù)制到1單元,接著擦除0單元。

  當(dāng)MAXQ2000收到讀校準(zhǔn)數(shù)據(jù)的請求(例如在上電時),它會讀這兩個單元,看哪個正在被使用。沒有被擦除的單元用來配置器件到校準(zhǔn)狀態(tài)。

  這種方案的最主要優(yōu)點(diǎn)是簡易性。當(dāng)某些應(yīng)用需要在上電時作配置時(或者其它恢復(fù)配置的情況),這種方法很適用。讀程序會接收到一個字指針,并返回這個地址的內(nèi)容;寫程序會接收一個字指針,并嘗試對這個地址寫操作。擦除程序會擦除這兩個單元。

 

  這種方案的缺點(diǎn)是:子程序極其不智能。無法判斷寫操作是否成功。假如寫操作失敗了,不會有任何動作來解決問題。為什么這種方案只適用于對已知的空單元寫操作,以上這種限制就是其原因。

  方案2

  問題:非易失存儲用來跟蹤用電量和其它會經(jīng)常改變的數(shù)據(jù)。更新的頻率從一周數(shù)次到一天數(shù)次。電表是一個很好的應(yīng)用舉例。

  解決方案:在這種情況下即時傳統(tǒng)的EEPROM也需要另求幫助。問題在于:頻繁的更新、和可擦除存儲技術(shù)固有的有限電擦除壽命,排除了使用單個EEPROM頻繁寫擦除操作的可能性。假如這種應(yīng)用需要每小時更新一次。具有10,000次寫擦除次數(shù)限制的EEPROM只能工作一年,遠(yuǎn)遠(yuǎn)低于電表應(yīng)用所需的10年壽命設(shè)計(jì)目標(biāo)。

  這個問題的解決方案是實(shí)現(xiàn)“損耗平衡”。也就是指不對單一位置重復(fù)寫操作。相反,在整個存儲陣列中執(zhí)行均勻分布的寫操作。

  正是基于此目的,損耗平衡技術(shù)被接受,并在閃存存儲設(shè)備中使用。它的算法非常復(fù)雜難以理解。但對于我們,介紹簡單的機(jī)理就足夠了。

  在這種設(shè)計(jì)中,存儲陣列中的數(shù)據(jù)條目并不是以地址作參考,而是以數(shù)據(jù)元編號為參考。數(shù)據(jù)元編號是一個和數(shù)據(jù)元素一一對應(yīng)的任意8位數(shù)值。所以在這個方案中最大可以有255個數(shù)據(jù)元(數(shù)據(jù)元0預(yù)留)。每個數(shù)據(jù)元包含:包括數(shù)據(jù)元編號和數(shù)據(jù)元長度的雙字節(jié)報(bào)頭(圖1);指示1、2、3或者4個16位字的兩位碼,以保留足夠的剩余空間進(jìn)行錯誤管理。

數(shù)據(jù)單元報(bào)頭結(jié)構(gòu)

圖1. 數(shù)據(jù)單元報(bào)頭結(jié)構(gòu)

  寫數(shù)據(jù)單元時,寫子程序必須知道要寫的數(shù)據(jù)、數(shù)據(jù)單元的長度和數(shù)據(jù)要寫的位置。很容易可以知道數(shù)據(jù)寫在哪個地址;無論是新數(shù)據(jù)單元還是更新已有的數(shù)據(jù)單元,都會寫在存儲陣列的末尾。寫命令會搜索陣列的末尾,緊接著在最后一個記錄后寫入新的數(shù)據(jù)單元。假如在當(dāng)前的存儲頁面沒有足夠的空間保存特定長度的數(shù)據(jù)元,就會出現(xiàn)頁面結(jié)束標(biāo)志并打開一個新頁面。圖2是這種典型的數(shù)據(jù)頁面的結(jié)構(gòu)。

  在這個數(shù)據(jù)頁面中,先寫數(shù)據(jù)單元1,并更新。接著寫數(shù)據(jù)單元4,但從不更新。隨后是數(shù)據(jù)單元3,共更新7次。最后寫入數(shù)據(jù)單元2,從不更新。

  頁面結(jié)束標(biāo)志的出現(xiàn)表明曾執(zhí)行寫操作,但數(shù)據(jù)單元太長不能填入當(dāng)前頁面。會打開一個新頁面以填寫數(shù)據(jù)單元。在整個數(shù)據(jù)結(jié)構(gòu)的末尾會分配一個空單元,這里本該是一個數(shù)據(jù)單元的報(bào)頭。

典型的數(shù)據(jù)頁面

圖2. 典型的數(shù)據(jù)頁面

  要注意這種方案并沒有涉及重復(fù)記錄的問題。因?yàn)橹貜?fù)記錄不會有問題。事實(shí)上,讀和寫程序都會完全忽略重復(fù)記錄。寫操作時,不管同樣編號的記錄是否存在,新記錄都會寫在陣列的末尾。當(dāng)讀操作時,只有符合請求記錄編號的最后一個(所以是最近的)記錄可以讀到。

  從陣列中讀取數(shù)據(jù)元會比寫操作更復(fù)雜。讀功能會收到數(shù)據(jù)元編號和數(shù)據(jù)元應(yīng)該寫入的地址。當(dāng)執(zhí)行此命令時,讀操作會從陣列的最開始進(jìn)行搜索。當(dāng)它找到一個記錄符合被請求的數(shù)據(jù)元,它會保存這個地址并繼續(xù)搜索。當(dāng)它找到另外一個匹配的記錄時,讀命令會用新地址替代已保存的地址。當(dāng)搜索到陣列的末尾時,保存的地址就會是符合請求記錄的最近寫入的記錄。當(dāng)執(zhí)行讀操作時,就會把這個數(shù)據(jù)復(fù)制到緩存中。

  盡管所介紹的用來從存儲陣列中保存和讀取記錄的主讀機(jī)制是可行的,還會存在一個問題:沒有機(jī)制可以重新使用被過時的記錄占用的空間(也沒有機(jī)制可以刪除記錄。但由于這種方案是針對嵌入式應(yīng)用開發(fā)的,所以可能不會是個很嚴(yán)重的問題。)。如果不重新恢復(fù)一些空間,這些之前被分配的空間會很快用盡。由于閃存只能每次擦除一整個頁面,恢復(fù)空間意味著擦除整個頁面。另外一個更嚴(yán)重的問題是閃存頁面不能被隨便擦除,會存在刪除有用信息的風(fēng)險(xiǎn)。唯一的可選方案是在刪除整個舊頁面之前,把有用信息復(fù)制到一個新頁面。

  從廢舊的記錄中恢復(fù)空間有三個步驟。第一,打開新頁面,把每個數(shù)據(jù)元的最近版本復(fù)制到新頁面中。第二,擦除舊頁面。第三,對新頁面做頁面標(biāo)示,是讀命令可以找到新頁面。

  第一個步驟比較復(fù)雜,需要更詳細(xì)的檢查。完成這個步驟最簡單的方法可以分成兩個子步驟:第一,使用一個RAM保存記錄編號和陣列中最近記錄的地址;第二,從RAM陣列逐一復(fù)制最近記錄到新閃存頁面。這個過程最快,并且相對簡單。

  使用這兩個子步驟存在的問題是MAXQ2000只有1k字的RAM空間。上述方案限制了可以保存到RAM中作緩存的數(shù)據(jù)量。這明顯是不能接受的。

  這種難題的解決方案非常耗時,但不管存儲陣列變得多大(合理范圍內(nèi))都是可行的。為源陣列中的每一項(xiàng)條目單獨(dú)操作,而不是在RAM中建立指針。因此,算法可以簡化為:

  •   從源陣列讀取一個數(shù)據(jù)元。
  •   在目標(biāo)陣列中搜索這個數(shù)據(jù)單元。假如找到了,就說明這個數(shù)據(jù)單元已經(jīng)寫入。源指針增加并返回步驟1。
  •   在源陣列中搜索這個數(shù)據(jù)單元最近記錄。
  •   把這個數(shù)據(jù)單元的最近記錄寫入目標(biāo)陣列中。
  •   源指針增加并返回步驟1。

  最后,在目標(biāo)陣列中,每個數(shù)據(jù)元都有精確的條目對應(yīng)。填寫后的頁面如圖3示意。這樣,就可以安全擦除源頁面,并把頁面報(bào)頭寫入目標(biāo)陣列。

空間恢復(fù)后

圖3. 空間恢復(fù)后,圖2中的數(shù)據(jù)頁面會如此表現(xiàn)。

  這個過程對于數(shù)據(jù)存儲會非常安全。然而,當(dāng)使用閃存器件時還要面對另一個風(fēng)險(xiǎn):在寫或者擦除操作中掉電。假如發(fā)生掉電,有可能會破壞一個或者多個頁面(例如寫操作)或者不能完全擦除頁面(例如擦除操作)。而我們這種緊湊的操作從本質(zhì)上講是安全的。可以考慮以下的情況:

  •   假如在填寫操作時掉電,源頁面仍然保持完整。當(dāng)重新上電后,很容易辨別新寫的頁面(他們沒有頁面報(bào)頭)并把它擦除,再重新啟動填寫操作。
  •   假如在正擦除舊頁面時掉電,可能會包含無效的報(bào)頭。可以擦除這些頁面并把報(bào)頭添加到新頁面。
  •   假如在正把頁面報(bào)頭寫入到新頁面時掉電,數(shù)據(jù)仍然是完整的。頁面報(bào)頭更新操作可以再次重新啟動。
  •   簡言之,這些預(yù)料之外的突發(fā)事件不會導(dǎo)致陣列數(shù)據(jù)被破壞并不可恢復(fù)。

  方案2的改進(jìn)

  這里介紹的存儲子系統(tǒng)沒有錯誤檢測的機(jī)制。在數(shù)據(jù)元標(biāo)識符中有一些位(這里的是6位)沒有被使用。可以使用CRC6算法(x6 + x + 1)根據(jù)數(shù)據(jù)元計(jì)算出CRC以確保沒有發(fā)生讀寫錯誤。這雖然不是特別強(qiáng)大的算法(它會錯過多位錯誤中的1/64),它可以檢測到多數(shù)可能發(fā)生的錯誤。

  這個方法對系統(tǒng)的另一個限制是讀取時間很長。每次讀操作都需要讀取陣列中的所有記錄,以找到最近的記錄。有3個方法可以用來縮短讀取時間:

  在數(shù)據(jù)單元中為正向指針留一個空字節(jié)。當(dāng)數(shù)據(jù)更新時,為正向指針分配一個新的入口地址。按照這種方式,數(shù)據(jù)表格可以按鏈表的方式移動。

  向后移動表格。這樣就可以在被請求信號第一次出現(xiàn)時停止搜索。

  假如單元數(shù)量很少,可以在啟動時建立一個RAM陣列,包含單元ID和指針。后面的讀取會很快。只需讀RAM陣列以決定從哪兒獲取數(shù)據(jù)單元。

  結(jié)論

  非易失數(shù)據(jù)存儲是每位設(shè)計(jì)工程師遲早都必須面對的問題。使用MAXQ處理器靈活的閃存,就不用再借助于串行存儲保存配置數(shù)據(jù)了。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲高清网站| 欧美在线你懂的| 亚洲欧美怡红院| 一本色道久久加勒比精品| 亚洲国产高清一区| 依依成人综合视频| 国内精品模特av私拍在线观看| 国产美女精品视频免费观看| 国产精品激情av在线播放| 欧美日韩视频在线| 欧美日韩亚洲视频一区| 欧美人与性动交α欧美精品济南到| 欧美aaaaaaaa牛牛影院| 欧美成人精品一区二区三区| 欧美1区2区3区| 欧美高清在线视频观看不卡| 欧美成人一区二区三区| 欧美丰满少妇xxxbbb| 欧美成人有码| 欧美精品 国产精品| 欧美精品二区| 欧美日韩国产综合视频在线观看中文 | 久久久中精品2020中文| 久久成人久久爱| 久久精品视频免费| 久久久国产成人精品| 久久亚洲捆绑美女| 女女同性女同一区二区三区91| 美国成人直播| 欧美韩日一区二区| 欧美日韩国产不卡在线看| 欧美日韩一区高清| 国产精品久久久久久久久借妻 | 午夜精品久久久久久99热软件| 性欧美18~19sex高清播放| 香蕉久久夜色精品| 久久九九精品| 欧美成年人视频| 欧美日本一道本| 国产精品久久久久久久久久直播| 国产欧美一区二区三区久久人妖| 国模 一区 二区 三区| 18成人免费观看视频| 亚洲精品在线视频观看| 亚洲色诱最新| 欧美影院精品一区| 亚洲精品久久久蜜桃| 亚洲影院一区| 久久久久99精品国产片| 欧美成人日韩| 国产精品国内视频| 狠狠色丁香久久婷婷综合丁香| 亚洲国产精品久久久久| 在线亚洲欧美视频| 欧美在线视频在线播放完整版免费观看| 亚洲国产精品悠悠久久琪琪| 一区二区三区精品在线| 久久爱www久久做| 欧美激情成人在线| 国产精品一二| 亚洲激情视频网站| 亚洲欧美日韩天堂一区二区| 91久久综合| 亚洲免费伊人电影在线观看av| 久久男女视频| 欧美视频在线不卡| 国外成人在线视频网站| 亚洲美女av黄| 欧美一站二站| 亚洲视频福利| 鲁大师影院一区二区三区| 欧美三日本三级少妇三2023| 韩日精品视频| 中文无字幕一区二区三区| 久久精品亚洲精品国产欧美kt∨| 亚洲视频在线二区| 久久一区中文字幕| 国产精品久久久久久一区二区三区| 亚洲成人自拍视频| 午夜亚洲伦理| 亚洲一区二区三区欧美| 免费欧美日韩国产三级电影| 国产精品区一区二区三区| 亚洲国产综合91精品麻豆| 午夜一级在线看亚洲| 这里只有精品在线播放| 久久这里只有| 国产精品你懂得| 亚洲日本精品国产第一区| 久久精品国产第一区二区三区| 亚洲欧美成人网| 欧美理论电影在线观看| 狠狠色伊人亚洲综合成人| 亚洲尤物精选| 亚洲午夜黄色| 欧美高清在线一区二区| 黑人极品videos精品欧美裸| 亚洲欧美日韩精品久久久久| 亚洲特级片在线| 欧美韩日一区| 怡红院av一区二区三区| 午夜精品久久久久久久99黑人| 亚洲亚洲精品在线观看 | 欧美高清视频一区二区| 韩日午夜在线资源一区二区| 亚洲欧美日本国产有色| 亚洲尤物在线视频观看| 欧美日韩精品在线播放| 亚洲国产乱码最新视频| 久久国产精品毛片| 欧美在线三区| 国产欧美日韩在线| 亚洲欧美激情视频| 午夜精品短视频| 国产精品久久久久久一区二区三区 | 91久久在线视频| 亚洲黄色成人| 免费视频最近日韩| 伊人成年综合电影网| 久久激情五月婷婷| 久久免费视频观看| 国产亚洲福利一区| 午夜免费久久久久| 欧美在线视频一区二区| 国产精品午夜在线| 亚洲专区一区| 欧美综合二区| 国产日韩在线一区| 欧美亚洲免费在线| 久久国内精品自在自线400部| 国产精品视频免费| 午夜精品久久99蜜桃的功能介绍| 新狼窝色av性久久久久久| 国产农村妇女毛片精品久久莱园子 | 亚洲视频欧美在线| 欧美色精品在线视频| 一本色道久久综合狠狠躁篇的优点| 一本色道综合亚洲| 欧美三级乱人伦电影| 亚洲天堂av高清| 性色av一区二区三区| 国产伦精品一区二区| 欧美一区二区三区日韩视频| 久久久一区二区| 亚洲国产精彩中文乱码av在线播放| 亚洲美女电影在线| 欧美视频不卡中文| 亚洲一区二区三区精品动漫| 欧美有码在线观看视频| 黄色成人在线免费| 亚洲精品在线三区| 欧美午夜不卡视频| 亚洲欧美在线播放| 久久资源在线| 亚洲三级免费观看| 亚洲欧美乱综合| 国产一区二区| 亚洲免费观看视频| 欧美性理论片在线观看片免费| 亚洲资源av| 免费视频最近日韩| 一本一本a久久| 久久精品国产综合| 亚洲国产日韩欧美一区二区三区| 亚洲校园激情| 黄色成人av网| 亚洲午夜久久久久久尤物 | 亚洲精品视频在线| 国产精品hd| 久久国产88| 欧美日韩黄色一区二区| 亚洲欧美在线免费观看| 欧美freesex8一10精品| 9国产精品视频| 久久免费国产| 这里只有精品视频| 久久久人成影片一区二区三区| 亚洲精品久久久久| 欧美一区在线直播| 亚洲人成久久| 久久av红桃一区二区小说| 亚洲黄色影片| 久久精品国产99国产精品澳门| 亚洲茄子视频| 久久久国产精品一区二区三区| 日韩一级在线观看| 久久蜜桃资源一区二区老牛| 一二美女精品欧洲| 久久综合网色—综合色88| 中文网丁香综合网| 欧美a级一区二区| 午夜亚洲福利在线老司机| 欧美日韩岛国| 久久精品二区| 国产精品亚洲第一区在线暖暖韩国| 最新成人在线| 国产日韩欧美高清| 亚洲神马久久| 亚洲国产一区二区三区青草影视| 欧美在线亚洲在线|