|
存儲(chǔ)器的類(lèi)型將決定整個(gè)嵌入式系統(tǒng)的操作和性能,因此存儲(chǔ)器的選擇是一個(gè)非常重要的決策。無(wú)論系統(tǒng)是采用電池供電還是由市電供電,應(yīng)用需求將決定存儲(chǔ)器的類(lèi)型(易失性或非易失性)以及使用目的(存儲(chǔ)代碼、數(shù)據(jù)或者兩者兼有)。另外,在選擇過(guò)程中,存儲(chǔ)器的尺寸和成本也是需要考慮的重要因素。對(duì)于較小的系統(tǒng),微控制器自帶的存儲(chǔ)器就有可能滿足系統(tǒng)要求,而較大的系統(tǒng)可能要求增加外部存儲(chǔ)器。為嵌入式系統(tǒng)選擇存儲(chǔ)器類(lèi)型時(shí),需要考慮一些設(shè)計(jì)參數(shù),包括微控制器的選擇、電壓范圍、電池壽命、讀寫(xiě)速度、存儲(chǔ)器尺寸、存儲(chǔ)器的特性、擦除/寫(xiě)入的耐久性以及系統(tǒng)總成本。 圖1列出了在嵌入式應(yīng)用系統(tǒng)中最常用的存儲(chǔ)器類(lèi)型。下面討論在選擇存儲(chǔ)器時(shí)應(yīng)遵循的基本原則。 選擇存儲(chǔ)器時(shí)應(yīng)遵循的基本原則 1.內(nèi)部存儲(chǔ)器與外部存儲(chǔ)器 一般情況下,當(dāng)確定了存儲(chǔ)程序代碼和數(shù)據(jù)所需要的存儲(chǔ)空間之后,設(shè)計(jì)工程師將決定是采用內(nèi)部存儲(chǔ)器還是外部存儲(chǔ)器。通常情況下,內(nèi)部存儲(chǔ)器的性價(jià)比最高但靈活性最低,因此設(shè)計(jì)工程師必須確定對(duì)存儲(chǔ)的需求將來(lái)是否會(huì)增長(zhǎng),以及是否有某種途徑可以升級(jí)到代碼空間更大的微控制器;诔杀究紤],人們通常選擇能滿足應(yīng)用要求的存儲(chǔ)器容量最小的微控制器,因此在預(yù)測(cè)代碼規(guī)模的時(shí)候要必須特別小心,因?yàn)榇a規(guī)模增大可能要求更換微控制器。 目前市場(chǎng)上存在各種規(guī)模的外部存儲(chǔ)器器件,我們很容易通過(guò)增加存儲(chǔ)器來(lái)適應(yīng)代碼規(guī)模的增加。有時(shí)這意味著以封裝尺寸相同但容量更大的存儲(chǔ)器替代現(xiàn)有的存儲(chǔ)器,或者在總線上增加存儲(chǔ)器。即使微控制器帶有內(nèi)部存儲(chǔ)器,也可以通過(guò)增加外部串行EEPROM或閃存來(lái)滿足系統(tǒng)對(duì)非易失性存儲(chǔ)器的需求。 2.引導(dǎo)存儲(chǔ)器 在較大的微控制器系統(tǒng)或基于處理器的系統(tǒng)中,設(shè)計(jì)工程師可以利用引導(dǎo)代碼進(jìn)行初始化。應(yīng)用本身通常決定了是否需要引導(dǎo)代碼,以及是否需要專(zhuān)門(mén)的引導(dǎo)存儲(chǔ)器。例如,如果沒(méi)有外部的尋址總線或串行引導(dǎo)接口,通常使用內(nèi)部存儲(chǔ)器,而不需要專(zhuān)門(mén)的引導(dǎo)器件。但在一些沒(méi)有內(nèi)部程序存儲(chǔ)器的系統(tǒng)中,初始化是操作代碼的一部分,因此所有代碼都將駐留在同一個(gè)外部程序存儲(chǔ)器中。某些微控制器既有內(nèi)部存儲(chǔ)器也有外部尋址總線,在這種情況下,引導(dǎo)代碼將駐留在內(nèi)部存儲(chǔ)器中,而操作代碼在外部存儲(chǔ)器中。這很可能是最安全的方法,因?yàn)楦淖儾僮鞔a時(shí)不會(huì)出現(xiàn)意外地修改引導(dǎo)代碼。在所有情況下,引導(dǎo)存儲(chǔ)器都必須是非易失性存儲(chǔ)器。 3.配置存儲(chǔ)器 對(duì)于現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)或片上系統(tǒng)(SoC),人們使用存儲(chǔ)器來(lái)存儲(chǔ)配置信息。這種存儲(chǔ)器必須是非易失性EPROM、EEPROM或閃存。大多數(shù)情況下,F(xiàn)PGA采用SPI接口,但一些較老的器件仍采用FPGA串行接口。串行EEPROM或閃存器件最為常用,EPROM用得較少。 4.程序存儲(chǔ)器 所有帶處理器的系統(tǒng)都采用程序存儲(chǔ)器,但設(shè)計(jì)工程師必須決定這個(gè)存儲(chǔ)器是位于處理器內(nèi)部還是外部。在做出了這個(gè)決策之后,設(shè)計(jì)工程師才能進(jìn)一步確定存儲(chǔ)器的容量和類(lèi)型。當(dāng)然有的時(shí)候,微控制器既有內(nèi)部程序存儲(chǔ)器也有外部尋址總線,此時(shí)設(shè)計(jì)工程師可以選擇使用它們當(dāng)中的任何一個(gè),或者兩者都使用。這就是為什么為某個(gè)應(yīng)用選擇最佳存儲(chǔ)器的問(wèn)題,常常由于微控制器的選擇變得復(fù)雜起來(lái),以及為什么改變存儲(chǔ)器的規(guī)模也將導(dǎo)致改變微控制器的選擇的原因。 如果微控制器既利用內(nèi)部存儲(chǔ)器也利用外部存儲(chǔ)器,則內(nèi)部存儲(chǔ)器通常被用來(lái)存儲(chǔ)不常改變的代碼,而外部存儲(chǔ)器用于存儲(chǔ)更新比較頻繁的代碼和數(shù)據(jù)。設(shè)計(jì)工程師也需要考慮存儲(chǔ)器是否將被在線重新編程或用新的可編程器件替代。對(duì)于需要重編程功能的應(yīng)用,人們通常選用帶有內(nèi)部閃存的微控制器,但帶有內(nèi)部OTP或ROM和外部閃存或EEPROM的微控制器也滿足這個(gè)要求。為降低成本,外部閃存可用來(lái)存儲(chǔ)代碼和數(shù)據(jù),但在存儲(chǔ)數(shù)據(jù)時(shí)必須小心避免意外修改代碼。 在大多數(shù)嵌入式系統(tǒng)中,人們利用閃存存儲(chǔ)程序以便在線升級(jí)固件。代碼穩(wěn)定的較老的應(yīng)用系統(tǒng)仍可以使用ROM和OTP存儲(chǔ)器,但由于閃存的通用性,越來(lái)越多的應(yīng)用系統(tǒng)正轉(zhuǎn)向閃存。表1給出了程序存儲(chǔ)器類(lèi)型的參數(shù)比較。 5.?dāng)?shù)據(jù)存儲(chǔ)器 與程序存儲(chǔ)器類(lèi)似,數(shù)據(jù)存儲(chǔ)器可以位于微控制器內(nèi)部,或者是外部器件,但這兩種情況存在一些差別。有時(shí)微控制器內(nèi)部包含SRAM(易失性)和EEPROM(非易失)兩種數(shù)據(jù)存儲(chǔ)器,但有時(shí)不包含內(nèi)部EEPROM,在這種情況下,當(dāng)需要存儲(chǔ)大量數(shù)據(jù)時(shí),設(shè)計(jì)工程師可以選擇外部的串行EEPROM或串行閃存器件。當(dāng)然,也可以使用并行EEPROM或閃存,但通常它們只被用作程序存儲(chǔ)器。 當(dāng)需要外部高速數(shù)據(jù)存儲(chǔ)器時(shí),通常選擇并行SRAM并使用外部串行EEPROM器件來(lái)滿足對(duì)非易失性存儲(chǔ)器的要求。一些設(shè)計(jì)還將閃存器件用作程序存儲(chǔ)器,但保留一個(gè)扇區(qū)作為數(shù)據(jù)存儲(chǔ)區(qū)。這種方法可以降低成本、空間并提供非易失性數(shù)據(jù)存儲(chǔ)器。 針對(duì)非易失性存儲(chǔ)器要求,串行EEPROM器件支持I2C、SPI或微線(Microwire)通訊總線,而串行閃存通常使用SPI總線。由于寫(xiě)入速度很快且?guī)в蠭2C和SPI串行接口,F(xiàn)RAM在一些系統(tǒng)中得到應(yīng)用。表2比較了各類(lèi)數(shù)據(jù)存儲(chǔ)器的優(yōu)缺點(diǎn)。 6.易失性和非易失性存儲(chǔ)器 存儲(chǔ)器可分成易失性存儲(chǔ)器或者非易失性存儲(chǔ)器,前者在斷電后將丟失數(shù)據(jù),而后者在斷電后仍可保持?jǐn)?shù)據(jù)。設(shè)計(jì)工程師有時(shí)將易失性存儲(chǔ)器與后備電池一起使用,使其表現(xiàn)猶如非易失性器件,但這可能比簡(jiǎn)單地使用非易失性存儲(chǔ)器更加昂貴。然而,對(duì)要求存儲(chǔ)器容量非常大的系統(tǒng)而言,帶有后備電池的DRAM可能是滿足設(shè)計(jì)要求且性價(jià)比很高的一種方法。 在有連續(xù)能量供給的系統(tǒng)中,易失性或非易失性存儲(chǔ)器都可以使用,但必須基于斷電的可能性做出最終決策。如果存儲(chǔ)器中的信息可以在電力恢復(fù)時(shí)從另一個(gè)信源中恢復(fù)出來(lái),則可以使用易失性存儲(chǔ)器。 |