當今嵌入式系統(tǒng)的復雜性和伴隨的內(nèi)存子系統(tǒng)有時可能會給新手工程師帶來學習曲線。內(nèi)存包括作為臨時(易失性)或持久性(非易失性)存儲“容器”運行的硬件組件。這些帶電電路的神奇金塊存儲信息狀態(tài)并用于指令(二進制代碼)并將數(shù)據(jù)組織為可尋址字節(jié)(8 位)、雙字節(jié)(16 位)和四字節(jié)(32 位)。
與控制內(nèi)存子系統(tǒng)等資源的嵌入式操作系統(tǒng) (OS) 相結(jié)合,軟件會指示處理器 (CPU) 沿地址線發(fā)送電流脈沖,以識別芯片中存儲數(shù)據(jù)的轉(zhuǎn)換位置。該脈沖可以打開或關閉連接到數(shù)據(jù)線的晶體管。當電脈沖到達地址線時,脈沖流過一個閉合的晶體管并為存儲相當于 1(開啟)位的電容器充電,相反,未充電的電容器代表 0(關閉)位。

1. 存儲信息位數(shù)組(部分顯示)。
易失性存儲器用作隨機存取存儲器(RAM)。其內(nèi)容僅在通電時保持不變。為了補充 RAM 的使用,在早期的嵌入式系統(tǒng)中,通常使用只讀存儲器 (ROM) 來運行操作系統(tǒng)和應用程序??梢砸宰止?jié)(8 位)信息為單位訪問任一內(nèi)存源。
非易失性存儲器保留數(shù)據(jù)。對于傳統(tǒng)的 PC、Mac 和服務器,持久內(nèi)存存儲已用于存儲更大的可尋址字節(jié)容器——通?;诘讓臃纸M(稱為扇區(qū))進行組織。物理尺寸和低功耗要求通常不是固定磁盤或固態(tài)設備 (SSD) 等存儲系統(tǒng)的優(yōu)先事項。對于尺寸和低功耗至關重要的小型嵌入式系統(tǒng),情況并非如此。這種持久性存儲介質(zhì)要么是可移動的(SD 或 CF 卡,或 USB 閃存驅(qū)動器),要么是不可移動的,無論是否有電源,都應保留其內(nèi)容。512 和 4192 KB 的塊是這些小型設備的常用大小。鑒于許多嵌入式系統(tǒng)的小尺寸,
易失性存儲器基礎知識
易失性內(nèi)存可用于讀取 CPU 執(zhí)行的指令,從而導致執(zhí)行某些操作時有時會將數(shù)據(jù)寫回內(nèi)存。當今強大的嵌入式 CPU 可以處理和訪問 32 位(甚至 64 位)值的信息。8 位計算的日子已經(jīng)一去不復返了。
RAM 被組織在一個或多個芯片中,并且可以與 CPU 和 I/O 端口一起駐留在同一封裝基板中,稱為片上系統(tǒng) (SoC),這在小型設備(如無人機、家庭傳感器)中很常見等),可用的電路板空間有限。
非易失性存儲器基礎知識
最初稱為閃存 RAM,閃存正在成為首選的永久存儲介質(zhì),取代旋轉(zhuǎn)磁盤。Fujio Masuoka 博士于 1984 年在東芝工作時發(fā)明了閃存。他的同事 Shoji Ariizumi 先生想出了閃光燈這個名字,因為從細胞中擦除數(shù)據(jù)的過程讓他想起了相機閃光燈。
閃存是一種非易失性存儲器,經(jīng)過電氣編程以實現(xiàn)長期存儲。最初的電可擦可編程只讀存儲器 (EEPROM) 設備由列和行的網(wǎng)格組成,每個交叉點都有晶體管。一層薄薄的氧化物將每個晶體管與其他晶體管隔開。如果一個晶體管(浮動柵極)與另一個(控制柵極)鏈接,則單元的值為 1。如果此鏈接斷開,則該值變?yōu)?0。要將單元的值更改為 0,需要一個過程發(fā)生稱為 Fowler-Nordheim 的隧道效應,它改變了電池的電荷水平。斷電時,單元應保持其最后設置(如已編程或已擦除)。
認為閃存僅適用于相機和智能手機等消費類移動設備的看法是不正確的。在任何外形尺寸受限且需要永久數(shù)據(jù)存儲的系統(tǒng)中,經(jīng)常使用閃存。閃存既可以是常駐的(焊接到板上),也可以是非常駐的(通過 SD 和 USB 等行業(yè)標準端口的可移動設備)。閃存的美妙之處在于沒有可能對可靠性產(chǎn)生負面影響的移動部件,但與任何技術一樣,也有優(yōu)缺點,如表所示。

