1. 程式人生 > >嵌入式系統中RAM和ROM的疑惑澄清

嵌入式系統中RAM和ROM的疑惑澄清

而嵌入式系統中的RAM,一般也就是和PC上的(DDR)SDRAM一樣,掉電丟失。
嵌入式系統特別是手機中ROM的構成,可能是NorFlash也可能是NandFlash,速度較快,但是掉電不丟失。

而之所以之前疑惑地方在於,
一、現在很多時候手機都標榜自己的ROM很大。而大多數情況下,在PC上廠商都是標榜自己產品的RAM很大,從而造成了誤解。
原因在於:這裡的嵌入式上的ROM類似於PC上的硬碟,但是比硬碟讀寫速度應該要快一些。嵌入式上的ROM造價單位上肯定比硬碟要貴的多,如果有更多的ROM空間,即可以儲存更多的程式程式碼,所以嵌入式廠商才會不斷提升並提供不同的ROM的空間,比如蘋果的8G,16G,32G。

二、如果是ROM只是儲存的話,為什麼又有些說法是程式可以直接在ROM上執行?ROM不是隻讀嗎?
原因在於ROM上說的可執行,是指cpu可以直接把ROM中的NorFlash部分的程式程式碼當做RAM中程式程式碼段,不需要載入RAM中才能讓cpu直接讀取。但是中間的處理資料和最終結果資料都是存放在RAM中的。這裡涉及到一個晶片內執行的概念即XIP。

在NOR器件上執行程式碼不需要任何的軟體支援即XIP,在NAND器件上進行同樣操作時,通常需要驅動程式,也就是記憶體技術驅動程式(MTD),NAND和NOR器件在進行寫入和擦除操作時都需要MTD。
即norflash在讀操作上,是不需要MTD的,但是擦除和寫操作還是需要MTD。對比之下,nanflash雖然有擦除和寫操作快的優勢,但是其讀寫及擦除操作都全部依賴於MTD,原因在於NAND器件使用複雜的I/O口來序列地存取資料,又比norflash更多的要注意壞塊。
XIP的示意圖如下:
這裡寫圖片描述

關於XIP,首先需要了解的是嵌入式系統中程式碼的執行方式主要有3種,XIP是其中一種:

  ①完全對映(fully shadowed)。嵌入式系統程式執行時,將所有的程式碼從非易失儲存器(Flash、ROM等)複製到RAM中執行。

  ②按需分頁(demand paging)。只複製部分程式碼到RAM中。這種方法對RAM中的頁進行匯入/匯出管理,如果訪問位於虛存中但不在物理RAM中會產生頁錯誤,這時才將程式碼和資料對映到RAM中。

  ③ eXecute In Place (XIP)。在系統啟動時,不將程式碼複製到RAM,而是直接在非易失性儲存位置執行。RAM中只存放需要不斷變化的資料部分,如圖1所示。
這裡寫圖片描述


如果非易失性儲存器的讀取速度與RAM相近,則XIP可以節省複製和解壓的時間。NOR Flash和ROM的讀取速度比較快(約100 ns),適合XIP;而NAND Flash的讀操作是基於扇區的,速度相對很慢(μs級),因此不宜實現XIP系統。而NAND

快閃記憶體寫入速度比NOR快,更適合SND(儲存和下載)系統。

三、為什麼norflash可以實現XIP,而nandflash就不適合?
(1)NAND器件中的壞塊是隨機分佈的。以前也曾有過消除壞塊的努力,但發現成品率太低,代價太高,根本不划算。
NAND器件需要對介質進行初始化掃描以發現壞塊,並將壞塊標記為不可用。在已製成的器件中,如果通過可靠的方法不能進行這項處理,將導致高故障率。
(2)NOR flash帶有SRAM介面,有足夠的地址引腳來定址,可以很容易地存取其內部的每一個位元組。
NAND器件使用複雜的I/O口來序列地存取資料,各個產品或廠商的方法可能各不相同。8個引腳用來傳送控制、地址和資料資訊。

由於需要I/O介面,NAND要複雜得多。各種NAND器件的存取方法因廠家而異。在使用NAND器件時,必須先寫入驅動程式,才能繼續執行其他操作。向NAND器件寫入資訊需要相當的技巧,因為設計師絕不能向壞塊寫入,這就意味著在NAND器件上自始至終都必須進行虛擬對映。