本文主要是關(guān)于nor flash的相關(guān)介紹,并著重對(duì)nor flash打開電源方式及原理應(yīng)用進(jìn)行了詳盡的闡述。
nor flash
nor flash是現(xiàn)在市場(chǎng)上兩種主要的非易失閃存技術(shù)之一。Intel于1988年首先開發(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)降低每比特的成本,有更高的性能,并且像磁盤一樣可以通過(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í)具有很高的成本效益,但是很低的寫入和擦除速度大大影響到它的性能。NAND的結(jié)構(gòu)能提供極高的單元密度,可以達(dá)到高存儲(chǔ)密度,并且寫入和擦除的速度也很快。應(yīng)用NAND的困難在于Flash的管理需要特殊的系統(tǒng)接口。通常讀取NOR的速度比NAND稍快一些,而NAND的寫入速度比NOR快很多,在設(shè)計(jì)中應(yīng)該考慮這些情況。
flash閃存是非易失存儲(chǔ)器,可以對(duì)稱為塊的存儲(chǔ)器單元塊進(jìn)行擦寫和再編程。任何flash器件的寫入操作只能在空或已擦除的單元內(nèi)進(jìn)行,所以大多數(shù)情況下,在進(jìn)行寫入操作之前必須先執(zhí)行擦除。NAND器件執(zhí)行擦除操作是十分簡(jiǎn)單的,而NOR則要求在進(jìn)行擦除前先要將目標(biāo)塊內(nèi)所有的位都寫為0。由于擦除NOR器件時(shí)是以64~128KB的塊進(jìn)行的,執(zhí)行一個(gè)寫入/擦除操作的時(shí)間為5s,與此相反,擦除NAND器件是以8~32KB的塊進(jìn)行的,執(zhí)行相同的操作最多只需要4ms。執(zhí)行擦除時(shí)塊尺寸的不同進(jìn)一步拉大了NOR和NAND之間的性能差距,統(tǒng)計(jì)表明,對(duì)于給定的一套寫入操作(尤其是更新小文件時(shí)),更多的擦除操作必須在基于NOR的單元中進(jìn)行。這樣,當(dāng)選擇存儲(chǔ)解決方案時(shí),設(shè)計(jì)師必須權(quán)衡以下的各項(xiàng)因素。l 、NOR的讀速度比NAND稍快一些。2、 NAND的寫入速度比NOR快很多。3 、NAND的4ms擦除速度遠(yuǎn)比NOR的5s快。4 、大多數(shù)寫入操作需要先進(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 flash方式打開電源
flash閃存是非易失存儲(chǔ)器,可以對(duì)稱為塊的存儲(chǔ)器單元塊進(jìn)行擦寫和再編程。任何flash器件的寫入操作只能在空或已擦除的單元內(nèi)進(jìn)行,所以大多數(shù)情況下,在進(jìn)行寫入操作之前必須先執(zhí)行擦除。NAND器件執(zhí)行擦除操作是十分簡(jiǎn)單的,而NOR則要求在進(jìn)行擦除前先要將目標(biāo)塊內(nèi)所有的位都寫為0。
norflash的啟動(dòng)方式
電子產(chǎn)品如果沒(méi)有了電,就跟廢品沒(méi)什么區(qū)別,是電賦予了他們生命,然而程序則是他們的靈魂。
小時(shí)候一直很好奇,一個(gè)個(gè)死板的電子產(chǎn)品為什么一上電以后就能夠工作了呢?為什么一個(gè)小小芯片就能夠運(yùn)行我們編寫的程序呢?一個(gè)開發(fā)板從剛上電到整個(gè)操作系統(tǒng)能夠運(yùn)行起來(lái)是怎么辦到的呢?這些東西困擾了好久,參考了好多資料現(xiàn)在才慢慢弄明白其中一些原理。
我們現(xiàn)在接觸的大多數(shù)電子產(chǎn)品都是使用數(shù)字電路設(shè)計(jì)出來(lái)的,數(shù)字電路的精髓就是兩個(gè)數(shù)字:0和1,這兩個(gè)數(shù)字千變?nèi)f化的組合創(chuàng)造了計(jì)算機(jī)世界的繽紛多彩,不管是cpu、內(nèi)存還是其他外設(shè)都是通過(guò)0和1的變化來(lái)進(jìn)行記錄、交互以及計(jì)算。硬件是怎么操作這兩個(gè)數(shù)字以及這兩個(gè)數(shù)字是怎么控制硬件工作的,這里不進(jìn)行討論,那都是一些二極管、三極管、與非門、信號(hào)放大取樣編碼等等知識(shí),所以這里將對(duì)一個(gè)個(gè)功能完整的芯片,從上電以后,他們通過(guò)電信號(hào)完成各種操作的過(guò)程進(jìn)行解析。如果有玩過(guò)單片機(jī)的同學(xué)應(yīng)該知道,一個(gè)cpu加上一個(gè)電源,然后外接一個(gè)外部晶振就能夠做成一個(gè)最小系統(tǒng)了,單片機(jī)就能夠在他可憐的64k或者128k內(nèi)存中運(yùn)行起來(lái)了,這些簡(jiǎn)單的控制芯片雖然有它的存在價(jià)值,但是它不能滿足日益復(fù)雜的計(jì)算需求,所以需要更快的運(yùn)算速度以及更大的運(yùn)行內(nèi)存,因此我們會(huì)用到更復(fù)雜的處理器,比如mips、arm等。下面將使用arm s3c2440 處理器分析上電啟動(dòng)的過(guò)程。
作為一個(gè)嵌入式產(chǎn)品,它的多樣性讓它更具有可玩性,以及更容易適應(yīng)不同的需求,它不像我們的PC啟動(dòng)方式相對(duì)比較單一(ROM啟動(dòng)),arm啟動(dòng)方式有從norfalsh啟動(dòng)、nandflash啟動(dòng)、SD卡啟動(dòng)和UBS啟動(dòng)等,但是他們的啟動(dòng)原理都是大同小異的。
開始之前,先理清幾個(gè)概念:
SDRAM(Synchronous Dynamic Random Access Memory):同步動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器,同步是指Memory工作需要步時(shí)鐘,內(nèi)部的命令的發(fā)送與數(shù)據(jù)的傳輸都以它為基準(zhǔn);動(dòng)態(tài)是指存儲(chǔ)陣列需要不斷的刷新來(lái)保證數(shù)據(jù)不丟失;隨機(jī)是指數(shù)據(jù)不是線性依次存儲(chǔ),而是由指定地址進(jìn)行數(shù)據(jù)讀寫,簡(jiǎn)單的說(shuō),它就是cpu使用的外部?jī)?nèi)存,即我們常說(shuō)的內(nèi)存條。
SRAM是英文Static RAM的縮寫,它是一種具有靜止存取功能的內(nèi)存,不需要刷新電路即能保存它內(nèi)部存儲(chǔ)的數(shù)據(jù),速度比SDRAM快,一般用作高速緩沖存儲(chǔ)器(Cache)。
norflash:非易失閃存,是一種外部存儲(chǔ)介質(zhì),芯片內(nèi)執(zhí)行(XIP,eXecute In Place),這樣應(yīng)用程序可以直接在flash閃存內(nèi)運(yùn)行,不必再把代碼讀到系統(tǒng)RAM中,由于它有地址總線,cpu可以直接從norflash中取指,直接從FLASH中運(yùn)行程序,但是工藝復(fù)雜,價(jià)格比較貴,容量較小(1~4M),NOR的傳輸效率很高
nandflash:它也是非易失閃存(掉電不丟失)的一種,但是它雖然有數(shù)據(jù)總線,但是沒(méi)有地址總線,所以cpu不能直接從nandflash中取指運(yùn)行,由于它價(jià)格便宜,所以常常用來(lái)存儲(chǔ)大量數(shù)據(jù),和我們常說(shuō)的硬盤類似。
下面將解析nandflash啟動(dòng)和norflash啟動(dòng)兩種方式(arm s3c2440),其他啟動(dòng)方式將在uboot代碼部分分析。
一、 Nandflash啟動(dòng)
首先必須把一個(gè)正確的bootload燒寫到nandflash的最低位置,即從0x000開始燒寫。當(dāng)我們選擇從nandflash啟動(dòng)開發(fā)板的時(shí)候,開發(fā)板就會(huì)啟動(dòng)連接nandflash的電路結(jié)構(gòu),當(dāng)開發(fā)板一上電的時(shí)候,Nand Flash控制器會(huì)自動(dòng)的把Nand Flash上的前4K數(shù)據(jù)搬移到CPU的內(nèi)部RAM中(SRAM-cache),這個(gè)內(nèi)部RAM我們通常稱作stepping stone,同時(shí)把這段片內(nèi)SRAM映射到nGCS0片選的空間(即0x00000000),CPU從內(nèi)部RAM的0x00000000位置開始啟動(dòng)(執(zhí)行),這個(gè)過(guò)程不需要程序干涉的。
這個(gè)過(guò)程就是啟動(dòng)過(guò)程的stage1,它將nandflash的前4看內(nèi)容拷貝到stepping stone中,然后從stepping stone的第一條指令開始執(zhí)行,這4k內(nèi)容里面的指令將會(huì)完成以下幾個(gè)動(dòng)作:
1.硬件設(shè)備初始化
2. 加載U-Boot第二階段代碼到SDRAM空間
3. 設(shè)置好棧
4. 跳轉(zhuǎn)到第二階段stage2代碼入口
從下圖我們可以看到,板子重置以后,內(nèi)存的映射關(guān)系。從圖中可以看到以下幾點(diǎn):
1.剛開始bank0~bank5是只能映射SROM的,而bank6和bank7才能夠接SDRM,而且每個(gè)bank最大接128M的SDRM,所以決定了S3C2440的最大可外接SDRAM是256M;
2.從圖中我們可以看到bank6的起始地址是0x3000_0000, 所以我們?cè)趫?zhí)行stage1的第二個(gè)動(dòng)作(加載U-Boot第二階段代碼到SDRAM空間)時(shí),需要將uboot代碼放到0x3000_000~0x4000_0000區(qū)間內(nèi)(SDRAM內(nèi)),才能從SDRAM中正常執(zhí)行stage2;
3.當(dāng)沒(méi)有選擇從nandflash啟動(dòng)時(shí),Boot internal SRAM(4k)的起始地址是0x4000_0000, 當(dāng)選擇從nandflash啟動(dòng)時(shí),Boot internal SRAM(4k)的起始地址是0x00, 因?yàn)槲覀兊拈_發(fā)板沒(méi)有外接SROM,所以bank1~bank5都是空閑的,而bank0的位置將被Boot internal SRAM(4k)替代,也就是說(shuō)bank0的前4k就是stepping stone(起步石),板子上電以后,在nandflash的啟動(dòng)模式下,S3C2440在硬件上會(huì)完成下圖中的地址映射,并自動(dòng)將nandflash中的前4k拷貝到stepping stone中,并從stepping stone的開始地址(0x00)獲取到第一條指令并執(zhí)行。
經(jīng)過(guò)上面的分析后,我們可以將上面兩圖合并成下圖所示:
前面說(shuō)了nandflash啟動(dòng)過(guò)程中第一個(gè)代碼搬移,下面將解析第二個(gè)代碼搬移,這4k代碼首先會(huì)設(shè)置cpu運(yùn)行模式,關(guān)看門狗,設(shè)置時(shí)鐘,關(guān)中斷,初始化內(nèi)存,初始化nandflash,設(shè)置堆棧,然后將整個(gè)bootload搬運(yùn)到SDRAM中,并跳轉(zhuǎn)到SDRAM中執(zhí)行。
基本過(guò)程如下圖所示:
關(guān)于4k代碼的執(zhí)行過(guò)程將會(huì)在后面詳細(xì)解釋,而且在新的uboot-2015中,這4k代碼是由uboot_spl.bin完成的,下面將基于uboot-2015.10 列出uboot從上電到啟動(dòng)內(nèi)核的整個(gè)過(guò)程進(jìn)行概述:
二、norflash啟動(dòng)
其實(shí)理解了nandflash的啟動(dòng)方式,norflash的啟動(dòng)也就好理解多了,首先需要知道的是norflash是可以在片上執(zhí)行代碼(XIP)的,也就是說(shuō),我們只需要將bootload燒寫到norflash的開始地址,當(dāng)開發(fā)板上電以后,從內(nèi)存映射圖可以知道,nor flash會(huì)被映射到0x00000000地址(就是nGCS0,這里就不需要片內(nèi)SRAM來(lái)輔助了,所以片內(nèi)SRAM的起始地址還是0x40000000,不會(huì)改變),然后cpu從0x00000000開始執(zhí)行(也就是在Norfalsh中執(zhí)行)整個(gè)uboot,直到引導(dǎo)內(nèi)核啟動(dòng)。
從norflash啟動(dòng)可以省事多了,不僅如此,我們自己編寫的裸機(jī)程序需要調(diào)試,一般也是直接燒寫到norflash中進(jìn)行的,因?yàn)橹灰覀儗⒕幾g好的可執(zhí)行文件放到norflash的開始,開發(fā)板上電以后就會(huì)從norflash的第一條指令開始取指執(zhí)行,我們后面寫裸機(jī)程序的調(diào)試就是用這種方式進(jìn)行的。
從norflash啟動(dòng)雖然從開發(fā)的角度會(huì)很方便(其實(shí)也方便不了多少),但是從產(chǎn)品的角度卻增加了它的成本,畢竟norflash還是相對(duì)較貴的,我們明明只要一塊nandflash就足夠啟動(dòng)整個(gè)開發(fā)板了,就沒(méi)必要在產(chǎn)品中添加一塊norflash了,只要代碼改改就能省下不少成本,何樂(lè)不為。而且nandflash對(duì)產(chǎn)品是必不可少的,因?yàn)楹竺孢€要存放內(nèi)核和文件系統(tǒng),起碼需要幾十兆的空間,用norflash來(lái)存儲(chǔ)也不現(xiàn)實(shí)。
也許你會(huì)想,能不能只用norflash,不用nandflash和SDRAM行不行呢,畢竟norflash即可以存儲(chǔ),也可以運(yùn)行程序的啊,從理論來(lái)說(shuō)是可以的,但是了解一下他們的市場(chǎng)價(jià)格、運(yùn)行速度和工作原理,應(yīng)該就會(huì)知道答案了。
結(jié)語(yǔ)
關(guān)于nor flash的相關(guān)介紹就到這了,如有不足之處歡迎指正。
-
存儲(chǔ)器
+關(guān)注
關(guān)注
39文章
7739瀏覽量
171681 -
NOR flash
+關(guān)注
關(guān)注
2文章
104瀏覽量
23894
發(fā)布評(píng)論請(qǐng)先 登錄
什么是串行Nor Flash?串行Nor Flash的結(jié)構(gòu)和參數(shù)特性
NAND Flash和NOR Flash的差別
NAND FLASH與NOR FLASH的技術(shù)對(duì)比
旺宏并行串行NOR Flash對(duì)比參考指南
nand nor flash區(qū)別
NOR FLASH的原理及應(yīng)用
NOR Flash供需持續(xù)緊張,中芯長(zhǎng)電搶奪NOR Flash測(cè)試設(shè)備訂單
NAND Flash與NOR Flash的區(qū)別
NOR falsh、NAND flash、SDEMMC、QSPI flash、SPI flash
NOR Flash和NAND FLASH的區(qū)別是什么
NAND Flash和NOR Flash的區(qū)別
什么是nor flash方式打開電源 淺談nor flash原理及應(yīng)用
評(píng)論