市面上有兩種基本類型的閃存——NOR 和 NAND。NOR 最初旨在取代 ROM、EPROM 和 EEPROM 非易失性存儲器。它有一套完整的地址線,允許讀取單個字節(jié)。事實上,讀取速度通常與 DRAM 一樣快,允許程序直接從 NOR 內(nèi)存運行 XIP(就地執(zhí)行)。然而,擦除非常慢并且只要不經(jīng)常執(zhí)行擦除操作就不是問題。NOR 最初用于可移動緊湊型閃存 (CF) 卡,是存儲操作系統(tǒng)映像、系統(tǒng)引導加載程序和系統(tǒng)配置信息的不錯選擇。
與 NOR 相比,NAND 的開發(fā)旨在實現(xiàn)更高的容量、更小的占地面積和更低的成本。但是,它僅限于串行接口。因此,不能直接訪問單個字節(jié);讀取、寫入和擦除必須以塊(或塊)的形式執(zhí)行。該技術不適合替代 ROM,但非常適合替代硬盤驅(qū)動器。NAND 已成為可移動和常駐介質(zhì)的標準閃存技術,因此,它適用于需要低成本、高密度和快速擦除的應用。
注意塊和頁面之間的區(qū)別。每個塊由多個頁面組成,其中頁面大小通常是小塊(512 字節(jié))或大塊(2048、4096 字節(jié)等)。塊大小很重要,因為如果記錄大小是閃存介質(zhì)上使用的底層塊大小的偶數(shù)部分,您通常會獲得最佳結(jié)果。對于所有 NAND,數(shù)據(jù)以頁的形式寫入,但頁必須已經(jīng)被擦除(全為 1),并且只能擦除塊。

2. 頁面和塊。
如果我們不提及存儲單元是如何組織存儲信息位的,那么關于 NAND 的討論就不會完整。單級單元 (SLC) 每個單元存儲一位信息。隨著存儲容量的增加,已開發(fā)出多級單元 (MLC) 和三級單元 (TLC) 以在每個單元中存儲多個位。但是這種增加的容量有一些缺點。MLC 的寫入性能通常約為 SLC 的三分之一到二分之一。其增加的復雜性也會產(chǎn)生更多的位錯誤,需要更復雜的糾錯碼 (ECC) 來防止常見的數(shù)據(jù)錯誤情況。TLC 比其 SLC 和 MLC 同類產(chǎn)品具有更慢的傳輸速度、更高的錯誤率,需要更大的 ECC 以及更低的耐用性。當塊被寫入最少次數(shù)時,耐久性更好。
典型的 NAND 需要一個控制器來處理主機和閃存之間的命令和數(shù)據(jù)移動??刂破魈峁┝藞?zhí)行塊讀取、寫入和擦除等基本操作的機制。許多設計包括一個僅提供這些功能的分立控制器,而將其他閃存管理活動(例如更換壞塊并確保均勻磨損)留給驅(qū)動程序軟件。一些芯片設計人員發(fā)現(xiàn),可以通過在稱為托管 NAND 的同一物理封裝中包含帶有 NAND 閃存的內(nèi)置控制器來提高效率。這些復雜的控制器以較高的芯片成本為代價,卸載了一些計算密集型軟件管理,如圖 3 所示。

