新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > S3C2410X的NAND flash啟動(dòng)

S3C2410X的NAND flash啟動(dòng)

作者: 時(shí)間:2016-11-23 來(lái)源:網(wǎng)絡(luò) 收藏
S3C2410X有兩種啟動(dòng)方式:NOR flash啟動(dòng)NAND flash啟動(dòng)。NOR flash啟動(dòng):NOR flash可以象SDRAM那樣隨機(jī)讀取,且讀取速度快,不但可以存儲(chǔ)程序,還可以運(yùn)行程序。上電復(fù)位時(shí),NOR flash被映射到地址0x0處,程序就可以從NOR flash中的第一條語(yǔ)句開(kāi)始執(zhí)行。程序即可以在NORflash運(yùn)行,也可以復(fù)制到SDRAM中運(yùn)行。NAND flash啟動(dòng):NAND flash容量大、價(jià)格低,廣泛應(yīng)用于嵌入式系統(tǒng)中。S3C2410X集成了NAND flash控制器,可方便編程。但是,NAND flash隨機(jī)讀取速度慢,需專(zhuān)用I/O接口,只能存儲(chǔ)程序,無(wú)法運(yùn)行程序。為了能夠從NAND flash啟動(dòng),上電復(fù)位時(shí),S3C2410X通過(guò)硬件邏輯把NAND flash的前4KB的內(nèi)容復(fù)制到片內(nèi)SRAM中,而片內(nèi)SRAM被映射到地址0x0,這樣就可以從地址0x0處取到有效指令。因此,采用NAND flash啟動(dòng)時(shí),必須利用片內(nèi)SRAM中的代碼把NAND flash中的程序代碼復(fù)制到SDRAM中去。

這里,筆者參考了引導(dǎo)裝入程序(Bootloader)的方式,把代碼分成兩部分,第一部分作為引導(dǎo)代碼,包括ARM所要求的連續(xù)8個(gè)字的中斷向量表。它主要負(fù)責(zé)把NAND flash中的程序代碼復(fù)制到SDRAM中,其代碼遠(yuǎn)小于4KB。第二部分是應(yīng)用程序。調(diào)試時(shí)可分別單獨(dú)調(diào)試,互不影響。調(diào)試完成后,分別燒寫(xiě),引導(dǎo)代碼的RO_Base設(shè)置為0x0,燒寫(xiě)到NANDflash的第0塊。第二部分應(yīng)用程序的RO_Base設(shè)置為0x3000,0000,燒寫(xiě)到NAND flash第一塊開(kāi)始的地址空間。上電復(fù)位時(shí),引導(dǎo)代碼由硬件邏輯復(fù)制到片內(nèi)SRAM中,于是,ARM所要求的連續(xù)8個(gè)字的中斷向量表就位于0x0地址開(kāi)始的連續(xù)空間內(nèi)。接著從第一條指令開(kāi)始執(zhí)行,除了一些必要的初始化以及設(shè)置中斷向量表,它把NAND flash中第一塊開(kāi)始的程序代碼復(fù)制到起始地址為0x3000,0000的SDRAM中。地址0x3000,0000既是RO_Base的地址,也是SDRAM在整個(gè)地址空間的起始地址。復(fù)制完成后,引導(dǎo)代碼也該結(jié)束退出了,退出之前需調(diào)整PC指針,為了簡(jiǎn)單起見(jiàn),把PC指針直接調(diào)整到地址0x3000,0000,即從應(yīng)用程序的啟動(dòng)代碼開(kāi)始執(zhí)行。需要注意的是,引導(dǎo)代碼把中斷向量表復(fù)制到SDRAM中_ISR_StartAddress處即地址0x30ffffff,而應(yīng)用程序的啟動(dòng)代碼也把中斷向量表復(fù)制到SDRAM中同一地址_ISR_StartAddress處。這樣,當(dāng)異常發(fā)生時(shí),PC指針首先跳到地址0x0開(kāi)始8個(gè)字的異常向量
表,這是在片內(nèi)SRAM的引導(dǎo)代碼里。接著,跳到SDRAM中的中斷向量表,這是在應(yīng)用程序里,然后轉(zhuǎn)到中斷處理程序,PC指針的跳轉(zhuǎn)跨越了兩部分程序。引導(dǎo)代碼和應(yīng)用程序在存儲(chǔ)空間和NAND flash的分布情況如圖所示。實(shí)現(xiàn)復(fù)制和PC指針調(diào)整的代碼如下 :

本文引用地址:http://m.butianyuan.cn/article/201611/320406.htm

IMPORT nand_read_ll ;引入外部C函數(shù)
ldr r0, =SDRAM_Base_Address ;r0指向SDRAM的基地址,即地址0x3000,0000
mov r1, =APP_Start_ Address ;r1指向NAND_flash中應(yīng)用程序的開(kāi)始地址;即第1塊的開(kāi)始地址
mov r2, =APP_End_ Address ;r2指向NAND_flash中應(yīng)用程序的結(jié)束地址
bl nand_read_ll ;調(diào)用復(fù)制函數(shù)開(kāi)始復(fù)制
ldr r12, =SDRAM_Base_Address
mov pc, r12 ;pc指向SDRAM的基地址;引導(dǎo)代碼到此結(jié)束,接著從應(yīng)用程序啟動(dòng)代碼的第一條語(yǔ)句開(kāi)始執(zhí)行。
同樣道理,NOR flash啟動(dòng)也可以采用這種方式,不同的是,引導(dǎo)代碼在NOR flash中,它把NOR flash中的程序代碼復(fù)制到SDRAM中,然后,也是跳到SDRAM中開(kāi)始執(zhí)行。



關(guān)鍵詞: S3C2410XNANDflash啟

評(píng)論


技術(shù)專(zhuān)區(qū)

關(guān)閉