官术网_书友最值得收藏!

4.1 NAND FLASH控制器

在S3C2410上電后,NAND FLASH控制器會自動的把NAND FLASH上的前4kB數(shù)據(jù)搬移到4kB內(nèi)部RAM中,并把0x00000000設(shè)置內(nèi)部RAM的起始地址,CPU從內(nèi)部RAM的0x00000000位置開始啟動,在這個(gè)過程不需要程序干涉。而程序員需要完成的工作是把最核心的啟動程序放在NAND FLASH的前4kB中。

以往將U-BOOT移植到ARM9平臺中的解決方案主要針對的是ARM9中的NOR閃存,因?yàn)镹OR閃存的結(jié)構(gòu)特點(diǎn)使應(yīng)用程序可以直接在其內(nèi)部運(yùn)行,不用把代碼讀到RAM中,所以移植過程相對簡單。

4.1.1 NOR FLASH和NAND FLASH比較

NOR和NAND是現(xiàn)在市場上兩種主要的非易失閃存技術(shù)。NOR FLASH指線性存儲器,通過線性、連續(xù)的地址進(jìn)行尋址;NAND FLASH指非線性存儲器,通過非線性、不連續(xù)的地址進(jìn)行尋址。

(1)應(yīng)用

大多數(shù)情況下用NOR FLASH可以存儲少量代碼,而NAND FLASH則是高數(shù)據(jù)存儲密度較為理想的解決方案。NOR的特點(diǎn)是芯片內(nèi)執(zhí)行,應(yīng)用程序可以直接在FLASH閃存內(nèi)運(yùn)行,不必再把代碼讀到系統(tǒng)RAM中。

(2)讀寫速度

NAND的寫入和擦除的速度較快,應(yīng)用NAND的困難在于FLASH的管理和需要特殊的系統(tǒng)接口。NOR的傳輸效率很高,但是很低的寫入和擦除速度大大影響了它的性能。NOR的讀速度比NAND稍快一些,但NAND的寫入速度比NOR快很多。

(3)接口性質(zhì)

NOR FLASH帶有SRAM接口,有足夠的地址引腳來尋址,可以很容易地存取其內(nèi)部的每一個(gè)字節(jié)。NAND FLASH沒有采取內(nèi)存的隨機(jī)讀取技術(shù),它的讀取是以一次讀取一塊的形式來進(jìn)行的,通常是一次讀取512個(gè)字節(jié),與硬盤管理有些類似。

(4)容量與成本

NOR FLASH占據(jù)了容量為1~16MB閃存市場的大部分,而NAND FLASH只是用在8~128MB的產(chǎn)品當(dāng)中。NAND FLASH比NOR FLASH廉價(jià)。

4.1.2 S3C2410 NAND FLASH控制器

由于NOR FLASH存儲器的價(jià)格比較昂貴,而SDRAM和NAND FLASH存儲器的價(jià)格相對比較合適。因而嵌入式開發(fā)者希望從NAND FLASH啟動和引導(dǎo)系統(tǒng),并在SDRAM上執(zhí)行主程序代碼。S3C2410實(shí)現(xiàn)了從NOR FLASH及NAND FLASH上執(zhí)行引導(dǎo)程序。為了支持從NAND FLASH的系統(tǒng)引導(dǎo),S3C2410具有一個(gè)內(nèi)部SDRAM緩沖器。當(dāng)系統(tǒng)啟動時(shí),引導(dǎo)代碼需要將NAND FLASH中的程序內(nèi)容拷貝到SDRAM中,然后系統(tǒng)自動執(zhí)行這些載入的引導(dǎo)代碼。從NAND FLASH啟動要通過引腳OM[1:0]進(jìn)行選擇,當(dāng)選擇OM[1:0]=00時(shí),處理器通過NAND FLASH啟動;OM[1:0]=01或10時(shí),處理器分別通過16位、32位NOR FLASH啟動。圖4.1所示是S3C2410 NAND FLASH控制器的方塊電路圖。

圖4.1 S3C2410 NAND FLASH控制器的方塊電路圖

4.1.3 NAND FLASH啟動過程

S3C2410支持從NAND FLASH引導(dǎo)系統(tǒng),這是通過內(nèi)置的SRAM(Synchronous Dynamic Random Access Memory:同步動態(tài)隨機(jī)存儲器)及自動引導(dǎo)控制邏輯實(shí)現(xiàn)的,當(dāng)系統(tǒng)啟動時(shí),NAND FLASH存儲器的前4KB將被自動加載到內(nèi)部緩沖區(qū)(又稱為Steppingstone)中,然后系統(tǒng)自動執(zhí)行這些載入的啟動代碼。使用這4KB代碼來把更多的代碼從NAND FLASH中讀到SDRAM中去,然后執(zhí)行SDRAM中的指令,實(shí)現(xiàn)系統(tǒng)的引導(dǎo)。這4KB的程序一般實(shí)現(xiàn)CPU、GPIO、Memory、Clock、Watchdog、Uart等的初始化。