3. NAND 閃存與托管 NAND
這有效地使該部件能夠像典型的塊設備一樣運行,具有更簡單的主機文件系統(tǒng)接口。由于托管 NAND 的價格與 NAND 本身的價格不相上下,難怪嵌入式主板將常駐托管 NAND 作為嵌入式多媒體存儲卡 ( eMMC ) 而不是閃存和控制器。
盡管它代表了在馴服 NAND 特性方面的巨大飛躍,但 eMMC 并不是一項完美的技術。在對 eMMC 4.3 部件運行一系列性能基準測試后,Datalight 的工程團隊發(fā)現(xiàn)某些部件的性能表現(xiàn)不佳,尤其是隨機讀取。對于一個特定的 eMMC 部件,在大于 16 MB 的文件上執(zhí)行的隨機 I/O 會減慢到 200 字節(jié)/秒的傳輸速率——比順序 I/O 常見的數(shù)兆字節(jié)速率要低很多。
歸根結(jié)底,最適合您的系統(tǒng)設計的閃存歸結(jié)為對其用例最重要的部分。沒有一個閃存部件能以最低的價格提供高質(zhì)量、大存儲容量、非凡的耐用性和“殺手級”性能。總會有權(quán)衡,應為特定應用選擇正確的內(nèi)存部分。
界面
常駐閃存在閃存、數(shù)據(jù)和地址總線之間具有直接接口。為了避免系統(tǒng)設計人員和閃存供應商之間出現(xiàn)混亂,通用閃存接口 (CFI) 定義了一個開放接口標準,該標準得到大多數(shù)供應商的支持,并得到聯(lián)合電子設備工程委員會 (JEDEC) 的非易失性存儲器小組委員會的認可。因此,可移動閃存符合物理、電氣和命令接口標準。這有效地允許各種不同的存儲器供應商選擇相似的部件。
這些標準已遷移到小型嵌入式系統(tǒng)。例如,第一個 EIDE/ATA 連接替代了最大吞吐量為 133 Mbytes/s 的串行 AT 附件 (SATA) 接口標準。另一個流行的接口是小型計算機系統(tǒng)接口 (SCSI),由于使用 16 條并行線路,速度高達 40 Mbytes/s,它可以在比 EIDE 更短的時間內(nèi)移動更多數(shù)據(jù)。為了獲得更快的結(jié)果,Ultra-640 SCSI 可以以 640 Mbytes/s 的速度傳輸數(shù)據(jù)。
令人驚訝的是,對于小型嵌入式板數(shù)據(jù)表,您可能不得不四處尋找,以確定持久性存儲是否駐留在板上。例如,Raspberry Pi 3 具有可用于可移動媒體的 microSD 和 USB 端口。
軟件數(shù)據(jù)存儲棧
對于非易失性持久閃存,需要系統(tǒng)軟件來驅(qū)動其運行。該系統(tǒng)軟件提供了軟件服務的邏輯分離,使應用程序能夠?qū)⑽募到y(tǒng)請求作為結(jié)構(gòu)化數(shù)據(jù)元素發(fā)出,這些數(shù)據(jù)元素又被轉(zhuǎn)換為塊請求,讓人想起傳統(tǒng)的基于塊的硬盤驅(qū)動器中存在的內(nèi)容。圖 4 將這種軟件數(shù)據(jù)存儲堆棧關系顯示為互連軟件組件的層次結(jié)構(gòu)。

