<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 充分利用MAXQ®處理器的非易失存儲服務(wù)

          充分利用MAXQ®處理器的非易失存儲服務(wù)

          作者: 時(shí)間:2011-05-21 來源:網(wǎng)絡(luò) 收藏

          摘要:需要非數(shù)據(jù)的應(yīng)用通常都需要使用外部串行EEPROM。這篇文章介紹了僅使用MAXQ微控制器中已有的閃存提供非數(shù)據(jù)的方法。

          本文引用地址:http://www.ex-cimer.com/article/150720.htm

          引言

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

          為滿足客戶對非數(shù)據(jù)的要求,設(shè)計(jì)師通常會使用一個(gè)串行EEPROM。這些EEPROM器件體積很小、價(jià)格便宜、而且在市場上已經(jīng)被長期使用,設(shè)計(jì)工程師使用這些器件非常便利。但是在當(dāng)今對成本非常敏感的市場領(lǐng)域,增加一個(gè)并不昂貴的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)存儲器的擦寫,為完整的可讀寫非易失存儲子系統(tǒng)提供了解決方案。

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

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

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

          MAXQ的閃存

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

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

          多數(shù)閃存器件都允許把之前已經(jīng)編程過的位置中的沒有編程過的位從“1”變成“0”狀態(tài)。例如,對于多數(shù)器件,允許對某個(gè)位置編程,把數(shù)據(jù)從0xFFFE變?yōu)?x7FFE,在這個(gè)編程過程中,沒有任一個(gè)位從“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ì)方案

          在這篇文章中,我們主要討論一個(gè)MAXQ器件:MAXQ2000。這個(gè)微處理器具有64kB的程序存儲空間,具體劃分為128個(gè)單元,每個(gè)單元具有256個(gè)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ù)必須保存在一個(gè)可改寫的存儲空間中。

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

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

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

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

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

          方案2

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

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

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

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

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

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

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

          在這個(gè)數(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)前頁面。會打開一個(gè)新頁面以填寫數(shù)據(jù)單元。在整個(gè)數(shù)據(jù)結(jié)構(gòu)的末尾會分配一個(gè)空單元,這里本該是一個(gè)數(shù)據(jù)單元的報(bào)頭。

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


          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();