工程師譚軍 發表於 2018-10-07 15:39:00
NOR Flash
NOR Flash是現在市場上兩種主要的非易失快閃記憶體技術之一。Intel於1988年首先開發出NOR Flash 技術,徹底改變了原先由EPROM(Erasable Programmable Read-Only-Memory電可編程序只讀存儲器)和EEPROM(電可擦只讀存儲器Electrically Erasable Programmable Read - Only Memory)一統天下的局面。緊接著,1989年,東芝公司發表了NAND Flash 結構,強調降低每比特的成本,有更高的性能,並且像磁碟一樣可以通過接口輕鬆升級。NOR Flash 的特點是晶片內執行(XIP ,eXecute In Place),這樣應用程式可以直接在Flash快閃記憶體內運行,不必再把代碼讀到系統RAM中。NOR 的傳輸效率很高,在1~4MB的小容量時具有很高的成本效益,但是很低的寫入和擦除速度大大影響到它的性能。NAND的結構能提供極高的單元密度,可以達到高存儲密度,並且寫入和擦除的速度也很快。應用NAND的困難在於Flash的管理需要特殊的系統接口。
性能比較
flash快閃記憶體是非易失存儲器,可以對稱為塊的存儲器單元塊進行擦寫和再編程。任何flash器件的寫入操作只能在空或已擦除的單元內進行,所以大多數情況下,在進行寫入操作之前必須先執行擦除。NAND器件執行擦除操作是十分簡單的,而NOR則要求在進行擦除前先要將目標塊內所有的位都寫為0。
由於擦除NOR器件時是以64~128KB的塊進行的,執行一個寫入/擦除操作的時間為5s,與此相反,擦除NAND器件是以8~32KB的塊進行的,執行相同的操作最多只需要4ms。
執行擦除時塊尺寸的不同進一步拉大了NOR和NAND之間的性能差距,統計表明,對於給定的一套寫入操作(尤其是更新小文件時),更多的擦除操作必須在基於NOR的單元中進行。這樣,當選擇存儲解決方案時,設計師必須權衡以下的各項因素。
l 、NOR的讀速度比NAND稍快一些。
2、 NAND的寫入速度比NOR快很多。
3 、NAND的4ms擦除速度遠比NOR的5s快。
4 、大多數寫入操作需要先進行擦除操作。
5 、NAND的擦除單元更小,相應的擦除電路更少。
此外,NAND的實際應用方式要比NOR複雜的多。NOR可以直接使用,並可在上面直接運行代碼;而NAND需要I/O接口,因此使用時需要驅動程序。不過當今流行的作業系統對NAND結構的Flash都有支持。此外,Linux內核也提供了對NAND結構的Flash的支持。
詳解
NOR和NAND是現在市場上兩種主要的非易失快閃記憶體技術。Intel於1988年首先開發出NOR flash技術,徹底改變了原先由EPROM和EEPROM一統天下的局面。緊接著,1989年,東芝公司發表了NAND flash結構,強調降低每比特的成本,更高的性能,並且象磁碟一樣可以通過接口輕鬆升級。但是經過了十多年之後,仍然有相當多的硬體工程師分不清NOR和NAND快閃記憶體。
像「flash存儲器」經常可以與相「NOR存儲器」互換使用。許多業內人士也搞不清楚NAND快閃記憶體技術相對於NOR技術的優越之處,因為大多數情況下快閃記憶體只是用來存儲少量的代碼,這時NOR快閃記憶體更適合一些。而NAND則是高數據存儲密度的理想解決方案。
NOR的特點是晶片內執行(XIP, eXecute In Place),這樣應用程式可以直接在flash快閃記憶體內運行,不必再把代碼讀到系統RAM中。NOR的傳輸效率很高,在1~4MB的小容量時具有很高的成本效益,但是很低的寫入和擦除速度大大影響了它的性能。
NAND結構能提供極高的單元密度,可以達到高存儲密度,並且寫入和擦除的速度也很快。應用NAND的困難在於flash的管理需要特殊的系統接口。
接口差別
NOR flash帶有SRAM接口,有足夠的地址引腳來尋址,可以很容易地存取其內部的每一個字節。
NAND器件使用複雜的I/O口來串行地存取數據,各個產品或廠商的方法可能各不相同。8個引腳用來傳送控制、地址和數據信息。
NAND讀和寫操作採用512位元組的塊,這一點有點像硬碟管理此類操作,很自然地,基於NAND的存儲器就可以取代硬碟或其他塊設備。
容量成本
NAND flash的單元尺寸幾乎是NOR器件的一半,由於生產過程更為簡單,NAND結構可以在給定的模具尺寸內提供更高的容量,也就相應地降低了價格。
NOR flash佔據了容量為1~16MB快閃記憶體市場的大部分,而NAND flash只是用在8~128MB的產品當中,這也說明NOR主要應用在代碼存儲介質中,NAND適合於數據存儲,NAND在CompactFlash、Secure Digital、PC Cards和MMC(多媒體存儲卡Multi Media Card)存儲卡市場上所佔份額最大。
可靠耐用
採用flash介質時一個需要重點考慮的問題是可靠性。對於需要擴展MTBF(平均故障間隔時間Mean Time Between Failures)的系統來說,Flash是非常合適的存儲方案。可以從壽命(耐用性)、位交換和壞塊處理三個方面來比較NOR和NAND的可靠性。
壽命(耐用性)
在NAND快閃記憶體中每個塊的最大擦寫次數是一百萬次,而NOR的擦寫次數是十萬次。NAND存儲器除了具有10比1的塊擦除周期優勢,典型的NAND塊尺寸為NOR器件的八分之一,每個NAND存儲器塊在給定的時間內的刪除次數要少一些。
一、Flash介紹
常用的flash類型有NOR Flash 和Nand Flash 兩種;
(1)Nor Flash
1、Nor Flash的接口和RAM完全相同,可以隨機訪問任意地址的數據,在其上進行讀操作的效率非常高,但是擦除和寫操作的效率很低,另外,Nor Flash的容量一般比較小,通常,Nor Flash用於存儲程序;
2、Nor Flash的塊大小範圍為64KB—128KB;
3、擦寫一個Nor Flash塊需要4s,
4、市場上Nor Flash 的容量通常為1MB—4MB
(2)Nand Flash
1、Nand Flash的接口僅僅包含幾個I/O引腳,需要串行地訪問,Nand Flash進行擦除和寫操作的效率很高,容量較大,
通常Nand Flash用於存儲數據;
2、Nand Flash的塊大小範圍為8KB—64KB;
3、擦寫一個Nand Flash塊需要2ms;
4、Nand Flash 一般以512位元組為單位進行讀寫
5、 市場上 Nand Flash 的容量一般為 8M—512M
二、Nand Flash的物理結構
以三星公司生產的 K9F1208U0M 為例:
1、容量:64MB,
一共4個層;
每層1024個塊(block);
1塊包含32頁
1頁包含 512 + 16 = 528個字節
2、外部接口:8個I/O口,5個使能信號(ALE、CLE、nWE、nRE、nCE),1個狀態引腳(RDY/B),1個防寫引腳(nWE);
3、命令、地址、數據都通過8個I/O口輸入輸出;
4、寫入命令、地址、數據時,都需要將nWE、nCE信號同時拉低;數據在WE上升沿被鎖存;
5、CLE、ALE用來區分I/O引腳上傳輸的是數據還是地址;
6、64MB的空間需要26位地址,因此以字節為單位訪問Flash時需要4個地址序列;
7、讀/寫頁在發出命令後,需要4個地址序列,而擦除塊在發出擦除命令後僅需要3個地址序列;
三、Nand Flash訪問方法
操作Nand Flash時,先傳輸命令,然後傳輸地址,最後讀、寫數據,期間要檢查flash的狀態;
K9F1208U0M 一頁大小為528位元組,而列地址A0——A7可以尋址的範圍是256位元組,所以將一頁分為A、B、C三個區:
A區:0—255位元組
B區:256—511位元組
C區:512—527位元組
(1)復位
命令:FFh
步驟:發出命令即可復位Nand Flash晶片;
(2)讀操作
命令:
00h——讀A區
01h——讀B區
50h——讀C區
操作步驟:
1、發出命令 00h、01h 或50h, 00h將地址位A8設為0, 01h將A8設為1 ;
2、依次發出4個地址序列;
3、檢測R/nB,待其為高電平時,就可以讀取數據了;
(3)flash編程
命令:
80h——10h :寫單頁;
80h——11h :對多個層進行些頁操作;
操作步驟:
1、寫單頁步驟:
【1】發出80h命令後;
【2】發送4個地址序列;
【3】向flash發送數據;
【4】發出命令10h啟動寫操作,flash內部自動完成寫、校驗操作;
【5】通過命令70h讀取狀態位,查詢寫操作是否完成;
2、多頁寫
【1】發出80h、4個地址序列、最多528位元組的數據;
【2】發出11h命令;
【3】接著在相鄰層執行【1】、【2】兩步操作;
【4】第四頁的最後使用10h代替11h,啟動flash內部的寫操作;
【5】可以通過71h查詢寫操作是否完成;
(4)複製
命令:
00h——8Ah——10h :單層頁內複製
03h——8Ah——11h :多層頁內複製
操作步驟:
1、單層頁內複製步驟:
【1】發出命令00h;
【2】4個源地址序列;
【2】接著發出8Ah;
【4】發出4個目的地址序列;
【5】發出10h命令,啟動寫操作;
【6】通過70h命令讀取狀態查詢操作是否完成;
2、多層頁內複製步驟:
【1】發出命令00h(第一層)、4個源頁地址序列;
【2】以後各層依次發出命令03h、4個源頁地址序列;
【3】發出命令8Ah、目的地址、命令11h;
【4】各層依次執行【3】,在最後一頁的地址後,用10h代替11h,啟動寫操作;
【5】通過71h命令讀取狀態查詢操作是否完成;
(5)擦除
命令:
60h——D0h :單層內塊擦除
60h-60h ——D0h :多層內塊擦除
操作步驟:
1、單層內塊擦除:
【1】發出命令字60h;
【2】發出塊(block)地址,僅需3個地址序列;
【3】發出D0h,啟動擦除操作;
【4】發出70h命令查詢狀態,是否完成擦除;
2、多層內塊擦除:
【1】發出命令字60h,3個塊地址序列;
【2】對每個層執行【1】;
【3】發出命令D0h,啟動擦除操作;
【4】發出71h命令查詢狀態,檢查是否完成擦除;
(6)讀取晶片ID
命令:90h
操作步驟:
1、發出命令90h;
2、發出4個地址序列(均設為0);
3、連續讀入5個數據,分別表示:廠商代碼、設備代碼、保留字節、多層操作代碼;
(7)讀狀態
命令:
70h——單層狀態
71h——多層狀態
操作步驟:寫入命令字之後,然後啟動讀操作即可讀入此寄存器。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