1. NAND FLASH自動引導(dǎo)過程

(1)復(fù)位完成;

(2)NAND FLASH的前4KB被拷到內(nèi)部SDRAM;

(3)SDRAM被映射到GCS0(BANK0);

(4)CPU從內(nèi)部SDRAM開始執(zhí)行程序。

2. NAND FLASH操作過程

NAND FLASH的操作通過NFCONF、NFCMD、NFADDR、NFDATA、NFSTAT和NFECC這六個(gè)寄存器來完成,具體操作步驟如下:

(1)配制NAND FLASH控制寄存器NFCONF;

(2)寫NAND FLASH命令到NFCMD寄存器;

(3)寫NAND FLASH地址到NFADDR寄存器;

(4)通過NFSTAT寄存器檢查NAND FLASH狀態(tài)實(shí)現(xiàn)讀/寫操作。

4.1.4 NAND FLASH存儲器接口

圖4.2是NAND FLASH存儲器接口示意圖,其引腳分別與S3C2410微處理器引腳相連。

圖4.2 是NAND FLASH存儲器接口

在圖4.2中,NAND FLASH的管腳配置如下:

DATA[7:0] :數(shù)據(jù)/命令/地址/的輸入/輸出口(與數(shù)據(jù)總線共享)

CLE:命令鎖存使能(輸出)

ALE:地址鎖存使能(輸出)

nFCE :NAND FLASH片選使能(輸出)

nFRE :NAND FLASH讀使能(輸出)

nFWE :NAND FLASH寫使能(輸出)

R/nB : NAND FLASH準(zhǔn)備好/繁忙(輸入)

S3C2410的存儲控制器提供訪問外部存儲器所需要的存儲器控制信號,支持?jǐn)?shù)據(jù)存儲的大、小端模式,將存儲空間分成8組。因而S3C2410的內(nèi)存片選有8個(gè)片選(BANK),在U-BOOT中,要配制SDRAM和FLASH的BANK數(shù),如果SDRAM或者FLASH就接了n個(gè)片選的時(shí)候,就定義為n,如n為8,即BANK8。圖4.3是S3C2410的內(nèi)存映射圖,S3C2410和其他的大部分的處理器一樣,支持NOR FLASH和NAND FLASH啟動,而這兩種啟動方式內(nèi)存所映射的地址不相同。

圖4.3 啟動方式與內(nèi)存映射的地址關(guān)系

在圖4.3中BANK6、BANK7對應(yīng)的地址空間與BANK0—BANK5不同。BANK0—BANK5的地址空間都是固定的128M,地址范圍是(x*128M)到(x+1)*128M-1, x表示0到5。但是BANK7的起始地址是可變的,您可以查找S3C2410數(shù)據(jù)手冊第5章,獲取BANK6、BANK7的地址范圍與地址空間的關(guān)系。

4.1.5 NAND FLASH寄存器參數(shù)描述

1. NAND FLASH寄存器概述

前面已經(jīng)談到,NAND FLASH的操作通過設(shè)置NFCONF、NFCMD、NFADDR、NFDATA、NFSTAT和NFECC這六個(gè)寄存器來完成。下面首先討論NAND FLASH這些寄存器的一些性質(zhì),這對嵌入式程序設(shè)計(jì)至關(guān)重要,表4.1列出了NAND FLASH相關(guān)寄存器的地址、讀寫情況與功能的描述。其中:

NFCONF是NAND FLASH的配置寄存器;

NFCMD是NAND FLASH命令寄存器,CPU通過此寄存器向NAND FLASH傳遞控制命令;

NFADDR是NAND FLASH地址寄存器,CPU通過此寄存器向NAND FLASH傳遞地址;

NFDATA是NAND FLASH數(shù)據(jù)寄存器,CPU通過此寄存器向NAND FLASH傳遞數(shù)據(jù);

NFSTAT是NAND FLASH狀態(tài)寄存器,CPU通過讀取該寄存器獲取NAND FLASH當(dāng)前狀態(tài);

NFECC是NAND FLASH ECC寄存器,實(shí)現(xiàn)循環(huán)校驗(yàn)功能。

表4.1 NAND FLASH相關(guān)寄存器

在NAND FLASH的程序設(shè)計(jì)中通過下列宏進(jìn)行地址映射:

      #define rNFCONF   (*(volatile unsigned *)0x4e000000)  //NAND FLASH
  configuration
      #define rNFCMD   (*(volatile unsigned *)0x4e000004) //NADD FLASH command
      #define rNFADDR   (*(volatile unsigned *)0x4e000008) //NAND FLASH address
      #define rNFDATA   (*(volatile unsigned *)0x4e00000c) //NAND FLASH data
      #define  rNFSTAT  (*(volatile unsigned *)0x4e000010)  //NAND FLASH
  operation status
      #define rNFECC   (*(volatile unsigned *)0x4e000014)  //NAND FLASH ECC

