當(dāng)今嵌入式系統(tǒng)的復(fù)雜性和伴隨的內(nèi)存子系統(tǒng)有時(shí)可能會(huì)給新手工程師帶來(lái)學(xué)習(xí)曲線。內(nèi)存包括作為臨時(shí)(易失性)或持久性(非易失性)存儲(chǔ)“容器”運(yùn)行的硬件組件。這些帶電電路的神奇金塊存儲(chǔ)信息狀態(tài)并用于指令(二進(jìn)制代碼)并將數(shù)據(jù)組織為可尋址字節(jié)(8 位)、雙字節(jié)(16 位)和四字節(jié)(32 位)。
與控制內(nèi)存子系統(tǒng)等資源的嵌入式操作系統(tǒng) (OS) 相結(jié)合,軟件會(huì)指示處理器 (CPU) 沿地址線發(fā)送電流脈沖,以識(shí)別芯片中存儲(chǔ)數(shù)據(jù)的轉(zhuǎn)換位置。該脈沖可以打開(kāi)或關(guān)閉連接到數(shù)據(jù)線的晶體管。當(dāng)電脈沖到達(dá)地址線時(shí),脈沖流過(guò)一個(gè)閉合的晶體管并為存儲(chǔ)相當(dāng)于 1(開(kāi)啟)位的電容器充電,相反,未充電的電容器代表 0(關(guān)閉)位。
1. 存儲(chǔ)信息位數(shù)組(部分顯示)。
易失性存儲(chǔ)器用作隨機(jī)存取存儲(chǔ)器(RAM)。其內(nèi)容僅在通電時(shí)保持不變。為了補(bǔ)充 RAM 的使用,在早期的嵌入式系統(tǒng)中,通常使用只讀存儲(chǔ)器 (ROM) 來(lái)運(yùn)行操作系統(tǒng)和應(yīng)用程序??梢砸宰止?jié)(8 位)信息為單位訪問(wèn)任一內(nèi)存源。
非易失性存儲(chǔ)器保留數(shù)據(jù)。對(duì)于傳統(tǒng)的 PC、Mac 和服務(wù)器,持久內(nèi)存存儲(chǔ)已用于存儲(chǔ)更大的可尋址字節(jié)容器——通常基于底層分組(稱為扇區(qū))進(jìn)行組織。物理尺寸和低功耗要求通常不是固定磁盤(pán)或固態(tài)設(shè)備 (SSD) 等存儲(chǔ)系統(tǒng)的優(yōu)先事項(xiàng)。對(duì)于尺寸和低功耗至關(guān)重要的小型嵌入式系統(tǒng),情況并非如此。這種持久性存儲(chǔ)介質(zhì)要么是可移動(dòng)的(SD 或 CF 卡,或 USB 閃存驅(qū)動(dòng)器),要么是不可移動(dòng)的,無(wú)論是否有電源,都應(yīng)保留其內(nèi)容。512 和 4192 KB 的塊是這些小型設(shè)備的常用大小。鑒于許多嵌入式系統(tǒng)的小尺寸,
易失性存儲(chǔ)器基礎(chǔ)知識(shí)
易失性內(nèi)存可用于讀取 CPU 執(zhí)行的指令,從而導(dǎo)致執(zhí)行某些操作時(shí)有時(shí)會(huì)將數(shù)據(jù)寫(xiě)回內(nèi)存。當(dāng)今強(qiáng)大的嵌入式 CPU 可以處理和訪問(wèn) 32 位(甚至 64 位)值的信息。8 位計(jì)算的日子已經(jīng)一去不復(fù)返了。
RAM 被組織在一個(gè)或多個(gè)芯片中,并且可以與 CPU 和 I/O 端口一起駐留在同一封裝基板中,稱為片上系統(tǒng) (SoC),這在小型設(shè)備(如無(wú)人機(jī)、家庭傳感器)中很常見(jiàn)等),可用的電路板空間有限。
非易失性存儲(chǔ)器基礎(chǔ)知識(shí)
最初稱為閃存 RAM,閃存正在成為首選的永久存儲(chǔ)介質(zhì),取代旋轉(zhuǎn)磁盤(pán)。Fujio Masuoka 博士于 1984 年在東芝工作時(shí)發(fā)明了閃存。他的同事 Shoji Ariizumi 先生想出了閃光燈這個(gè)名字,因?yàn)閺募?xì)胞中擦除數(shù)據(jù)的過(guò)程讓他想起了相機(jī)閃光燈。
閃存是一種非易失性存儲(chǔ)器,經(jīng)過(guò)電氣編程以實(shí)現(xiàn)長(zhǎng)期存儲(chǔ)。最初的電可擦可編程只讀存儲(chǔ)器 (EEPROM) 設(shè)備由列和行的網(wǎng)格組成,每個(gè)交叉點(diǎn)都有晶體管。一層薄薄的氧化物將每個(gè)晶體管與其他晶體管隔開(kāi)。如果一個(gè)晶體管(浮動(dòng)?xùn)艠O)與另一個(gè)(控制柵極)鏈接,則單元的值為 1。如果此鏈接斷開(kāi),則該值變?yōu)?0。要將單元的值更改為 0,需要一個(gè)過(guò)程發(fā)生稱為 Fowler-Nordheim 的隧道效應(yīng),它改變了電池的電荷水平。斷電時(shí),單元應(yīng)保持其最后設(shè)置(如已編程或已擦除)。
認(rèn)為閃存僅適用于相機(jī)和智能手機(jī)等消費(fèi)類移動(dòng)設(shè)備的看法是不正確的。在任何外形尺寸受限且需要永久數(shù)據(jù)存儲(chǔ)的系統(tǒng)中,經(jīng)常使用閃存。閃存既可以是常駐的(焊接到板上),也可以是非常駐的(通過(guò) SD 和 USB 等行業(yè)標(biāo)準(zhǔn)端口的可移動(dòng)設(shè)備)。閃存的美妙之處在于沒(méi)有可能對(duì)可靠性產(chǎn)生負(fù)面影響的移動(dòng)部件,但與任何技術(shù)一樣,也有優(yōu)缺點(diǎn),如表所示。
市面上有兩種基本類型的閃存——NOR 和 NAND。NOR 最初旨在取代 ROM、EPROM 和 EEPROM 非易失性存儲(chǔ)器。它有一套完整的地址線,允許讀取單個(gè)字節(jié)。事實(shí)上,讀取速度通常與 DRAM 一樣快,允許程序直接從 NOR 內(nèi)存運(yùn)行 XIP(就地執(zhí)行)。然而,擦除非常慢并且只要不經(jīng)常執(zhí)行擦除操作就不是問(wèn)題。NOR 最初用于可移動(dòng)緊湊型閃存 (CF) 卡,是存儲(chǔ)操作系統(tǒng)映像、系統(tǒng)引導(dǎo)加載程序和系統(tǒng)配置信息的不錯(cuò)選擇。
與 NOR 相比,NAND 的開(kāi)發(fā)旨在實(shí)現(xiàn)更高的容量、更小的占地面積和更低的成本。但是,它僅限于串行接口。因此,不能直接訪問(wèn)單個(gè)字節(jié);讀取、寫(xiě)入和擦除必須以塊(或塊)的形式執(zhí)行。該技術(shù)不適合替代 ROM,但非常適合替代硬盤(pán)驅(qū)動(dòng)器。NAND 已成為可移動(dòng)和常駐介質(zhì)的標(biāo)準(zhǔn)閃存技術(shù),因此,它適用于需要低成本、高密度和快速擦除的應(yīng)用。
注意塊和頁(yè)面之間的區(qū)別。每個(gè)塊由多個(gè)頁(yè)面組成,其中頁(yè)面大小通常是小塊(512 字節(jié))或大塊(2048、4096 字節(jié)等)。塊大小很重要,因?yàn)槿绻涗洿笮∈情W存介質(zhì)上使用的底層塊大小的偶數(shù)部分,您通常會(huì)獲得最佳結(jié)果。對(duì)于所有 NAND,數(shù)據(jù)以頁(yè)的形式寫(xiě)入,但頁(yè)必須已經(jīng)被擦除(全為 1),并且只能擦除塊。
2. 頁(yè)面和塊。
如果我們不提及存儲(chǔ)單元是如何組織存儲(chǔ)信息位的,那么關(guān)于 NAND 的討論就不會(huì)完整。單級(jí)單元 (SLC) 每個(gè)單元存儲(chǔ)一位信息。隨著存儲(chǔ)容量的增加,已開(kāi)發(fā)出多級(jí)單元 (MLC) 和三級(jí)單元 (TLC) 以在每個(gè)單元中存儲(chǔ)多個(gè)位。但是這種增加的容量有一些缺點(diǎn)。MLC 的寫(xiě)入性能通常約為 SLC 的三分之一到二分之一。其增加的復(fù)雜性也會(huì)產(chǎn)生更多的位錯(cuò)誤,需要更復(fù)雜的糾錯(cuò)碼 (ECC) 來(lái)防止常見(jiàn)的數(shù)據(jù)錯(cuò)誤情況。TLC 比其 SLC 和 MLC 同類產(chǎn)品具有更慢的傳輸速度、更高的錯(cuò)誤率,需要更大的 ECC 以及更低的耐用性。當(dāng)塊被寫(xiě)入最少次數(shù)時(shí),耐久性更好。
典型的 NAND 需要一個(gè)控制器來(lái)處理主機(jī)和閃存之間的命令和數(shù)據(jù)移動(dòng)??刂破魈峁┝藞?zhí)行塊讀取、寫(xiě)入和擦除等基本操作的機(jī)制。許多設(shè)計(jì)包括一個(gè)僅提供這些功能的分立控制器,而將其他閃存管理活動(dòng)(例如更換壞塊并確保均勻磨損)留給驅(qū)動(dòng)程序軟件。一些芯片設(shè)計(jì)人員發(fā)現(xiàn),可以通過(guò)在稱為托管 NAND 的同一物理封裝中包含帶有 NAND 閃存的內(nèi)置控制器來(lái)提高效率。這些復(fù)雜的控制器以較高的芯片成本為代價(jià),卸載了一些計(jì)算密集型軟件管理,如圖 3 所示。
3. NAND 閃存與托管 NAND
這有效地使該部件能夠像典型的塊設(shè)備一樣運(yùn)行,具有更簡(jiǎn)單的主機(jī)文件系統(tǒng)接口。由于托管 NAND 的價(jià)格與 NAND 本身的價(jià)格不相上下,難怪嵌入式主板將常駐托管 NAND 作為嵌入式多媒體存儲(chǔ)卡 ( eMMC ) 而不是閃存和控制器。
盡管它代表了在馴服 NAND 特性方面的巨大飛躍,但 eMMC 并不是一項(xiàng)完美的技術(shù)。在對(duì) eMMC 4.3 部件運(yùn)行一系列性能基準(zhǔn)測(cè)試后,Datalight 的工程團(tuán)隊(duì)發(fā)現(xiàn)某些部件的性能表現(xiàn)不佳,尤其是隨機(jī)讀取。對(duì)于一個(gè)特定的 eMMC 部件,在大于 16 MB 的文件上執(zhí)行的隨機(jī) I/O 會(huì)減慢到 200 字節(jié)/秒的傳輸速率——比順序 I/O 常見(jiàn)的數(shù)兆字節(jié)速率要低很多。
歸根結(jié)底,最適合您的系統(tǒng)設(shè)計(jì)的閃存歸結(jié)為對(duì)其用例最重要的部分。沒(méi)有一個(gè)閃存部件能以最低的價(jià)格提供高質(zhì)量、大存儲(chǔ)容量、非凡的耐用性和“殺手級(jí)”性能??倳?huì)有權(quán)衡,應(yīng)為特定應(yīng)用選擇正確的內(nèi)存部分。
界面
常駐閃存在閃存、數(shù)據(jù)和地址總線之間具有直接接口。為了避免系統(tǒng)設(shè)計(jì)人員和閃存供應(yīng)商之間出現(xiàn)混亂,通用閃存接口 (CFI) 定義了一個(gè)開(kāi)放接口標(biāo)準(zhǔn),該標(biāo)準(zhǔn)得到大多數(shù)供應(yīng)商的支持,并得到聯(lián)合電子設(shè)備工程委員會(huì) (JEDEC) 的非易失性存儲(chǔ)器小組委員會(huì)的認(rèn)可。因此,可移動(dòng)閃存符合物理、電氣和命令接口標(biāo)準(zhǔn)。這有效地允許各種不同的存儲(chǔ)器供應(yīng)商選擇相似的部件。
這些標(biāo)準(zhǔn)已遷移到小型嵌入式系統(tǒng)。例如,第一個(gè) EIDE/ATA 連接替代了最大吞吐量為 133 Mbytes/s 的串行 AT 附件 (SATA) 接口標(biāo)準(zhǔn)。另一個(gè)流行的接口是小型計(jì)算機(jī)系統(tǒng)接口 (SCSI),由于使用 16 條并行線路,速度高達(dá) 40 Mbytes/s,它可以在比 EIDE 更短的時(shí)間內(nèi)移動(dòng)更多數(shù)據(jù)。為了獲得更快的結(jié)果,Ultra-640 SCSI 可以以 640 Mbytes/s 的速度傳輸數(shù)據(jù)。
令人驚訝的是,對(duì)于小型嵌入式板數(shù)據(jù)表,您可能不得不四處尋找,以確定持久性存儲(chǔ)是否駐留在板上。例如,Raspberry Pi 3 具有可用于可移動(dòng)媒體的 microSD 和 USB 端口。
軟件數(shù)據(jù)存儲(chǔ)棧
對(duì)于非易失性持久閃存,需要系統(tǒng)軟件來(lái)驅(qū)動(dòng)其運(yùn)行。該系統(tǒng)軟件提供了軟件服務(wù)的邏輯分離,使應(yīng)用程序能夠?qū)⑽募到y(tǒng)請(qǐng)求作為結(jié)構(gòu)化數(shù)據(jù)元素發(fā)出,這些數(shù)據(jù)元素又被轉(zhuǎn)換為塊請(qǐng)求,讓人想起傳統(tǒng)的基于塊的硬盤(pán)驅(qū)動(dòng)器中存在的內(nèi)容。圖 4 將這種軟件數(shù)據(jù)存儲(chǔ)堆棧關(guān)系顯示為互連軟件組件的層次結(jié)構(gòu)。
4.軟件數(shù)據(jù)存儲(chǔ)棧。
將軟件數(shù)據(jù)存儲(chǔ)堆棧表示為組件的層次結(jié)構(gòu),可以讓文件系統(tǒng)和塊驅(qū)動(dòng)程序取代有時(shí)作為嵌入式操作系統(tǒng)的一部分提供的那些。Datalight 的 Reliance Nitro 嵌入式文件系統(tǒng)實(shí)際上是一組相關(guān)的軟件模塊,每個(gè)軟件模塊都有定義明確的軟件接口(稱為應(yīng)用程序編程接口或 API),用于服務(wù)來(lái)自應(yīng)用程序的請(qǐng)求,即使斷電也能確??煽啃?。Reliance Nitro 的可配置事務(wù)模型在數(shù)據(jù)實(shí)際寫(xiě)入閃存時(shí)提供了微調(diào)的靈活性。
Reliance Nitro 是一種電源故障安全文件系統(tǒng),可插入各種工業(yè)嵌入式實(shí)時(shí)操作系統(tǒng),如 VxWorks、Linux、Android 和 Windows Embedded。對(duì)于物聯(lián)網(wǎng)設(shè)備,可以使用內(nèi)存占用少的物聯(lián)網(wǎng)文件系統(tǒng) Reliance Edge,該系統(tǒng)可與 FreeRTOS 和 MQX 等小型嵌入式操作系統(tǒng)配合使用。
塊設(shè)備驅(qū)動(dòng)程序從文件系統(tǒng)獲取塊請(qǐng)求,并作為閃存轉(zhuǎn)換層 (FTL) 工作。根據(jù)嵌入式系統(tǒng)上使用的閃存和接口,F(xiàn)TL 執(zhí)行最初由文件系統(tǒng)執(zhí)行的請(qǐng)求。例如,Datalight 的 FlashFX Tera 與 NAND 或 NOR 內(nèi)存一起工作,并向系統(tǒng)的閃存控制器發(fā)出命令。
閃存驅(qū)動(dòng)程序不僅負(fù)責(zé)為基本的閃存操作(讀、寫(xiě)和擦除)提供支持,還負(fù)責(zé)優(yōu)化內(nèi)存的性能。由于閃存的壽命有限,連續(xù)重寫(xiě)同一塊會(huì)導(dǎo)致部件過(guò)早磨損。為了防止這種情況,發(fā)明了磨損均衡算法,將磨損均勻地分布在閃存中。事實(shí)上,設(shè)計(jì)不佳的文件系統(tǒng)和塊驅(qū)動(dòng)程序軟件可以從根本上破壞良好的閃存。例如,標(biāo)準(zhǔn) FAT 文件系統(tǒng)不斷地在媒體的開(kāi)頭寫(xiě)入和重寫(xiě)文件分配表 (FAT)。如果沒(méi)有不斷地重新定位塊,訪問(wèn)這些塊可能會(huì)很快耗盡閃存。
由于單個(gè)塊確實(shí)會(huì)隨著時(shí)間的推移而磨損,因此壞塊管理 (BBM) 軟件是塊驅(qū)動(dòng)程序的另一個(gè)重要部分。BBM 驗(yàn)證寫(xiě)入數(shù)據(jù),當(dāng)檢測(cè)到寫(xiě)入失敗時(shí),將壞塊重新映射到專門(mén)為壞塊分配保留的備用塊。
您會(huì)認(rèn)為使用托管 NAND 設(shè)備,您將不需要閃存塊驅(qū)動(dòng)程序。Datalight 的 FlashFXe 適用于托管 NAND 設(shè)備。因?yàn)殡S機(jī)磁盤(pán) I/O 很重要,特別是對(duì)于 Android 嵌入式系統(tǒng),F(xiàn)lashFXe 以將實(shí)際隨機(jī)讀取和寫(xiě)入調(diào)度為順序 I/O 塊的方式線性化隨機(jī) I/O 請(qǐng)求。因此,隨機(jī) I/O 性能可以顯著提高。通過(guò)減少正在執(zhí)行的寫(xiě)入次數(shù),可以提高某些用例的閃存耐用性。
數(shù)據(jù)生命周期
總而言之,重要信息基于系統(tǒng)狀態(tài)駐留在內(nèi)存中。首先是啟動(dòng)時(shí)啟動(dòng)。從非易失性閃存中,將包含整個(gè)系統(tǒng)(RTOS、驅(qū)動(dòng)程序、應(yīng)用程序等)的靜態(tài)副本的引導(dǎo)映像加載到 RAM 中。易失性存儲(chǔ)器被刷新,閃存中的非易失性數(shù)據(jù)再次可用。
接下來(lái)是正常操作。系統(tǒng)運(yùn)行后,必須執(zhí)行日常任務(wù)。對(duì)于基于傳感器的物聯(lián)網(wǎng)設(shè)備,應(yīng)用程序使用本地閃存執(zhí)行工作并依賴文件系統(tǒng)中的持久數(shù)據(jù)存儲(chǔ)(和檢索)。這通常包括打開(kāi)文件、讀取和寫(xiě)入數(shù)據(jù)以及可選地執(zhí)行文件夾和其他文件系統(tǒng)操作。
但是存儲(chǔ)在設(shè)備上的數(shù)據(jù)很可能最終會(huì)在企業(yè)的其他地方——私人的或公共的。趨勢(shì)是在嵌入式設(shè)備上本地執(zhí)行和保存更多的數(shù)據(jù)收集、處理和分析。平臺(tái)正在不斷發(fā)展,以滿足為這些連接設(shè)備提供安全、設(shè)備管理、數(shù)據(jù)分析、軟件更新和連接服務(wù)的需求。
最后一步是關(guān)機(jī)和系統(tǒng)恢復(fù):當(dāng)系統(tǒng)需要關(guān)機(jī)時(shí),有序關(guān)機(jī)很重要。如果有電源完成對(duì)閃存的所有剩余 I/O 請(qǐng)求,則文件系統(tǒng)應(yīng)有序關(guān)閉,并將數(shù)據(jù)信息正確保存到介質(zhì)中。
對(duì)軟件數(shù)據(jù)系統(tǒng)堆棧健壯性的真正測(cè)試是在意外斷電的情況下重建文件結(jié)構(gòu)所需的時(shí)間,這使得有序關(guān)閉變得不可能?;谌罩镜奈募到y(tǒng),如 ext4,可能需要一些時(shí)間來(lái)重播日志以重建文件系統(tǒng)。
審核編輯:郭婷
評(píng)論
查看更多