4.軟件數(shù)據(jù)存儲棧。
將軟件數(shù)據(jù)存儲堆棧表示為組件的層次結(jié)構(gòu),可以讓文件系統(tǒng)和塊驅(qū)動程序取代有時作為嵌入式操作系統(tǒng)的一部分提供的那些。Datalight 的 Reliance Nitro 嵌入式文件系統(tǒng)實際上是一組相關的軟件模塊,每個軟件模塊都有定義明確的軟件接口(稱為應用程序編程接口或 API),用于服務來自應用程序的請求,即使斷電也能確??煽啃浴eliance Nitro 的可配置事務模型在數(shù)據(jù)實際寫入閃存時提供了微調(diào)的靈活性。
Reliance Nitro 是一種電源故障安全文件系統(tǒng),可插入各種工業(yè)嵌入式實時操作系統(tǒng),如 VxWorks、Linux、Android 和 Windows Embedded。對于物聯(lián)網(wǎng)設備,可以使用內(nèi)存占用少的物聯(lián)網(wǎng)文件系統(tǒng) Reliance Edge,該系統(tǒng)可與 FreeRTOS 和 MQX 等小型嵌入式操作系統(tǒng)配合使用。
塊設備驅(qū)動程序從文件系統(tǒng)獲取塊請求,并作為閃存轉(zhuǎn)換層 (FTL) 工作。根據(jù)嵌入式系統(tǒng)上使用的閃存和接口,F(xiàn)TL 執(zhí)行最初由文件系統(tǒng)執(zhí)行的請求。例如,Datalight 的 FlashFX Tera 與 NAND 或 NOR 內(nèi)存一起工作,并向系統(tǒng)的閃存控制器發(fā)出命令。
閃存驅(qū)動程序不僅負責為基本的閃存操作(讀、寫和擦除)提供支持,還負責優(yōu)化內(nèi)存的性能。由于閃存的壽命有限,連續(xù)重寫同一塊會導致部件過早磨損。為了防止這種情況,發(fā)明了磨損均衡算法,將磨損均勻地分布在閃存中。事實上,設計不佳的文件系統(tǒng)和塊驅(qū)動程序軟件可以從根本上破壞良好的閃存。例如,標準 FAT 文件系統(tǒng)不斷地在媒體的開頭寫入和重寫文件分配表 (FAT)。如果沒有不斷地重新定位塊,訪問這些塊可能會很快耗盡閃存。
由于單個塊確實會隨著時間的推移而磨損,因此壞塊管理 (BBM) 軟件是塊驅(qū)動程序的另一個重要部分。BBM 驗證寫入數(shù)據(jù),當檢測到寫入失敗時,將壞塊重新映射到專門為壞塊分配保留的備用塊。
您會認為使用托管 NAND 設備,您將不需要閃存塊驅(qū)動程序。Datalight 的 FlashFXe 適用于托管 NAND 設備。因為隨機磁盤 I/O 很重要,特別是對于 Android 嵌入式系統(tǒng),F(xiàn)lashFXe 以將實際隨機讀取和寫入調(diào)度為順序 I/O 塊的方式線性化隨機 I/O 請求。因此,隨機 I/O 性能可以顯著提高。通過減少正在執(zhí)行的寫入次數(shù),可以提高某些用例的閃存耐用性。
數(shù)據(jù)生命周期
總而言之,重要信息基于系統(tǒng)狀態(tài)駐留在內(nèi)存中。首先是啟動時啟動。從非易失性閃存中,將包含整個系統(tǒng)(RTOS、驅(qū)動程序、應用程序等)的靜態(tài)副本的引導映像加載到 RAM 中。易失性存儲器被刷新,閃存中的非易失性數(shù)據(jù)再次可用。
接下來是正常操作。系統(tǒng)運行后,必須執(zhí)行日常任務。對于基于傳感器的物聯(lián)網(wǎng)設備,應用程序使用本地閃存執(zhí)行工作并依賴文件系統(tǒng)中的持久數(shù)據(jù)存儲(和檢索)。這通常包括打開文件、讀取和寫入數(shù)據(jù)以及可選地執(zhí)行文件夾和其他文件系統(tǒng)操作。
但是存儲在設備上的數(shù)據(jù)很可能最終會在企業(yè)的其他地方——私人的或公共的。趨勢是在嵌入式設備上本地執(zhí)行和保存更多的數(shù)據(jù)收集、處理和分析。平臺正在不斷發(fā)展,以滿足為這些連接設備提供安全、設備管理、數(shù)據(jù)分析、軟件更新和連接服務的需求。
最后一步是關機和系統(tǒng)恢復:當系統(tǒng)需要關機時,有序關機很重要。如果有電源完成對閃存的所有剩余 I/O 請求,則文件系統(tǒng)應有序關閉,并將數(shù)據(jù)信息正確保存到介質(zhì)中。
對軟件數(shù)據(jù)系統(tǒng)堆棧健壯性的真正測試是在意外斷電的情況下重建文件結(jié)構(gòu)所需的時間,這使得有序關閉變得不可能?;谌罩镜奈募到y(tǒng),如 ext4,可能需要一些時間來重播日志以重建文件系統(tǒng)。
審核編輯:郭婷
電子發(fā)燒友App





評論