2. NAND FLASH相關(guān)寄存器設(shè)置及應(yīng)用

(1)NFCONF寄存器

NFCONF寄存器的地址是0x4e000000,表4.2所示是NFCONF寄存器屬性值設(shè)置,相對應(yīng)位的默認(rèn)值、功能設(shè)置位的表示。

表4.2 NFCONF寄存器屬性值設(shè)置

注意:需要指出的是TACLS、TWRPH0和TWRPH1,請讀者參考S3C2410數(shù)據(jù)手冊,可以看到這三個(gè)參數(shù)控制的是NAND FLASH信號線命令鎖存CLE、地址鎖存ALE與寫控制信號nWE的時(shí)序關(guān)系。設(shè)上述值為TACLS=0, TWRPH0=3, TWRPH1=0,其含義為:TACLS=1個(gè)HCLK時(shí)鐘,TWRPH0=4個(gè)HCLK時(shí)鐘,TWRPH1=1個(gè)HCLK時(shí)鐘。

NAND FLASH需要初始化,在一般情況下要使NAND FLASH使能,使用ECC校驗(yàn),[15:12]設(shè)置為0b1111;內(nèi)存片選使能,持續(xù)時(shí)間=HCLK*(設(shè)定值+1)中設(shè)定值為0,即CLE和ALE持續(xù)時(shí)間設(shè)置為HCLK,因而[11:8]=0b1000;設(shè)TWRPH0設(shè)定值為3,即位[7:4]設(shè)置為0b0011,如果把TWRPH1值設(shè)為0,即把NFCONF初始化為0b1111100000110000,即0xF830。

例如:NAND FLASH在使用時(shí)應(yīng)把第11位設(shè)置為0,支持NAND FLASH使能,只需對0x800取反即可,此時(shí)有:

      NFCONF & = ~0x800;

當(dāng)禁用NAND FLASH時(shí),應(yīng)把第11位設(shè)置為1,可以用以下語句:

      NFCONF | = 0x800;

(2)NFCMD寄存器

NAND FLASH的命令寄存器NFCMD的地址是0x4e000004,表4.3所示是NFCMD寄存器屬性值設(shè)置,相對應(yīng)位的默認(rèn)值、功能設(shè)置位的表示。NFCMD寄存器中,對于不同型號的FLASH,操作命令一般不同。

表4.3 NAND FLASH命令寄存器NFCMD

例如:

      NFCONF & = ~(1<<11)   //第11位為0, nFCF為低電平,發(fā)出片選信號
      NFCMD = 0xff    //在K9F1208U0M存儲器中表示reset命令

(3)NFADDR寄存器

NAND FLASH地址寄存器NFADDR的地址是0x4e000008,表4.4所示是NFADDR寄存器屬性值設(shè)置,相對應(yīng)位的默認(rèn)值、功能設(shè)置位的表示。

表4.4 NAND FLASH地址寄存器NFADDR

      例如:
     NFADDR = addr & 0xff   //獲取第1個(gè)字節(jié)的地址
     NFADDR = ( addr >> 9 ) & 0xff   //獲取第2個(gè)字節(jié)的地址

(4)NFDATA寄存器

NAND FLASH數(shù)據(jù)寄存器NFDATA的地址是0x4e00000c,表4.5所示是NFDATA寄存器屬性值設(shè)置,相對應(yīng)位的默認(rèn)值、功能設(shè)置位的表示。

表4.5 NAND FLASH數(shù)據(jù)寄存器NFDATA

[7:0]存儲Nand FLASH的讀出數(shù)據(jù)或者編程數(shù)據(jù),寫操作時(shí)存放編程數(shù)據(jù),讀操作時(shí)存放讀出數(shù)據(jù)。

(5)NFSTAT寄存器

NAND FLASH狀態(tài)寄存器NFSTAT地址是0x4e000010,表4.6所示是狀態(tài)寄存器NFSTAT屬性值設(shè)置及相對應(yīng)位的初始值表示。

表4.6 狀態(tài)寄存器NFSTAT

(6)ECC寄存器

NAND FLASH ECC寄存器NFECC的地址是0x4e000014,表4.7所示為ECC寄存器位功能與設(shè)置描述。

表4.7 ECC寄存器

主站蜘蛛池模板: 绍兴市| 全州县| 衡阳县| 常山县| 富阳市| 开江县| 维西| 昌图县| 武川县| 左云县| 四会市| 繁峙县| 石嘴山市| 措勤县| 盘锦市| 丰城市| 扶绥县| 安平县| 安阳市| 东明县| 古丈县| 北海市| 开鲁县| 五家渠市| 桐梓县| 阳江市| 佛坪县| 安图县| 大连市| 灌南县| 荔浦县| 牙克石市| 郯城县| 阳高县| 天柱县| 临沂市| 黔东| 广东省| 黔东| 通州市| 永城市|