本文主要是關(guān)于nor flash燒寫(xiě)的相關(guān)介紹,并著重對(duì)nor flash燒寫(xiě)原理及應(yīng)用進(jìn)行了詳盡的闡述。
nor flash
nor flash是現(xiàn)在市場(chǎng)上兩種主要的非易失閃存技術(shù)之一。Intel于1988年首先開(kāi)發(fā)出NOR Flash 技術(shù),徹底改變了原先由EPROM(Erasable Programmable Read-Only-Memory電可編程序只讀存儲(chǔ)器)和EEPROM(電可擦只讀存儲(chǔ)器Electrically Erasable Programmable Read - Only Memory)一統(tǒng)天下的局面。緊接著,1989年,東芝公司發(fā)表了NAND Flash 結(jié)構(gòu),強(qiáng)調(diào)降低每比特的成本,有更高的性能,并且像磁盤(pán)一樣可以通過(guò)接口輕松升級(jí)。NOR Flash 的特點(diǎn)是芯片內(nèi)執(zhí)行(XIP ,eXecute In Place),這樣應(yīng)用程序可以直接在Flash閃存內(nèi)運(yùn)行,不必再把代碼讀到系統(tǒng)RAM中。NOR 的傳輸效率很高,在1~4MB的小容量時(shí)具有很高的成本效益,但是很低的寫(xiě)入和擦除速度大大影響到它的性能。NAND的結(jié)構(gòu)能提供極高的單元密度,可以達(dá)到高存儲(chǔ)密度,并且寫(xiě)入和擦除的速度也很快。應(yīng)用NAND的困難在于Flash的管理需要特殊的系統(tǒng)接口。通常讀取NOR的速度比NAND稍快一些,而NAND的寫(xiě)入速度比NOR快很多,在設(shè)計(jì)中應(yīng)該考慮這些情況?!?a target="_blank">ARM嵌入式Linux系統(tǒng)開(kāi)發(fā)從入門(mén)到精通》 李亞峰 歐文盛 等編著 清華大學(xué)出版社 P52 注釋 API Key
性能比較
flash閃存是非易失存儲(chǔ)器,可以對(duì)稱為塊的存儲(chǔ)器單元塊進(jìn)行擦寫(xiě)和再編程。任何flash器件的寫(xiě)入操作只能在空或已擦除的單元內(nèi)進(jìn)行,所以大多數(shù)情況下,在進(jìn)行寫(xiě)入操作之前必須先執(zhí)行擦除。NAND器件執(zhí)行擦除操作是十分簡(jiǎn)單的,而NOR則要求在進(jìn)行擦除前先要將目標(biāo)塊內(nèi)所有的位都寫(xiě)為0。
由于擦除NOR器件時(shí)是以64~128KB的塊進(jìn)行的,執(zhí)行一個(gè)寫(xiě)入/擦除操作的時(shí)間為5s,與此相反,擦除NAND器件是以8~32KB的塊進(jìn)行的,執(zhí)行相同的操作最多只需要4ms。
執(zhí)行擦除時(shí)塊尺寸的不同進(jìn)一步拉大了NOR和NAND之間的性能差距,統(tǒng)計(jì)表明,對(duì)于給定的一套寫(xiě)入操作(尤其是更新小文件時(shí)),更多的擦除操作必須在基于NOR的單元中進(jìn)行。這樣,當(dāng)選擇存儲(chǔ)解決方案時(shí),設(shè)計(jì)師必須權(quán)衡以下的各項(xiàng)因素。
l 、NOR的讀速度比NAND稍快一些。
2、 NAND的寫(xiě)入速度比NOR快很多。
3 、NAND的4ms擦除速度遠(yuǎn)比NOR的5s快。
4 、大多數(shù)寫(xiě)入操作需要先進(jìn)行擦除操作。
5 、NAND的擦除單元更小,相應(yīng)的擦除電路更少。
此外,NAND的實(shí)際應(yīng)用方式要比NOR復(fù)雜的多。NOR可以直接使用,并可在上面直接運(yùn)行代碼;而NAND需要I/O接口,因此使用時(shí)需要驅(qū)動(dòng)程序。不過(guò)當(dāng)今流行的操作系統(tǒng)對(duì)NAND結(jié)構(gòu)的Flash都有支持。此外,Linux內(nèi)核也提供了對(duì)NAND結(jié)構(gòu)的Flash的支持。
詳解
NOR和NAND是現(xiàn)在市場(chǎng)上兩種主要的非易失閃存技術(shù)。Intel于1988年首先開(kāi)發(fā)出NOR flash技術(shù),徹底改變了原先由EPROM和EEPROM一統(tǒng)天下的局面。緊接著,1989年,東芝公司發(fā)表了NAND flash結(jié)構(gòu),強(qiáng)調(diào)降低每比特的成本,更高的性能,并且象磁盤(pán)一樣可以通過(guò)接口輕松升級(jí)。但是經(jīng)過(guò)了十多年之后,仍然有相當(dāng)多的硬件工程師分不清NOR和NAND閃存。
像“flash存儲(chǔ)器”經(jīng)??梢耘c相“NOR存儲(chǔ)器”互換使用。許多業(yè)內(nèi)人士也搞不清楚NAND閃存技術(shù)相對(duì)于NOR技術(shù)的優(yōu)越之處,因?yàn)榇蠖鄶?shù)情況下閃存只是用來(lái)存儲(chǔ)少量的代碼,這時(shí)NOR閃存更適合一些。而NAND則是高數(shù)據(jù)存儲(chǔ)密度的理想解決方案。
NOR的特點(diǎn)是芯片內(nèi)執(zhí)行(XIP, eXecute In Place),這樣應(yīng)用程序可以直接在flash閃存內(nèi)運(yùn)行,不必再把代碼讀到系統(tǒng)RAM中。NOR的傳輸效率很高,在1~4MB的小容量時(shí)具有很高的成本效益,但是很低的寫(xiě)入和擦除速度大大影響了它的性能。
NAND結(jié)構(gòu)能提供極高的單元密度,可以達(dá)到高存儲(chǔ)密度,并且寫(xiě)入和擦除的速度也很快。應(yīng)用NAND的困難在于flash的管理需要特殊的系統(tǒng)接口。
接口差別
NOR flash帶有SRAM接口,有足夠的地址引腳來(lái)尋址,可以很容易地存取其內(nèi)部的每一個(gè)字節(jié)。
NAND器件使用復(fù)雜的I/O口來(lái)串行地存取數(shù)據(jù),各個(gè)產(chǎn)品或廠商的方法可能各不相同。8個(gè)引腳用來(lái)傳送控制、地址和數(shù)據(jù)信息。
NAND讀和寫(xiě)操作采用512字節(jié)的塊,這一點(diǎn)有點(diǎn)像硬盤(pán)管理此類操作,很自然地,基于NAND的存儲(chǔ)器就可以取代硬盤(pán)或其他塊設(shè)備。
容量成本
NAND flash的單元尺寸幾乎是NOR器件的一半,由于生產(chǎn)過(guò)程更為簡(jiǎn)單,NAND結(jié)構(gòu)可以在給定的模具尺寸內(nèi)提供更高的容量,也就相應(yīng)地降低了價(jià)格。
NOR flash占據(jù)了容量為1~16MB閃存市場(chǎng)的大部分,而NAND flash只是用在8~128MB的產(chǎn)品當(dāng)中,這也說(shuō)明NOR主要應(yīng)用在代碼存儲(chǔ)介質(zhì)中,NAND適合于數(shù)據(jù)存儲(chǔ),NAND在CompactFlash、Secure Digital、PC Cards和MMC(多媒體存儲(chǔ)卡Multi Media Card)存儲(chǔ)卡市場(chǎng)上所占份額最大。
可靠耐用
采用flash介質(zhì)時(shí)一個(gè)需要重點(diǎn)考慮的問(wèn)題是可靠性。對(duì)于需要擴(kuò)展MTBF(平均故障間隔時(shí)間Mean Time Between Failures)的系統(tǒng)來(lái)說(shuō),F(xiàn)lash是非常合適的存儲(chǔ)方案??梢詮膲勖陀眯裕⑽唤粨Q和壞塊處理三個(gè)方面來(lái)比較NOR和NAND的可靠性。
壽命(耐用性)
在NAND閃存中每個(gè)塊的最大擦寫(xiě)次數(shù)是一百萬(wàn)次,而NOR的擦寫(xiě)次數(shù)是十萬(wàn)次。NAND存儲(chǔ)器除了具有10比1的塊擦除周期優(yōu)勢(shì),典型的NAND塊尺寸為NOR器件的八分之一,每個(gè)NAND存儲(chǔ)器塊在給定的時(shí)間內(nèi)的刪除次數(shù)要少一些。
位交換
所有flash器件都受位交換現(xiàn)象的困擾。在某些情況下(很少見(jiàn),NAND發(fā)生的次數(shù)要比NOR多),一個(gè)比特位會(huì)發(fā)生反轉(zhuǎn)或被報(bào)告反轉(zhuǎn)了。
一位的變化可能不很明顯,但是如果發(fā)生在一個(gè)關(guān)鍵文件上,這個(gè)小小的故障可能導(dǎo)致系統(tǒng)停機(jī)。如果只是報(bào)告有問(wèn)題,多讀幾次就可能解決了。
當(dāng)然,如果這個(gè)位真的改變了,就必須采用錯(cuò)誤探測(cè)/錯(cuò)誤更正(EDC/ECC)算法。位反轉(zhuǎn)的問(wèn)題更多見(jiàn)于NAND閃存,NAND的供應(yīng)商建議使用NAND閃存的時(shí)候,同時(shí)使用EDC/ECC算法。
這個(gè)問(wèn)題對(duì)于用NAND存儲(chǔ)多媒體信息時(shí)倒不是致命的。當(dāng)然,如果用本地存儲(chǔ)設(shè)備來(lái)存儲(chǔ)操作系統(tǒng)、配置文件或其他敏感信息時(shí),必須使用EDC/ECC系統(tǒng)以確??煽啃浴?/p>
關(guān)于nor flash燒寫(xiě)失敗的原因
最近在看國(guó)嵌的教學(xué)視頻,在國(guó)嵌體驗(yàn)入門(mén)班-2-1(開(kāi)發(fā)板系統(tǒng)安裝-Jlink方式)一集中,直接燒寫(xiě)nor flash,不進(jìn)行任何配置的方法,能夠成功純屬偶然!在視頻中燒寫(xiě)時(shí)也出現(xiàn)了兩次錯(cuò)誤。
我的開(kāi)發(fā)板是mini2440,如果是其它類型,也可以根據(jù)具體情況參考。
一、解決方案一
1、在網(wǎng)上搜索S3C2440 JLink配置文件下載。
2、點(diǎn)擊file -》 open project,選中下載好的初始化工程文件。
3、點(diǎn)擊option -》 project settings選擇Flash,點(diǎn)擊select flash device。選中開(kāi)發(fā)板對(duì)應(yīng)的nor flash芯片型號(hào),我的板子采用得是SST39VF1601 ,這里我選擇SST39VF1601。具體情況參考用戶手冊(cè)可以查找到Nor Flash芯片型號(hào)。
設(shè)置好前面這些之后,就可以進(jìn)行下面的燒寫(xiě)工作了,通過(guò)這種方式一次燒寫(xiě)成功。
二、解決方案二
1、選擇Options -》 Project Settings -》 CPU -》 ‘Use following init sequence:’中,默認(rèn)只有一行:
0 reset 0 0ms reset and Halt target
然后選中該行,點(diǎn)擊Edit,修改Delay為2ms,確定即可。
三、解決方案三
1、點(diǎn)擊options--》project settings--》CPU,選擇Use following init sequence 中的Action,把 Reset 改成 Halt 也可以。
但是建議大家最好使用第一種方案。
NOR Flash 燒寫(xiě)原理
在對(duì)FLASH進(jìn)行寫(xiě)操作的時(shí)候,每個(gè)BIT可以通過(guò)編程由1變?yōu)?,但不可以有0修改為1。為了保證寫(xiě)操作的正確性,在執(zhí)行寫(xiě)操作前,都要執(zhí)行擦除操作。擦除操作會(huì)把FLASH的一個(gè)SECTOR,一個(gè)BANK或是整片F(xiàn)LASH 的值全修改為0xFF。在寫(xiě)的時(shí)候要注意每個(gè)頁(yè)、扇區(qū)、塊的邊界問(wèn)題。
對(duì)Flash讀寫(xiě)操作流程(W25Q64為例);
1:定義以一個(gè)數(shù)組(全局變量),大小為最小擦除緩存,用來(lái)對(duì)將要擦除區(qū)域數(shù)據(jù)的備份:;
u8 SPI_FLASH_BUF[4096]。
2:定義3個(gè)變量用來(lái)保存扇區(qū)編號(hào)、扇區(qū)偏移地址、扇區(qū)剩余地址;
secpos=WriteAddr/4096;
secoff=WriteAddr%4096;
secremain=4096-secoff;//剩余地址
3:判斷將要寫(xiě)入Flash的數(shù)據(jù)容量大小,數(shù)據(jù)容量小于剩余地址數(shù),表示可以將所有數(shù)據(jù)寫(xiě)入Flash,而沒(méi)有扇區(qū)邊界問(wèn)題;如果超過(guò)地址數(shù)則要在數(shù)據(jù)容量的邊界位置做個(gè)記號(hào)。
if(NumByteToWrite《=secremain)secremain=NumByteToWrite;//判斷
4:將數(shù)據(jù)要寫(xiě)入那個(gè)扇區(qū)的所有數(shù)據(jù)讀出,放到緩存中。
5:從扇區(qū)偏移地址起,檢驗(yàn)即將要寫(xiě)入的扇區(qū),存儲(chǔ)的舊數(shù)據(jù)是否都為1,否就將整個(gè)扇區(qū)擦除,使之全變成1.
6:以扇區(qū)邊界為限,將要寫(xiě)入的數(shù)據(jù)從扇區(qū)偏移地址起存到緩存區(qū)。
7:將緩存區(qū)的數(shù)據(jù)全部寫(xiě)入扇區(qū)(寫(xiě)的時(shí)候還要判斷頁(yè)邊界的問(wèn)題,思路和寫(xiě)扇區(qū)差不多)。
8:判斷數(shù)據(jù)是否全部寫(xiě)入,(如果要寫(xiě)入的數(shù)據(jù)容量超過(guò)剩余地址,則扇區(qū)編號(hào)加1;偏移地址清零;數(shù)據(jù)容量減去之前剩余地址數(shù);修改數(shù)據(jù)容量的地址,把已經(jīng)寫(xiě)入的數(shù)據(jù)過(guò)濾掉;修改即將要寫(xiě)入存儲(chǔ)單元的地址)
9:返回第4步。
結(jié)語(yǔ)
關(guān)于nor flash燒寫(xiě)的相關(guān)介紹就到這了,如有不足之處歡迎指正。
-
FlaSh
+關(guān)注
關(guān)注
10文章
1614瀏覽量
147655 -
存儲(chǔ)器
+關(guān)注
關(guān)注
38文章
7434瀏覽量
163519
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論