內存子系統不需要顯著的學習曲線。對于新手工程師來說,當今嵌入式系統和隨附的內存子系統的復雜性有時會產生學習曲線。內存包括作為臨時(易失性)或持久(非易失性)存儲“容器”運行的硬件組件。這些帶電電路的神奇塊存儲信息狀態,用于指令(二進制代碼)并將數據組織為可尋址字節(8位),雙字節(16位)和四字節(32位)。
結合控制內存子系統等資源的嵌入式操作系統(OS),軟件指示處理器(CPU)沿著地址線發送突發電力,該地址線標識轉換在存儲數據的芯片中的位置。該脈沖可以打開或關閉連接到數據線的晶體管。當電脈沖到達地址線時,脈沖流過閉合的晶體管,并為存儲相當于1(導通)位的電容器充電,相反,未充電的電容器表示0(關斷)位。
1. 信息的記憶位數組(部分顯示)。
易失性存儲器用作隨機存取存儲器 (RAM)。只有在通電時才能保持其內容物。為了補充RAM的使用,在早期的嵌入式系統中,只讀存儲器(ROM)通常用于運行操作系統和應用程序。可以以字節(8 位)信息單位訪問任一內存源。
非易失性存儲器可保留數據。對于傳統 PC、Mac 和服務器,持久內存存儲已用于存儲更大的可尋址字節容器— 通常基于底層分組(稱為扇區)進行組織。物理尺寸和低功耗要求通常不是固定磁盤或固態設備 (SSD) 等存儲系統的優先事項。對于尺寸和低功耗至關重要的小型嵌入式系統,情況并非如此。此持久性存儲介質是可移動的(SD 或 CF 卡,或 USB 閃存驅動器),并且無論是否存在電源,都應保留其內容。512 和 4192 KB 的塊是這些小型設備的常用大小。鑒于許多嵌入式系統外形小巧,設備內存要求和物理空間限制通常決定了可以使用的內存類型。
易失性存儲器基礎知識
易失性存儲器可用于讀取CPU執行的指令,從而導致執行某些操作,有時將數據寫回內存。當今功能強大的嵌入式 CPU 可以處理和訪問 32 位(甚至 64 位)值的信息。8位計算的日子早已一去不復返了。
RAM由一個或多個芯片組成,可以與CPU和I / O端口一起駐留在相同的封裝基板中,稱為片上系統(SoC),這在可用電路板空間有限的小型設備(如無人機,家用傳感器等)中很常見。
非易失性存儲器基礎知識
閃存最初被稱為閃存RAM,正在成為首選的永久存儲介質,取代了旋轉磁盤。增岡不二雄博士于1984年在東芝工作時發明了閃存。他的同事有泉正治先生想出了閃光燈這個名字,因為從細胞中擦除數據的過程讓他想起了相機閃光燈。
閃存是一種非易失性存儲器,經過電編程,可長期存儲。最初的電可擦除可編程只讀存儲器(EEPROM)器件由列和行的網格組成,每個交叉點都有晶體管。一層薄薄的氧化物將每個晶體管與其他晶體管分開。如果一個晶體管(浮動柵極)與另一個晶體管(控制柵極)連接,則電池的值為1。如果此鏈接斷開,則該值變為 0。為了將電池組的值更改為0,將發生一個稱為福勒 - 諾德海姆隧道的過程,該過程會改變電池的電荷水平。當電源斷開時,電池應保留其最后設置(編程或擦除)。
認為閃存僅用于消費者移動設備(如相機和智能手機)的看法是不正確的。在外形尺寸受限且需要永久數據存儲的任何系統中,閃存經常使用。閃存要么是駐留的(焊接到電路板上),要么是非駐留的(通過行業標準端口(如SD和USB)的可移動設備)。閃存的美妙之處在于,沒有可能對可靠性產生負面影響的活動部件,但與任何技術一樣,也有優點和缺點,如表所示。
閃存的好壞。
市面上有兩種基本類型的閃存 — NOR 和 NAND。NOR最初設計用于取代只讀存儲器、三重定位器和易失性存儲器。它有一套完整的地址行,允許讀取單個字節。事實上,讀取通常與DRAM一樣快,允許程序直接從NOR存儲器運行XIP(原位讀取)。但是,擦除非常慢,只要不經常執行擦除操作,就不會出現問題。NOR 最初用于可移動的緊湊型閃存 (CF) 卡,是存儲操作系統映像、系統引導加載程序和系統配置信息的不錯選擇。
與NOR相比,NAND的開發旨在實現更高的容量,更小的占地面積和更低的成本。但是,它僅限于串行接口。因此,單個字節不能直接訪問;讀取、寫入和擦除必須以塊(或塊)為單位執行。該技術不適合替代ROM,但非常適合作為硬盤驅動器的替代品。NAND已成為可移動和常駐介質的標準閃存技術,因此,它適用于需要低成本、高密度和快速擦除的應用。
請注意塊和頁面之間的區別。每個塊由許多頁面組成,其中頁面大小通常為小塊(512 字節)或大塊(2048、4096 字節等)。塊大小很重要,因為如果記錄大小是閃存介質上使用的基礎塊大小的偶數部分,則通常會獲得最佳結果。對于所有NAND,數據以頁面形式寫入,但頁面必須已被刪除(到所有1),并且只能擦除塊。
2. 頁面和塊。
如果我們沒有提到記憶單元是如何組織以存儲信息位的,那么關于NAND的討論將是不完整的。單級單元 (SLC) 為每個單元存儲一位信息。隨著存儲容量的增加,多級單元(MLC)和三級單元(TLC)已被開發出來,以為每個單元存儲多個位。但這種增加的容量有一些缺點。MLC的寫入性能通常約為SLC的三分之一到一半。其復雜性的增加也會產生更多的位錯誤,需要更復雜的糾錯碼(EC)來防止常見的數據錯誤情況。與SLC和MLC相比,TLC具有更慢的傳輸速度,更高的錯誤率,需要更大的ECC,并且耐用性更低。當塊寫入最少的次數時,耐久性更好。
典型的NAND需要一個控制器來處理主機和閃存之間的命令和數據移動。控制器提供了執行基本操作(如塊讀取、寫入和擦除)的機制。許多設計都包含一個分立式控制器,該控制器僅提供這些功能,并將其他閃存管理活動(例如更換損壞的模塊并確保均勻磨損)留給驅動軟件。一些芯片設計人員發現,通過將帶有NAND閃存的內置控制器包含在稱為托管NAND的同一物理封裝中,可以提高效率。這些復雜的控制器以昂貴的芯片成本卸載了一些計算密集型軟件管理。
3. 納米閃存與托管納米
這有效地使器件能夠像典型的塊器件一樣工作,為主機文件系統提供更簡單的接口。由于托管 NAND 的價格可與 NAND 本身的價格相媲美,因此嵌入式主板將常駐管理 NAND 作為嵌入式多媒體存儲卡 (eMMC) 而不是閃存和控制器也就不足為奇了。
雖然它代表了馴服NAND特性的巨大飛躍,但eMMC并不是一項完美的技術。在對 eMMC 4.3 部件進行了一系列性能基準測試后,Datalight 的工程團隊觀察到某些部件的性能不佳,尤其是在隨機讀取時。對于一個特定的 eMMC 部件,對大于 16 MB 的文件執行的隨機 I/O 會減慢到 200 字節/秒的傳輸速率,遠低于順序 I/O 常見的數兆字節速率。
最終,適合您的系統設計的最佳閃存歸結為對其用例最重要的是什么。沒有一個閃存部件能夠以最低的價格提供高質量、大存儲容量、非凡的耐用性和“殺手級”性能。總會有一些權衡,應該為特定應用選擇正確的內存部分。
界面
駐留閃存在閃存、數據和地址總線之間具有直接接口。為了避免系統設計人員和閃存供應商之間的混亂,通用閃存接口(CFI)定義了大多數供應商支持并得到聯合電子設備工程委員會(JEDEC)非易失性存儲器小組委員會認可的開放接口標準。因此,可移動閃存符合物理、電氣和命令接口標準。這有效地允許各種不同的內存供應商選擇類似的部件。
這些標準已經遷移到小型嵌入式系統。例如,第一個 EIDE/ATA 連接是串行 AT 附件 (SATA) 接口標準的替代品,該標準的最大吞吐量為 133 MB/s。另一個流行的接口是小型計算機系統接口 (SCSI),由于使用 16 條并行線,速度高達 40 MB/s,因此在更短的時間內移動的數據比 EIDE 多。為了獲得更快的結果,Ultra-640 SCSI 可以以 640 MB/s 的速度傳輸數據。
令人驚訝的是,對于小型嵌入式電路板數據表,您可能必須四處尋找持久性存儲是否駐留在電路板上。例如,樹莓派3具有可用于可移動介質的微型SD和USB端口。
軟件數據存儲堆棧
對于非易失性、持久性閃存,需要系統軟件來驅動其運行。該系統軟件提供了軟件服務的邏輯分離,使應用程序能夠將文件系統請求作為結構化數據元素發出,這些請求又被轉換為塊請求,讓人聯想到傳統的基于塊的硬盤驅動器中存在的請求。
4. 軟件數據存儲堆棧。
Datalight的Reliance Nitro嵌入式文件系統實際上是一組相關的軟件模塊,每個模塊都有明確定義的軟件接口(稱為應用程序編程接口或API),可以保護來自應用程序的請求并確保可靠性,即使斷電也是如此。Reliance Nitro的可配置事務模型在數據實際寫入閃存時提供了微調的靈活性。
信實硝基是一種電源故障安全文件系統,可以插入到各種工業嵌入式實時操作系統中,如VxWorks,Linux,安卓和Windows嵌入式。對于物聯網設備,可以使用占用小內存的物聯網文件系統,即信實邊緣,該系統可與FreeRTOS和MQX等小型嵌入式操作系統配合使用。
塊設備驅動程序從文件系統接收塊請求,并用作閃存轉換層 (FTL)。根據嵌入式系統上使用的閃存和接口,FTL 執行最初由文件系統執行的請求。例如,數據照明的閃存FX太拉與NAND或NOR存儲器配合使用,并向系統的閃存控制器發出命令。
閃存驅動程序不僅負責為基本閃存操作(讀取、寫入和擦除)提供支持,還負責優化內存的性能。由于閃存的使用壽命有限,連續重寫同一塊將導致零件過早磨損。為了防止這種情況,發明了磨損均衡算法,將磨損均勻地分布在閃光燈上。事實上,設計不佳的文件系統和塊驅動程序軟件基本上會破壞良好的閃存。例如,標準 FAT 文件系統在介質的開頭不斷寫入和重寫文件分配表 (FAT)。如果塊沒有不斷重新定位,對這些塊的訪問可能會很快磨損閃存。
由于單個塊會隨著時間的推移而磨損,因此壞塊管理(BBM)軟件是塊驅動程序的另一個重要部分。BBM 驗證寫入數據,當檢測到寫入失敗時,壞塊將重新映射到專門為壞塊分配保留的備用塊。
您可能會認為,使用托管NAND設備,您不需要閃存塊驅動程序。數據照明的閃存與受管的 NAND 設備配合使用。由于隨機磁盤 I/O 非常重要,特別是對于 Android 嵌入式系統,FlashFXe 將隨機 I/O 請求線性化,其方式是將實際的隨機讀取和寫入調度為順序 I/O 塊。因此,隨機 I/O 性能會顯著提高。通過減少正在執行的寫入次數,可以在某些用例中提高閃存耐久性。
數據生命周期
總而言之,重要信息根據系統的狀態駐留在內存中。首先是啟動時啟動。從非易失性閃存中,由整個系統(RTOS、驅動程序、應用程序等)的靜態副本組成的啟動映像被加載到 RAM 中。易失性存儲器被刷新,閃存中的非易失性數據再次可用。
接下來是正常操作。系統運行后,必須執行日常任務。對于基于傳感器的 IoT 設備,這些應用使用本地閃存執行工作并依賴于文件系統中的持久數據存儲(和檢索)。這通常包括打開文件、讀取和寫入數據以及選擇性地執行文件夾和其他文件系統操作。
但是存儲在設備上的數據很可能最終會到達企業的其他地方 - 私人或公共。趨勢是更多的數據收集、處理和分析要執行,并在本地保存在嵌入式設備上。平臺正在不斷發展,為這些連接的設備提供安全、設備管理、數據分析、軟件更新和連接服務。
最后一步是關閉和系統恢復:當系統需要關閉電源時,有序關閉很重要。如果應用了電源來完成對閃存的所有剩余 I/O 請求,則應有序地關閉文件系統,并將數據信息正確保存到介質中。
對軟件數據系統堆棧魯棒性的真正考驗是在發生意外斷電時重建文件結構所需的時間,這使得有序關機變得不可能。基于日志的文件系統(如 ext4)可能需要一些時間來重放日志以重建文件系統。
-
處理器
+關注
關注
68文章
19885瀏覽量
235086 -
嵌入式
+關注
關注
5150文章
19659瀏覽量
317396 -
存儲器
+關注
關注
38文章
7649瀏覽量
167332
發布評論請先 登錄
eUPS0505斷電續航模塊,為嵌入式系統保駕護航

嵌入式系統存儲的軟件優化策略
【入門必看】從菜鳥到大牛,嵌入式系統完整學習路線!看這篇就夠了!

MPU在嵌入式系統中的應用
EMMC存儲器故障檢測及解決方案
EEPROM在嵌入式系統中的應用 EEPROM數據保護技術解析
PROM器件在嵌入式系統中的應用
什么是ROM存儲器的定義
使用 TMP1826 嵌入式 EEPROM 替換用于模塊識別的外部存儲器

評論