Flash編程原理都是只能將1寫為0,而不能將0寫成1。所以在Flash編程之前,必須將對應(yīng)的塊擦除,而擦除的過程就是將所有位都寫為1的過程,塊內(nèi)的所有字節(jié)變?yōu)?xFF。因此可以說,編程是將相應(yīng)位寫0的過程,而擦除是將相應(yīng)位寫1的過程,兩者的執(zhí)行過程完全相反。
(1)閃存芯片讀寫的基本單位不同
應(yīng)用程序?qū)orFlash芯片操作以“字”為基本單位。為了方便對大容量NorFlash閃存的管理,通常將NOR閃存分成大小為128KB或64KB的邏輯塊,有時塊內(nèi)還分扇區(qū)。讀寫時需要同時指定邏輯塊號和塊內(nèi)偏移。應(yīng)用程序?qū)andFlash芯片操作是以“塊”為基本單位.NAND閃存的塊比較小,一般是8KB,然后每塊又分成頁,頁大小一般是512字節(jié)。要修改NandFlash芯片中一個字節(jié),必須重寫整個數(shù)據(jù)塊。
(2)NorFlash閃存是隨機(jī)存儲介質(zhì),用于數(shù)據(jù)量較小的場合;NandFlash閃存是連續(xù)存儲介質(zhì),適合存放大的數(shù)據(jù)。
(3)由于NorFlash地址線和數(shù)據(jù)線分開,所以NorFlash芯片可以像SDRAM一樣連在數(shù)據(jù)線上。NOR芯片的使用類似于通常內(nèi)存芯片,傳輸效率高,可執(zhí)行程序可以在芯片內(nèi)執(zhí)行(XI P, eXecute In Place),這樣應(yīng)用程序可以直接在flash閃存內(nèi)運(yùn)行,不必再把代碼讀到系統(tǒng)RAM中.由于NorFlash的這個特點(diǎn),嵌入式系統(tǒng)中經(jīng)常將NOR芯片做啟動芯片使用。NandFlash共用地址和數(shù)據(jù)總線,需要額外聯(lián)結(jié)一些控制的輸入輸出,所以直接將NAND芯片做啟動芯片比較難。
(4)NandFlash閃存芯片因?yàn)楣灿玫刂泛蛿?shù)據(jù)總線的原因,不允許對一個字節(jié)甚至一個塊進(jìn)行的數(shù)據(jù)清空,只能對一個固定大小的區(qū)域進(jìn)行清零操作;NorFlash芯片可以對字進(jìn)行操作。所以在處理小數(shù)據(jù)量的I/O操作的時候的速度要快與NorFlash的速度。比如一塊NorFlash芯片通常寫一個字需要10us,在32位總線上寫512字節(jié)需要1280us;NandFlash閃存寫512字節(jié)需要的時間包括:512×每字節(jié)50ns+10us的尋頁時間+200us的片擦寫時間=234us。
(5)NandFlash閃存的容量比較大,最大容量己達(dá)到8G字節(jié).為了方便管理,NandFlash的存儲空間使用了塊和頁兩級存儲體系,也就是說它的存儲空間是二維的,比如K9F5608UOA閃存塊的大小為16K,每頁大小是512字節(jié),每頁還16字節(jié)空閑區(qū)用來存放錯誤校驗(yàn)碼空間(也稱為out-of-band,OOB空間)。在進(jìn)行寫操作時,NandFlash閃存每次將一個字節(jié)的數(shù)據(jù)放入內(nèi)部的緩存區(qū),然后再發(fā)出“寫指令”進(jìn)行寫操作。由于對NandFlash閃存的操作都是以塊和頁為單位的,所以在向NandFlash閃存進(jìn)行大量數(shù)據(jù)的讀寫時,NAND的速度要快于NOR閃存。
(6)可靠性
NorFlash閃存的可靠性要高于NandFlash閃存,是因?yàn)镹orFlash型閃存的接口簡單,數(shù)據(jù)操作少,位交換操作少,因此可靠性高,極少出現(xiàn)壞區(qū)塊,一般用在對可靠性要求高的地方。NandFlash型閃存接口和操作均相對復(fù)雜,位交換操作也很多,關(guān)鍵性數(shù)據(jù)更是需安錯誤探測/錯誤更正(EDC/ECC)算法來確保數(shù)據(jù)的完整性,因此出現(xiàn)問題的幾率要大得多,壞區(qū)塊也是不可避免的,而且由于壞區(qū)塊是隨機(jī)分布的,連糾錯也無法做到。
(7)NANDFlash一般地址線和數(shù)據(jù)線共用,對讀寫速度有一定影響;NORFlash閃存數(shù)據(jù)線和地址線分開,相對而言讀寫速度快一些。
NANDFlash和NORFlash芯片的共性
首先表現(xiàn)在向芯片中寫數(shù)據(jù)必須先將芯片中對應(yīng)的內(nèi)容清空,然后再寫入,即先擦后寫。只不過NORFlash芯片只用擦寫一個字,而NAND需要擦寫整個塊。其次,閃存擦寫的次數(shù)都是有限的。當(dāng)閃存使用接近使用壽命時,經(jīng)常會出現(xiàn)寫操作失??;到達(dá)使用壽命時,閃存內(nèi)部存放的數(shù)據(jù)雖然可以讀,但不能再進(jìn)行寫操作了。所以為了防止上面問題的發(fā)生,不能對某個特定的區(qū)域反復(fù)進(jìn)行寫操作。通常NANDFlash可擦寫次數(shù)高于NORFlash芯片,但是由于NANDFlash通常是整塊擦寫,塊內(nèi)的頁面中如果有一位失效整個塊就會失效,而且由于擦寫過程復(fù)雜,失敗的概率相對較高,所以從整體上來說NOR的壽命較長。
另一個共性是閃存的讀寫操作不僅僅是一個物理操作,實(shí)際上在閃存上存放數(shù)據(jù)必須使用算法實(shí)現(xiàn),這個模塊一般在驅(qū)動程序的MTD'(Memory Technology Drivers)模塊中或者在FTLZ (Flash Translation Layer)層內(nèi)實(shí)現(xiàn),具體算法和芯片的生產(chǎn)廠商以及芯片型號有關(guān)系。通過比較可以發(fā)現(xiàn),NAND更適用于復(fù)雜的文件應(yīng)用,但是由于NAND芯片的使用相對復(fù)雜,所以對文件系統(tǒng)有較高的要求。
(8)接口對比
NorFlash帶有通用的SRAM接口,可以輕松地掛接在CPU的地址、數(shù)據(jù)總線上,對CPU的接口要求低。NorFlash的特點(diǎn)是芯片內(nèi)執(zhí)行(XIP,eXecute In Place),這樣應(yīng)用程序可以直接在flash閃存內(nèi)運(yùn)行,不必再把代碼讀到系統(tǒng)RAM中。如uboot中的ro段可以直接在NorFlash上運(yùn)行,只需要把rw和zi段拷貝到RAM中運(yùn)行即可。
NandFlash器件使用復(fù)雜的I/O口來串行地存取數(shù)據(jù),8個引腳用來傳送控制、地址和數(shù)據(jù)信息。由于時序較為復(fù)雜,所以一般CPU最好集成NandFlash控制器.另外由于NandFlash沒有掛接在地址總線上,所以如果想用NandFlash作為系統(tǒng)的啟動盤,就需要CPU具備特殊的功能,如s3c2410在被選擇為NandFlash啟動方式時會在上電時自動讀取NandFlash的4k數(shù)據(jù)到地址0的SRAM中.如果CPU不具備這種特殊功能,用戶不能直接運(yùn)行NandFlash上的代碼,那可以采取其他方式,比如好多使用NandFlash的開發(fā)板除了使用NandFlash以外,還用上了一塊小的NorFlash來運(yùn)行啟動代碼。
(9)容量和成本對比
相比起NandFlash來說,NorFlash的容量要小,一般在1~16MByte左右,一些新工藝采用了芯片疊加技術(shù)可以把NorFlash的容量做得大一些。在價格方面,NorFlash相比NandFlash來說較高,如目前市場上一片4Mbyte的AM29lv320 NorFlash零售價在20元左右,而一片128MByte的k9f1g08 NandFlash零售價在30元左右。 NandFlash生產(chǎn)過程更為簡單,NAND結(jié)構(gòu)可以在給定的模具尺寸內(nèi)提供更高的容量,這樣也就相應(yīng)地降低了價格。
(10)
NandFlash器件中的壞塊是隨機(jī)分布的,以前也曾有過消除壞塊的努力,但發(fā)現(xiàn)成品率太低,代價太高,根本不劃算。Nand器件需要對介質(zhì)進(jìn)行初始化掃描以發(fā)現(xiàn)壞塊,并將壞塊標(biāo)記為不可用.在已制成的器件中,如果通過可靠的方法不能進(jìn)行這項(xiàng)處理,將導(dǎo)致高故障率。而壞塊問題在NorFlash上是不存在的.
在Flash的位翻轉(zhuǎn)(一個bit位發(fā)生翻轉(zhuǎn))現(xiàn)象上,NAND的出現(xiàn)幾率要比NorFlash大得多.這個問題在Flash存儲關(guān)鍵文件時是致命的,所以在使用NandFlash時建議同時使用EDC/ECC等校驗(yàn)算法。
(11)升級對比
NorFlash的升級較為麻煩,因?yàn)椴煌萘康腘orFlash的地址線需求不一樣,所以在更換不同容量的NorFlash芯片時不方便。通常我們會通過在電路板的地址線上做一些跳接電阻來解決這樣的問題,針對不同容量的NorFlash。 而不同容量的NandFlash的接口是固定的,所以升級簡單。
(12)讀寫性能對比
寫操作:任何flash器件的寫入操作都只能在空或已擦除的單元內(nèi)進(jìn)行。
NAND器件執(zhí)行擦除操作是十分簡單的,而NOR則要求在進(jìn)行擦除前先要將目標(biāo)塊內(nèi)所有的位都寫為1。
擦除NOR器件時是以64~128KB的塊進(jìn)行的,執(zhí)行一個擦除/寫入操作的時間約為5s。擦除NAND器件是以8~32KB的塊進(jìn)行的,執(zhí)行一個擦除/寫入操作最多只需要4ms.
讀操作:NOR的讀速度比NAND稍快一些。
(13)文件系統(tǒng)比較
Linux系統(tǒng)中采用MTD來管理不同類型的Flash芯片,包括NandFlash和NorFlash。支持在Flash上運(yùn)行的常用文件系統(tǒng)有cramfs、jffs、jffs2、yaffs、yaffs2等。cramfs文件系統(tǒng)是只讀文件系統(tǒng)。如果想在Flash上實(shí)現(xiàn)讀寫操作,通常在NorFlash上我們會選取jffs及jffs2文件系統(tǒng),在NandFlash上選用yaffs或yaffs2文件系統(tǒng)。Yaffs2文件系統(tǒng)支持大頁(大于512字節(jié)/頁)的NandFlash存儲器。
-
閃存
+關(guān)注
關(guān)注
16文章
1745瀏覽量
114572 -
讀寫
+關(guān)注
關(guān)注
0文章
28瀏覽量
15497 -
nandflash
+關(guān)注
關(guān)注
0文章
48瀏覽量
20154 -
NORFlash
+關(guān)注
關(guān)注
0文章
21瀏覽量
9193
原文標(biāo)題:NorFlash和NandFlash區(qū)別
文章出處:【微信號:mcugeek,微信公眾號:MCU開發(fā)加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論