新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > S3C2410X的NAND flash啟動

        S3C2410X的NAND flash啟動

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

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

        本文引用地址:http://www.104case.com/article/201611/320406.htm

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



        關鍵詞: S3C2410XNANDflash啟

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 东方市| 报价| 博白县| 阿图什市| 海淀区| 鸡泽县| 年辖:市辖区| 三都| 永川市| 新绛县| 林芝县| 原平市| 嘉兴市| 漯河市| 青神县| 东光县| 壶关县| 龙胜| 巴林左旗| 曲周县| 延安市| 南岸区| 靖安县| 鸡泽县| 南部县| 玉环县| 上高县| 德令哈市| 马关县| 淮滨县| 铁岭市| 石泉县| 盘锦市| 绥德县| 盱眙县| 富民县| 屯门区| 原阳县| 叙永县| 剑川县| 霍城县|