本文主要是關(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)注
38文章
7484瀏覽量
163764 -
NOR flash
+關(guān)注
關(guān)注
2文章
90瀏覽量
23003
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論