也許是應(yīng)用程序,也許是上市時間限制,也許只是草率,但代碼工匠似乎需要越來越多的程序、數(shù)據(jù)和暫存存儲器來實現(xiàn)簡單和復(fù)雜的功能。在某些情況下,這是可以理解的。GPS 需要大量地圖數(shù)據(jù),這會占用 NOVRAM 空間。然而,在其他情況下,似乎炸彈被用來殺死螞蟻,嵌入式 MCU 中有 1 MB 的閃存,用于處理簡單的 I/O 控制功能。
NOR Flash 是總線連接、并行接口、代碼分區(qū)存儲器的標準。相比之下,NAND 閃存已成長為與可執(zhí)行代碼沒有直接關(guān)系的數(shù)據(jù)存儲行業(yè)主力軍。
本文著眼于高端 MCU 用于允許 NAND 閃存保存引導(dǎo)代碼和固件的三種方法。有些只是編程的 I/O。有些通過片上硬件接口直接支持 NAND 閃存,有些通過更小的片上引導(dǎo)加載程序支持該過程。NOR Flash 中更小、低成本的引導(dǎo)加載程序仍然可以讓微控制器訪問大量代碼和數(shù)據(jù)空間,將其緩存到 RAM 中并運行,通常比 NOR Flash 總線綁定內(nèi)存更快,因為它可能不需要等待狀態(tài)。此處引用的所有部件、數(shù)據(jù)表、參考設(shè)計、教程和開發(fā)系統(tǒng)都可以在 Digi-Key 網(wǎng)站上在線找到。
挑戰(zhàn)標準
即使有許多 MCU 提供內(nèi)存管理單元 (MMU)、索引和分頁功能,可從任何微控制器直接訪問的內(nèi)存池也是由地址總線的二進制值直接尋址的線性塊。NOR Flash 直接支持這種架構(gòu),是獲取非易失性代碼和數(shù)據(jù)的主力(圖 1A)。
??
圖 1A:標準 NOR 閃存與 RAM 一樣,是線性尋址存儲器位置的連續(xù)塊。
相比之下,NAND Flash 的組織方式類似于硬盤。連續(xù)的數(shù)據(jù)塊聚集在一起形成以表格方式尋址的扇區(qū),就像磁盤驅(qū)動器上的文件操作系統(tǒng)一樣(圖 1B)。
??
圖 1B:NAND 閃存使用相同的數(shù)據(jù)總線來尋址內(nèi)部的各個扇區(qū)。必須一次讀入或?qū)懗稣麄€扇區(qū)。
這不允許像 NOR 閃存那樣使用 NAND 閃存來引導(dǎo)和運行代碼。它不是隨機存取存儲器 (RAM)。必須讀入、更新和回寫整個扇區(qū),而不是能夠訪問或修改單個內(nèi)存位置。當代碼執(zhí)行跳躍時,這會進一步降低性能。每次在緩存塊之外進行訪問時,當微讀入一個新的整個扇區(qū)時,一切都會停止。使用 NOR 閃存在單個高速微周期中可能發(fā)生的事情現(xiàn)在需要更多時間,因為必須首先訪問整個塊,然后將其緩存到 RAM 中。
然而,與 NOR 相比,NAND 閃存確實具有優(yōu)勢。首先,它具有更高的耐用性(與 NOR Flash 提供的 10K 或 100K 寫入周期相比,通常為 100 萬次寫入)。話雖如此,但應(yīng)該指出的是,現(xiàn)代 NOR Flash 一直在變得更好。第二個優(yōu)點是即使需要讀入和寫回整個塊,流操作總體上更快。設(shè)置完成后,每個位置都會以高速輸入或輸出,比每次訪問 NOR 閃存所需的地址-解碼-獲取周期更快。因此,總體而言,NAND 閃存設(shè)備減少了移動大量數(shù)據(jù)的讀寫時間。
由于 SDRAM、DDR、DDR2 和 DDR3 等易失性 RAM 的密度和速度不斷提高,大量低成本高速非易失性存儲器已準備好用于緩存目的。這可以顯著減少所需的傳統(tǒng) NOR 閃存數(shù)量,因為現(xiàn)在只需要一個基本的引導(dǎo)加載程序。
我們現(xiàn)在可以構(gòu)建我們的系統(tǒng),在我們的電路板上放置一個 NAND 閃存(或插入式 NAND 閃存卡)。然后,當微啟動時,一個小型、低成本、基于片上 NOR 閃存的引導(dǎo)加載程序可以將代碼和數(shù)據(jù)緩存到成本較低的連續(xù)線性可尋址 RAM 池中。在操作手頭的任務(wù)時,可以在需要時將數(shù)據(jù)和動態(tài)加載的代碼泵入和從 RAM 中抽出。
一些例子
一種選擇是使用帶有少量內(nèi)部或外部 NOR 閃存的標準微控制器。通常,微控制器系列采用無 ROM 風格,所有訪問都使用外部總線接口。片上閃存大小可以從非常小的塊到非常大的塊不等。如您所料,較小的塊部件更便宜,無 ROM 部件更便宜。系統(tǒng)設(shè)計人員可以使用更小的塊部件來降低成本,尤其是在可以使用深層外部 NAND 閃存池的情況下。
NXP的LPC2200系列采用這種方法,該系列采用 ROMless ( LPC2220FBD144,551 ) 風格,具有 128K 片上閃存,例如LPC2212FBD144/01,5和 256K 閃存,例如LPC2292FET144/01,5. 由于這些 16/32 位 75 MHz ARM? 7 處理器中不存在專用的 NAND 閃存接口硬件,恩智浦向工程師展示了如何使用兩條通用 I/O 線和一個外部存儲器接口 (EMI) 組。在這種情況下,片上閃存或小型外部 ROM 保存引導(dǎo)加載程序,代碼控制從 NAND 閃存中提取和驗證數(shù)據(jù)的過程。
我在這里使用斜體來強調(diào)驗證的重要性,因為 NAND Flash 可能存在缺陷并卡在某些位置。另一方面,NOR Flash 通常更可靠且無缺陷。這意味著 NAND 閃存上的錯誤檢測和糾正必須編碼到關(guān)鍵代碼和數(shù)據(jù)的訪問和加載中。通常,只有 NAND 閃存的零頁才能保證無缺陷。
恩智浦通過應(yīng)用筆記 (AN10600) 說明了該應(yīng)用的硬件實現(xiàn)和代碼生成技術(shù)。1
STMicroelectronics還提供通用應(yīng)用筆記 (AN1935),可與ST 系列微控制器或幾乎任何微控制器一起使用。本應(yīng)用筆記展示了如何使用具有小頁面(528 字節(jié)/264 字)或大頁面(2,112 字節(jié)/1,056 字)單級單元 NAND 閃存設(shè)備的塊零從外部 NAND 閃存啟動(圖2)。請注意此處如何直接支持 ECC 來驗證數(shù)據(jù)的完整性。
??
圖 2:一個小型內(nèi)部 ROM 保存引導(dǎo)加載程序代碼,它將運行時固件傳輸?shù)酵獠?RAM(在本例中為 DRAM)。請注意在引導(dǎo)塊代碼中需要 ECC,因為 NAND 閃存可能存在缺陷。
添加片上功能
為實現(xiàn) NAND 閃存的優(yōu)勢,微控制器供應(yīng)商正在以多種方式在其 MCU 中集成直接 NAND 閃存支持。他們的目標是為嵌入式設(shè)計人員提供兩全其美的體驗。一種方法是使用片上小型引導(dǎo)加載程序,或者使用編程的 I/O,或者為 NAND 接口使用專用的片上硬件。
這是 Atmel 采用他們的AT91SAM7SE采用的方法,AT91SAM7SE是一個使用 ARM 7 架構(gòu)的基于 ARM Thumb 的 32 位微控制器。是公司SAM7SE的成員系列。144 針 5 MHz 控制器具有 88 個 I/O 并容納 32K x 8 片上閃存。這是一款中端處理器,具有強大的馬力來處理許多通用任務(wù),如果沒有片上 NAND 閃存接口,它似乎對只有 32K 的代碼空間感到饑餓。
Atmel 部件上的外部總線接口支持高速、單周期 SDRAM,以及與 Smart Media、Compactflash 和啟用 ECC 的 NAND 閃存設(shè)備的無縫連接。雖然有高達 512K 片上的版本可供選擇,但出于成本控制目的,這個 32K 部件足以容納引導(dǎo)加載程序并利用片上硬件接口用于 8 位和 16 位 NAND 閃存設(shè)備(使用其片上設(shè)備解碼部分之一(圖 3)。
??
圖 3:Atmel 微控制器使用外部接口連接到 NAND 控制和數(shù)據(jù)線,無需任何膠水或外部邏輯。這里顯示的是 16 位寬的接口,但這些部件也支持 8 位寬的接口。
Atmel 部件的在線仿真器 (ICE) 支持由基于 JTAG 的AT91SAM-ICE開發(fā)工具提供。Equinox Technologies FS2009USB (ARM)系統(tǒng)內(nèi)編程工具也可用于測試、調(diào)試和制造環(huán)境。
第二種解決方案
另一種方法是在微控制器上實現(xiàn)定序器或狀態(tài)機,當微啟動時,它會自動將 NAND 閃存的內(nèi)容傳輸?shù)?RAM。飛思卡爾半導(dǎo)體采用這種方法他們的 400 MHz 32 位MPC5125YVN400非常適合復(fù)雜的實時任務(wù)。這部分的有趣之處在于它是無 ROM 的,根本沒有 Flash。相反,它允許通過其片上 NAND 閃存控制器從外部 NAND 閃存設(shè)備啟動(圖 4)。
??
圖 4:當飛思卡爾 MPC5125 micro 的多端口內(nèi)存控制器內(nèi)部集成了專用 NAND Flash 接口邏輯時,NAND Flash 的內(nèi)容可以在 micro 啟動時自動傳輸?shù)礁咚?RAM。
這些部件具有靈活、多功能的內(nèi)存總線接口,不僅支持 DDR1、DDR2 和低功耗 DDR (LPDDR) 接口,而且在其 MMC、SD、和 SDIO 格式。內(nèi)部控制器支持 8 位和 16 位寬的 NAND 閃存設(shè)備,并且可以從具有大于 2 KB 頁面(或扇區(qū))的設(shè)備啟動。啟動后,它支持 512 字節(jié)、2 KB、4 KB 和 8 KB 扇區(qū)大小,并具有內(nèi)置的糾錯和檢測引擎。
請注意 USB OTG、以太網(wǎng)和 TFT 顯示接口等高端外圍設(shè)備。這些可能是代碼和數(shù)據(jù)密集型的。更高密度的 NAND 閃存的一個完美應(yīng)用是保存圖形頁面模板并使用片上 DMA 控制器將它們快速發(fā)送到顯示器。這比必須使用代碼時間來處理和渲染圖形要快得多,并且可以在顯示和圖像質(zhì)量方面產(chǎn)生真正的差異。–40° 至 +125°C 的擴展溫度范圍使該 MCU 也成為汽車應(yīng)用的理想選擇;尤其是其內(nèi)置的多個 CAN 接口。
總之
幾乎任何具有足夠 I/O 的 micro 都可以與 NAND 閃存通信,并且通過他們的開發(fā)套件,大多數(shù) micro 都證明了這一點,支持各種風格的 NAND 閃存卡,包括 USB、Smart Media、SD、CF、Micro SD、安全數(shù)字, 和別的。
雖然訪問數(shù)據(jù)是一回事,但能夠啟動和運行有點棘手。如果您需要或希望使用 NAND 閃存,此處概述的三種方法是您嵌入式設(shè)計的良好起點。
最后,請記住,盡管 NAND 閃存具有高耐用性,但在正常使用中可能會出現(xiàn)缺陷,因此應(yīng)將磨損均衡、錯誤檢測/糾正、扇區(qū)鎖定和其他系統(tǒng)完整性工具編碼到您的應(yīng)用程序中。
評論
查看更多