- 嵌入式系統(tǒng)設(shè)計(jì)與實(shí)踐:Linux篇
- 季江民
- 2653字
- 2020-04-03 09:21:47
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寄存器

- 單片機(jī)應(yīng)用項(xiàng)目化教程
- 嵌入式Linux接口開發(fā)技術(shù)
- DSP技術(shù)與應(yīng)用實(shí)例
- 單片機(jī)原理與應(yīng)用:基于Keil+Proteus
- 嵌入式軟件自動化測試
- PIC單片機(jī)常用模塊與綜合系統(tǒng)設(shè)計(jì)實(shí)例精講
- 單片機(jī)應(yīng)用技術(shù)實(shí)訓(xùn)指導(dǎo)
- 計(jì)算機(jī)與嵌入式系統(tǒng)架構(gòu)
- 嵌入式系統(tǒng)與Qt程序開發(fā)
- 單片機(jī)技術(shù)及應(yīng)用(第2版)
- 基于Quartus II的FPGA/CPLD設(shè)計(jì)實(shí)例精解
- 零基礎(chǔ)學(xué)西門子S7- 200 SMART PLC編程及應(yīng)用
- 單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)技術(shù)
- ARM嵌入式處理器及應(yīng)用
- GD32 MCU原理及固件庫開發(fā)指南