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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 介紹嵌入式應用中存儲器類型的選擇技巧

          介紹嵌入式應用中存儲器類型的選擇技巧

          ——
          作者: 時間:2007-09-05 來源:賽迪網 收藏
          的類型將決定整個系統(tǒng)的操作和性能,因此存的選擇是一個非常重要的決策。

            無論系統(tǒng)是采用電池供電還是由市電供電,應用需求將決定存的類型(易失性或非易失性)以及使用目的(存儲代碼、數(shù)據(jù)或者兩者兼有)。另外,在選擇過程中,存儲器的尺寸和成本也是需要考慮的重要因素。對于較小的系統(tǒng),微控制器自帶的存儲器就有可能滿足系統(tǒng)要求,而較大的系統(tǒng)可能要求增加外部存儲器。為系統(tǒng)選擇存儲器類型時,需要考慮一些設計參數(shù),包括微控制器的選擇、電壓范圍、電池壽命、讀寫速度、存儲器尺寸、存儲器的特性、擦除/寫入的耐久性以及系統(tǒng)總成本。

            圖1列出了在應用系統(tǒng)中最常用的存儲器類型。下面討論在選擇存儲器時應遵循的基本原則。

          嵌入式應用系統(tǒng)中最常用的存儲器類型

            選擇存儲器時應遵循的基本原則

            1.內部存儲器與外部存儲器

            一般情況下,當確定了存儲程序代碼和數(shù)據(jù)所需要的存儲空間之后,設計工程師將決定是采用內部存儲器還是外部存儲器。通常情況下,內部存儲器的性價比最高但靈活性最低,因此設計工程師必須確定對存儲的需求將來是否會增長,以及是否有某種途徑可以升級到代碼空間更大的微控制器。基于成本考慮

          ,人們通常選擇能滿足應用要求的存儲器容量最小的微控制器,因此在預測代碼規(guī)模的時候要必須特別小心,因為代碼規(guī)模增大可能要求更換微控制器。

            目前市場上存在各種規(guī)模的外部存儲器器件,我們很容易通過增加存儲器來適應代碼規(guī)模的增加。有時這意味著以封裝尺寸相同但容量更大的存儲器替代現(xiàn)有的存儲器,或者在總線上增加存儲器。即使微控制器帶有內部存儲器,也可以通過增加外部串行EEPROM或閃存來滿足系統(tǒng)對非易失性存儲器的需求。

            2.引導存儲器

            在較大的微控制器系統(tǒng)或基于處理器的系統(tǒng)中,設計工程師可以利用引導代碼進行初始化。應用本身通常決定了是否需要引導代碼,以及是否需要專門的引導存儲器。例如,如果沒有外部的尋址總線或串行引導接口,通常使用內部存儲器,而不需要專門的引導器件。但在一些沒有內部程序存儲器的系統(tǒng)中,初始化是操作代碼的一部分,因此所有代碼都將駐留在同一個外部程序存儲器中。某些微控制器既有內部存儲器也有外部尋址總線,在這種情況下,引導代碼將駐留在內部存儲器中,而操作代碼在外部存儲器中。這很可能是最安全的方法,因為改變操作代碼時不會出現(xiàn)意外地修改引導代碼。在所有情況下,引導存儲器都必須是非易失性存儲器。

            3.配置存儲器

            對于現(xiàn)場可編程門陣列(FPGA)或片上系統(tǒng)(SoC),人們使用存儲器來存儲配置信息。這種存儲器必須是非易失性EPROM、EEPROM或閃存。大多數(shù)情況下,F(xiàn)PGA采用SPI接口,但一些較老的器件仍采用FPGA串行接口。串行EEPROM或閃存器件最為常用,EPROM用得較少。

            4.程序存儲器

            所有帶處理器的系統(tǒng)都采用程序存儲器,但設計工程師必須決定這個存儲器是位于處理器內部還是外部。在做出了這個決策之后,設計工程師才能進一步確定存儲器的容量和類型。當然有的時候,微控制器既有內部程序存儲器也有外部尋址總線,此時設計工程師可以選擇使用它們當中的任何一個,或者兩者都使用。這就是為什么為某個應用選擇最佳存儲器的問題,常常由于微控制器的選擇變得復雜起來,以及為什么改變存儲器的規(guī)模也將導致改變微控制器的選擇的原因。

            如果微控制器既利用內部存儲器也利用外部存儲器,則內部存儲器通常被用來存儲不常改變的代碼,而外部存儲器用于存儲更新比較頻繁的代碼和數(shù)據(jù)。設計工程師也需要考慮存儲器是否將被在線重新編程或用新的可編程器件替代。對于需要重編程功能的應用,人們通常選用帶有內部閃存的微控制器,但帶有內部OTP或ROM和外部閃存或EEPROM的微控制器也滿足這個要求。為降低成本,外部閃存可用來存儲代碼和數(shù)據(jù),但在存儲數(shù)據(jù)時必須小心避免意外修改代碼。

            在大多數(shù)中,人們利用閃存存儲程序以便在線升級固件。代碼穩(wěn)定的較老的應用系統(tǒng)仍可以使用ROM和OTP存儲器,但由于閃存的通用性,越來越多的應用系統(tǒng)正轉向閃存。表1給出了程序存儲器類型的參數(shù)比較。

          程序存儲器類型的參數(shù)比較

            5.數(shù)據(jù)存儲器

            與程序存儲器類似,數(shù)據(jù)存儲器可以位于微控制器內部,或者是外部器件,但這兩種情況存在一些差別。有時微控制器內部包含SRAM(易失性)和EEPROM(非易失)兩種數(shù)據(jù)存儲器,但有時不包含內部EEPROM,在這種情況下,當需要存儲大量數(shù)據(jù)時,設計工程師可以選擇外部的串行EEPROM或串行閃存器件。當然,也可以使用并行EEPROM或閃存,但通常它們只被用作程序存儲器。

              當需要外部高速數(shù)據(jù)存儲器時,通常選擇并行SRAM并使用外部串行EEPROM器件來滿足對非易失性存儲器的要求。一些設計還將閃存器件用作程序存儲器,但保留一個扇區(qū)作為數(shù)據(jù)存儲區(qū)。這種方法可以降低成本、空間并提供非易失性數(shù)據(jù)存儲器。

            針對非易失性存儲器要求,串行EEPROM器件支持I2C、SPI或微線(Microwire)通訊總線,而串行閃存通常使用SPI總線。由于寫入速度很快且?guī)в蠭2C和SPI串行接口,F(xiàn)RAM在一些系統(tǒng)中得到應用。表2比較了各類數(shù)據(jù)存儲器的優(yōu)缺點。

          比較了各類數(shù)據(jù)存儲器的優(yōu)缺點

            6.易失性和非易失性存儲器

            存儲器可分成易失性存儲器或者非易失性存儲器,前者在斷電后將丟失數(shù)據(jù),而后者在斷電后仍可保持數(shù)據(jù)。設計工程師有時將易失性存儲器與后備電池一起使用,使其表現(xiàn)猶如非易失性器件,但這可能比簡單地使用非易失性存儲器更加昂貴。然而,對要求存儲器容量非常大的系統(tǒng)而言,帶有后備電池的DRAM可能是滿足設計要求且性價比很高的一種方法。

            在有連續(xù)能量供給的系統(tǒng)中,易失性或非易失性存儲器都可以使用,但必須基于斷電的可能性做出最終決策。如果存儲器中的信息可以在電力恢復時從另一個信源中恢復出來,則可以使用易失性存儲器。

            選擇易失性存儲器與電池一起使用的另一個原因是速度。盡管非易失存儲器件可以在斷電時保持數(shù)據(jù),但寫入數(shù)據(jù)(一個字節(jié)、頁或扇區(qū)

          )的時間較長。

            7.串行存儲器和并行存儲器

            在定義了應用系統(tǒng)之后,微控制器的選擇是決定選擇串行或并行存儲器的一個因素。對于較大的應用系統(tǒng),微控制器通常沒有足夠大的內部存儲器,這時必須使用外部存儲器,因為外部尋址總線通常是并行的,外部的程序存儲器和數(shù)據(jù)存儲器也將是并行的。

            較小的應用系統(tǒng)通常使用帶有內部存儲器但沒有外部地址總線的微控制器。如果需要額外的數(shù)據(jù)存儲器,外部串行存儲器件是最佳選擇。大多數(shù)情況下,這個額外的外部數(shù)據(jù)存儲器是非易失性的。

            根據(jù)不同的設計,引導存儲器可以是串行也可以是并行的。如果微控制器沒有內部存儲器,并行的非易失性存儲器件對大多數(shù)應用系統(tǒng)而言是正確的選擇。但對一些高速應用,可以使用外部的非易失性串行存儲器件來引導微控制器,并允許主代碼存儲在內部或外部高速SRAM中。

            8.EEPROM與閃存

            存儲器技術的成熟使得RAM和ROM之間的界限變得很模糊,如今有一些類型的存儲器(如EEPROM和閃存)組合了兩者的特性。這些器件像RAM一樣進行讀寫,并像ROM一樣在斷電時保持數(shù)據(jù),它們都可電擦除且可編程,但各自有它們優(yōu)缺點。

            從軟件角度看,獨立的EEPROM和閃存器件是類似的,兩者主要差別是EEPROM器件可以逐字節(jié)地修改,而閃存器件只支持扇區(qū)擦除以及對被擦除單元的字、頁或扇區(qū)進行編程。對閃存的重新編程還需要使用SRAM,因此它要求更長的時間內有更多的器件在工作,從而需要消耗更多的電池能量。設計工程師也必須確認在修改數(shù)據(jù)時有足夠容量的SRAM可用。

            存儲器密度是決定選擇串行EEPROM或者閃存的另一個因素。市場上目前可用的獨立串行EEPROM器件的容量在128KB或以下,獨立閃存器件的容量在32KB或以上。

            如果把多個器件級聯(lián)在一起,可以用串行EEPROM實現(xiàn)高于128KB的容量。很高的擦除/寫入耐久性要求促使設計工程師選擇EEPROM,因為典型的串行EEPROM可擦除/寫入100萬次。閃存一般可擦除/寫入1萬次,只有少數(shù)幾種器件能達到10萬次。

            今天,大多數(shù)閃存器件的電壓范圍為2.7V到3.6V。如果不要求字節(jié)尋址能力或很高的擦除/寫入耐久性,在這個電壓范圍內的應用系統(tǒng)采用閃存,可以使成本相對較低。

            9.EEPROM與FRAM

            EEPROM和FRAM的設計參數(shù)類似,但FRAM的可讀寫次數(shù)非常高且寫入速度較快。然而通常情況下,用戶仍會選擇EEPROM而不是FRAM,其主要原因是成本(FRAM較為昂貴)、質量水平和供貨情況。設計工程師常常使用成本較低的串行EEPROM,除非耐久性或速度是強制性的系統(tǒng)要求。

            DRAM和SRAM都是易失性存儲器,盡管這兩種類型的存儲器都可以用作程序存儲器和數(shù)據(jù)存儲器,但SRAM主要用于數(shù)據(jù)存儲器。DRAM與SRAM之間的主要差別是數(shù)據(jù)存儲的壽命。只要不斷電,SRAM就能保持其數(shù)據(jù),但DRAM只有極短的數(shù)據(jù)壽命,通常為4毫秒左右。

            與SRAM相比,DRAM似乎是毫無用處的,但位于微控制器內部的DRAM控制器使DRAM的性能表現(xiàn)與SRAM一樣。DRAM控制器在數(shù)據(jù)消失之前周期性地刷新所存儲的數(shù)據(jù),所以存儲器的內容可以根據(jù)需要保持長時間。

              由于比特成本低,DRAM通常用作程序存儲器,所以有龐大存儲要求的應用可以從DRAM獲益。它的最大缺點是速度慢,但計算機系統(tǒng)使用高速SRAM作為高速緩沖存儲器來彌補DRAM的速度缺陷。

            表3總結了本文提到的各類存儲器的特性。需要注意的是,不同類型的存儲器的適合情況不同,每種類型都有自己的優(yōu)點和弱點,所以逐項比較并非總能得到有意義的結果。

          總結了本文提到的各類存儲器的特性

            本文小結

            盡管我們幾乎可以使用任何類型的存儲器來滿足嵌入式系統(tǒng)的要求,但終端應用和總成本要求通常是影響我們做出決策的主要因素。有時,把幾個類型的存儲器結合起來使用能更好地滿足應用系統(tǒng)的要求。例如,一些PDA設計同時使用易失性存儲器和非易失性存儲器作為程序存儲器和數(shù)據(jù)存儲器。把永久的程序保存在非易失性ROM中,而把由用戶下載的程序和數(shù)據(jù)存儲在有電池支持的易失性DRAM中。不管選擇哪種存儲器類型,在確定將被用于最終應用系統(tǒng)的存儲器之前,設計工程師必須仔細折中考慮各種設計因素。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁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); })();