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