本文主要是關于nor flash燒寫的相關介紹,并著重對nor flash燒寫原理及應用進行了詳盡的闡述。
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的管理需要特殊的系統接口。通常讀取NOR的速度比NAND稍快一些,而NAND的寫入速度比NOR快很多,在設計中應該考慮這些情況。——《ARM嵌入式Linux系統開發從入門到精通》 李亞峰 歐文盛 等編著 清華大學出版社 P52 注釋 API Key
性能比較
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器件都受位交換現象的困擾。在某些情況下(很少見,NAND發生的次數要比NOR多),一個比特位會發生反轉或被報告反轉了。
一位的變化可能不很明顯,但是如果發生在一個關鍵文件上,這個小小的故障可能導致系統停機。如果只是報告有問題,多讀幾次就可能解決了。
當然,如果這個位真的改變了,就必須采用錯誤探測/錯誤更正(EDC/ECC)算法。位反轉的問題更多見于NAND閃存,NAND的供應商建議使用NAND閃存的時候,同時使用EDC/ECC算法。
這個問題對于用NAND存儲多媒體信息時倒不是致命的。當然,如果用本地存儲設備來存儲操作系統、配置文件或其他敏感信息時,必須使用EDC/ECC系統以確保可靠性。
關于nor flash燒寫失敗的原因
最近在看國嵌的教學視頻,在國嵌體驗入門班-2-1(開發板系統安裝-Jlink方式)一集中,直接燒寫nor flash,不進行任何配置的方法,能夠成功純屬偶然!在視頻中燒寫時也出現了兩次錯誤。
我的開發板是mini2440,如果是其它類型,也可以根據具體情況參考。
一、解決方案一
1、在網上搜索S3C2440 JLink配置文件下載。
2、點擊file -》 open project,選中下載好的初始化工程文件。
3、點擊option -》 project settings選擇Flash,點擊select flash device。選中開發板對應的nor flash芯片型號,我的板子采用得是SST39VF1601 ,這里我選擇SST39VF1601。具體情況參考用戶手冊可以查找到Nor Flash芯片型號。
設置好前面這些之后,就可以進行下面的燒寫工作了,通過這種方式一次燒寫成功。
二、解決方案二
1、選擇Options -》 Project Settings -》 CPU -》 ‘Use following init sequence:’中,默認只有一行:
0 reset 0 0ms reset and Halt target
然后選中該行,點擊Edit,修改Delay為2ms,確定即可。
三、解決方案三
1、點擊options--》project settings--》CPU,選擇Use following init sequence 中的Action,把 Reset 改成 Halt 也可以。
但是建議大家最好使用第一種方案。
NOR Flash 燒寫原理
在對FLASH進行寫操作的時候,每個BIT可以通過編程由1變為0,但不可以有0修改為1。為了保證寫操作的正確性,在執行寫操作前,都要執行擦除操作。擦除操作會把FLASH的一個SECTOR,一個BANK或是整片FLASH 的值全修改為0xFF。在寫的時候要注意每個頁、扇區、塊的邊界問題。
對Flash讀寫操作流程(W25Q64為例);
1:定義以一個數組(全局變量),大小為最小擦除緩存,用來對將要擦除區域數據的備份:;
u8 SPI_FLASH_BUF[4096]。
2:定義3個變量用來保存扇區編號、扇區偏移地址、扇區剩余地址;
secpos=WriteAddr/4096;
secoff=WriteAddr%4096;
secremain=4096-secoff;//剩余地址
3:判斷將要寫入Flash的數據容量大小,數據容量小于剩余地址數,表示可以將所有數據寫入Flash,而沒有扇區邊界問題;如果超過地址數則要在數據容量的邊界位置做個記號。
if(NumByteToWrite《=secremain)secremain=NumByteToWrite;//判斷
4:將數據要寫入那個扇區的所有數據讀出,放到緩存中。
5:從扇區偏移地址起,檢驗即將要寫入的扇區,存儲的舊數據是否都為1,否就將整個扇區擦除,使之全變成1.
6:以扇區邊界為限,將要寫入的數據從扇區偏移地址起存到緩存區。
7:將緩存區的數據全部寫入扇區(寫的時候還要判斷頁邊界的問題,思路和寫扇區差不多)。
8:判斷數據是否全部寫入,(如果要寫入的數據容量超過剩余地址,則扇區編號加1;偏移地址清零;數據容量減去之前剩余地址數;修改數據容量的地址,把已經寫入的數據過濾掉;修改即將要寫入存儲單元的地址)
9:返回第4步。
結語
關于nor flash燒寫的相關介紹就到這了,如有不足之處歡迎指正。
-
FlaSh
+關注
關注
10文章
1633瀏覽量
147944 -
存儲器
+關注
關注
38文章
7484瀏覽量
163765
發布評論請先 登錄
相關推薦
評論