NorFlash和NandFlash區別
Flash編程原理都是只能將1寫為0,而不能將0寫成1。所以在Flash編程之前,必須將對應的塊擦除,而擦除的過程就是將所有位都寫為1的過程,塊內的所有位元組變為0xFF。因此可以說,編程是將相應位寫0的過程,而擦除是將相應位寫1的過程,兩者的執行過程完全相反。
(1)快閃記憶體晶元讀寫的基本單位不同
應用程序對NorFlash晶元操作以「字」為基本單位。為了方便對大容量NorFlash快閃記憶體的管理,通常將NOR快閃記憶體分成大小為128KB或64KB的邏輯塊,有時塊內還分扇區。讀寫時需要同時指定邏輯塊號和塊內偏移。應用程序對NandFlash晶元操作是以「塊」為基本單位.NAND快閃記憶體的塊比較小,一般是8KB,然後每塊又分成頁,頁大小一般是512位元組。要修改NandFlash晶元中一個位元組,必須重寫整個數據塊。
(2)NorFlash快閃記憶體是隨機存儲介質,用於數據量較小的場合;NandFlash快閃記憶體是連續存儲介質,適合存放大的數據。
(3)由於NorFlash地址線和數據線分開,所以NorFlash晶元可以像SDRAM一樣連在數據線上。NOR晶元的使用類似於通常內存晶元,傳輸效率高,可執行程序可以在晶元內執行(XI P, eXecute In Place),這樣應用程序可以直接在flash快閃記憶體內運行,不必再把代碼讀到系統RAM中.由於NorFlash的這個特點,嵌入式系統中經常將NOR晶元做啟動晶元使用。NandFlash共用地址和數據匯流排,需要額外聯結一些控制的輸入輸出,所以直接將NAND晶元做啟動晶元比較難。
(4)NandFlash快閃記憶體晶元因為共用地址和數據匯流排的原因,不允許對一個位元組甚至一個塊進行的數據清空,只能對一個固定大小的區域進行清零操作;NorFlash晶元可以對字進行操作。所以在處理小數據量的I/O操作的時候的速度要快與NorFlash的速度。比如一塊NorFlash晶元通常寫一個字需要10us,在32位匯流排上寫512位元組需要1280us;NandFlash快閃記憶體寫512位元組需要的時間包括:512×每位元組50ns+10us的尋頁時間+200us的片擦寫時間=234us。
(5)NandFlash快閃記憶體的容量比較大,最大容量己達到8G位元組.為了方便管理,NandFlash的存儲空間使用了塊和頁兩級存儲體系,也就是說它的存儲空間是二維的,比如K9F5608UOA快閃記憶體塊的大小為16K,每頁大小是512位元組,每頁還16位元組空閑區用來存放錯誤校驗碼空間(也稱為out-of-band,OOB空間)。在進行寫操作時,NandFlash快閃記憶體每次將一個位元組的數據放入內部的緩存區,然後再發出「寫指令」進行寫操作。由於對NandFlash快閃記憶體的操作都是以塊和頁為單位的,所以在向NandFlash快閃記憶體進行大量數據的讀寫時,NAND的速度要快於NOR快閃記憶體。
(6)可靠性
NorFlash快閃記憶體的可靠性要高於NandFlash快閃記憶體,是因為NorFlash型快閃記憶體的介面簡單,數據操作少,位交換操作少,因此可靠性高,極少出現壞區塊,一般用在對可靠性要求高的地方。NandFlash型快閃記憶體介面和操作均相對複雜,位交換操作也很多,關鍵性數據更是需安錯誤探測/錯誤更正(EDC/ECC)演算法來確保數據的完整性,因此出現問題的幾率要大得多,壞區塊也是不可避免的,而且由於壞區塊是隨機分布的,連糾錯也無法做到。
(7)NANDFlash一般地址線和數據線共用,對讀寫速度有一定影響;NORFlash快閃記憶體數據線和地址線分開,相對而言讀寫速度快一些。
NANDFlash和NORFlash晶元的共性
首先表現在向晶元中寫數據必須先將晶元中對應的內容清空,然後再寫入,即先擦後寫。只不過NORFlash晶元只用擦寫一個字,而NAND需要擦寫整個塊。其次,快閃記憶體擦寫的次數都是有限的。當快閃記憶體使用接近使用壽命時,經常會出現寫操作失敗;到達使用壽命時,快閃記憶體內部存放的數據雖然可以讀,但不能再進行寫操作了。所以為了防止上面問題的發生,不能對某個特定的區域反覆進行寫操作。通常NANDFlash可擦寫次數高於NORFlash晶元,但是由於NANDFlash通常是整塊擦寫,塊內的頁面中如果有一位失效整個塊就會失效,而且由於擦寫過程複雜,失敗的概率相對較高,所以從整體上來說NOR的壽命較長。
另一個共性是快閃記憶體的讀寫操作不僅僅是一個物理操作,實際上在快閃記憶體上存放數據必須使用演算法實現,這個模塊一般在驅動程序的MTD"(Memory Technology Drivers)模塊中或者在FTLZ (Flash Translation Layer)層內實現,具體演算法和晶元的生產廠商以及晶元型號有關係。通過比較可以發現,NAND更適用於複雜的文件應用,但是由於NAND晶元的使用相對複雜,所以對文件系統有較高的要求。
(8)介面對比
NorFlash帶有通用的SRAM介面,可以輕鬆地掛接在CPU的地址、數據匯流排上,對CPU的介面要求低。NorFlash的特點是晶元內執行(XIP,eXecute In Place),這樣應用程序可以直接在flash快閃記憶體內運行,不必再把代碼讀到系統RAM中。如uboot中的ro段可以直接在NorFlash上運行,只需要把rw和zi段拷貝到RAM中運行即可。
NandFlash器件使用複雜的I/O口來串列地存取數據,8個引腳用來傳送控制、地址和數據信息。由於時序較為複雜,所以一般CPU最好集成NandFlash控制器.另外由於NandFlash沒有掛接在地址匯流排上,所以如果想用NandFlash作為系統的啟動盤,就需要CPU具備特殊的功能,如s3c2410在被選擇為NandFlash啟動方式時會在上電時自動讀取NandFlash的4k數據到地址0的SRAM中.如果CPU不具備這種特殊功能,用戶不能直接運行NandFlash上的代碼,那可以採取其他方式,比如好多使用NandFlash的開發板除了使用NandFlash以外,還用上了一塊小的NorFlash來運行啟動代碼。
(9)容量和成本對比
相比起NandFlash來說,NorFlash的容量要小,一般在1~16MByte左右,一些新工藝採用了晶元疊加技術可以把NorFlash的容量做得大一些。在價格方面,NorFlash相比NandFlash來說較高,如目前市場上一片4Mbyte的AM29lv320 NorFlash零售價在20元左右,而一片128MByte的k9f1g08 NandFlash零售價在30元左右。 NandFlash生產過程更為簡單,NAND結構可以在給定的模具尺寸內提供更高的容量,這樣也就相應地降低了價格。
(10)
NandFlash器件中的壞塊是隨機分布的,以前也曾有過消除壞塊的努力,但發現成品率太低,代價太高,根本不划算。Nand器件需要對介質進行初始化掃描以發現壞塊,並將壞塊標記為不可用.在已製成的器件中,如果通過可靠的方法不能進行這項處理,將導致高故障率。而壞塊問題在NorFlash上是不存在的.
在Flash的位翻轉(一個bit位發生翻轉)現象上,NAND的出現幾率要比NorFlash大得多.這個問題在Flash存儲關鍵文件時是致命的,所以在使用NandFlash時建議同時使用EDC/ECC等校驗演算法。
(11)升級對比
NorFlash的升級較為麻煩,因為不同容量的NorFlash的地址線需求不一樣,所以在更換不同容量的NorFlash晶元時不方便。通常我們會通過在電路板的地址線上做一些跳接電阻來解決這樣的問題,針對不同容量的NorFlash。 而不同容量的NandFlash的介面是固定的,所以升級簡單。
(12)讀寫性能對比
寫操作:任何flash器件的寫入操作都只能在空或已擦除的單元內進行。
NAND器件執行擦除操作是十分簡單的,而NOR則要求在進行擦除前先要將目標塊內所有的位都寫為1。
擦除NOR器件時是以64~128KB的塊進行的,執行一個擦除/寫入操作的時間約為5s。擦除NAND器件是以8~32KB的塊進行的,執行一個擦除/寫入操作最多只需要4ms.
讀操作:NOR的讀速度比NAND稍快一些。
(13)文件系統比較
Linux系統中採用MTD來管理不同類型的Flash晶元,包括NandFlash和NorFlash。支持在Flash上運行的常用文件系統有cramfs、jffs、jffs2、yaffs、yaffs2等。cramfs文件系統是只讀文件系統。如果想在Flash上實現讀寫操作,通常在NorFlash上我們會選取jffs及jffs2文件系統,在NandFlash上選用yaffs或yaffs2文件系統。Yaffs2文件系統支持大頁(大於512位元組/頁)的NandFlash存儲器。
TAG:至秦單片機 |