0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

關(guān)于nor flash燒寫(xiě)失敗的原因

ss ? 作者:工程師譚軍 ? 2018-09-19 08:51 ? 次閱讀

本文主要是關(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)介紹就到這了,如有不足之處歡迎指正。

相關(guān)閱讀推薦:NAND flash和NOR flash的區(qū)別詳解

相關(guān)閱讀推薦:詳細(xì)剖析NorFlash和NandFlash的區(qū)別

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FlaSh
    +關(guān)注

    關(guān)注

    10

    文章

    1614

    瀏覽量

    147655
  • 存儲(chǔ)器
    +關(guān)注

    關(guān)注

    38

    文章

    7434

    瀏覽量

    163519
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32寫(xiě)失敗錯(cuò)誤的處理方法

    STM32寫(xiě)失敗錯(cuò)誤:Contents mismatch at: 08000000H (Flash=FFH Required=00H)
    的頭像 發(fā)表于 06-21 08:55 ?1.3w次閱讀
    STM32<b class='flag-5'>燒</b><b class='flag-5'>寫(xiě)</b><b class='flag-5'>失敗</b>錯(cuò)誤的處理方法

    如何確定u-boot.bin在nor flash上的寫(xiě)地址?

    Warrior TAP +USB的方式寫(xiě),Code Warrior 10.5.1開(kāi)發(fā)環(huán)境下有RDB板上nor flash的配置信息(P10xx-P20xxRDB_P2020_
    發(fā)表于 06-08 11:42

    jlink寫(xiě)nor flash失敗

    我按照步驟 :1. 準(zhǔn)備工作: JLink 的 USB 口接到電腦上, JLink 的 JTAG 口用排線和開(kāi)發(fā)板的 JTAG 口相連,開(kāi)發(fā)板設(shè)為 Nor Flash 啟動(dòng)并上電2. 啟動(dòng)
    發(fā)表于 04-01 07:45

    如何使用jlink寫(xiě)代碼到nor flash___frank?

    請(qǐng)下載附件,附件的說(shuō)明非常詳細(xì)。1.文檔目的用jlink工具寫(xiě)裸機(jī)代碼或者uboot到nor flash2.工具說(shuō)明由于jlink只能
    發(fā)表于 08-08 03:59

    請(qǐng)問(wèn)NOR FLASH寫(xiě)一定要把2440開(kāi)關(guān)撥至NOR進(jìn)行寫(xiě)才可以嗎?

    大家好,我這里想請(qǐng)教一個(gè)問(wèn)題,寫(xiě)裸板程序到NOR時(shí),一定需要把2440開(kāi)關(guān)撥至NOR進(jìn)行寫(xiě)
    發(fā)表于 09-03 04:36

    rk356x maskrom寫(xiě)過(guò)程或寫(xiě)后出現(xiàn)異常的主要原因及辦法分析

    1、rk3566/rk3568 寫(xiě)異常問(wèn)題rk356x maskrom寫(xiě)過(guò)程或寫(xiě)后出現(xiàn)異常的主要
    發(fā)表于 06-09 16:03

    基于CCS的DSP片外Flash直接寫(xiě)設(shè)計(jì)

    基于CCS的DSP片外Flash直接寫(xiě)設(shè)計(jì) 自加載后DSP能夠正常運(yùn)行,關(guān)鍵是Flash中原程序代碼的正確
    發(fā)表于 10-04 09:41 ?3280次閱讀
    基于CCS的DSP片外<b class='flag-5'>Flash</b>直接<b class='flag-5'>燒</b><b class='flag-5'>寫(xiě)</b>設(shè)計(jì)

    FPGA配置– 使用JTAG是如何寫(xiě)SPI/BPI Flash的?

    Xilinx的JTAG電纜可以通過(guò)FPGA“直接”寫(xiě)SPI/BPI。很多對(duì)xilinx開(kāi)發(fā)環(huán)境不熟悉的用戶,如果第一次接觸這種寫(xiě)模式可能會(huì)有疑惑,F(xiàn)PGA是如何做到JTAG和
    發(fā)表于 02-08 02:40 ?7980次閱讀
    FPGA配置– 使用JTAG是如何<b class='flag-5'>燒</b><b class='flag-5'>寫(xiě)</b>SPI/BPI <b class='flag-5'>Flash</b>的?

    使用JTAG寫(xiě)Nand Flash實(shí)驗(yàn)解析

    4.4 實(shí)驗(yàn)內(nèi)容使用JTAG寫(xiě)Nand Flash 1.實(shí)驗(yàn)?zāi)康?通過(guò)使用JTAG寫(xiě)Flash
    發(fā)表于 10-18 17:03 ?6次下載
    使用JTAG<b class='flag-5'>燒</b><b class='flag-5'>寫(xiě)</b>Nand <b class='flag-5'>Flash</b>實(shí)驗(yàn)解析

    CCS的DSP片外Flash直接寫(xiě)設(shè)計(jì)

    CCS的DSP片外Flash直接寫(xiě)設(shè)計(jì)
    發(fā)表于 10-20 08:29 ?3次下載
    CCS的DSP片外<b class='flag-5'>Flash</b>直接<b class='flag-5'>燒</b><b class='flag-5'>寫(xiě)</b>設(shè)計(jì)

    如何采用DATA進(jìn)行Flash的在線寫(xiě)

    自加載后DSP能夠正常運(yùn)行,關(guān)鍵是Flash中原程序代碼的正確寫(xiě)。CCS編譯生成的.out格式文件不能直接用于Flash
    的頭像 發(fā)表于 02-06 08:51 ?3554次閱讀
    如何采用DATA進(jìn)行<b class='flag-5'>Flash</b>的在線<b class='flag-5'>燒</b><b class='flag-5'>寫(xiě)</b>

    Jlink使用技巧之寫(xiě)SPI Flash存儲(chǔ)芯片

    大多數(shù)玩單片機(jī)的人都知道Jlink可以寫(xiě)Hex文件,作為ARM仿真調(diào)試器,但是知道能寫(xiě)SPI Flash的人應(yīng)該不多,本篇文章將介紹如何
    發(fā)表于 01-26 18:37 ?4次下載
    Jlink使用技巧之<b class='flag-5'>燒</b><b class='flag-5'>寫(xiě)</b>SPI <b class='flag-5'>Flash</b>存儲(chǔ)芯片

    可供用戶修改的FLASH寫(xiě)驅(qū)動(dòng)介紹

    為方便客戶針對(duì) S698 芯片外接不同種類的 FLASH 進(jìn)行在線編程。V8mon 的 FLASH 提供源碼寫(xiě)可以進(jìn)行用戶自行修改。FLASH
    發(fā)表于 06-08 14:39 ?0次下載
    可供用戶修改的<b class='flag-5'>FLASH</b><b class='flag-5'>燒</b><b class='flag-5'>寫(xiě)</b>驅(qū)動(dòng)介紹

    Segger J-Flash寫(xiě)遇到特定區(qū)域內(nèi)校驗(yàn)失敗的問(wèn)題

    最近在支持一個(gè)i.MX RT1170歐美客戶,客戶項(xiàng)目里選用了來(lái)自Micron的四線NOR Flash - MT25QL256ABA8E12-0AAT作為啟動(dòng)設(shè)備,一般讀寫(xiě)倒是沒(méi)有問(wèn)題,但是在 Segger J-Flash
    的頭像 發(fā)表于 10-27 09:02 ?4986次閱讀

    一個(gè)關(guān)于Segger J-Flash在Micron Flash固定區(qū)域下載校驗(yàn)失敗的故事

    接下來(lái)就是按客戶操作流程來(lái)復(fù)現(xiàn) Segger J-Flash 寫(xiě)校驗(yàn)失敗問(wèn)題,客戶其實(shí)是嘗試寫(xiě)全部 32MB 數(shù)據(jù)來(lái)查看 J-
    的頭像 發(fā)表于 11-01 11:28 ?946次閱讀