從NAND閃存中啟動U-BOOT的設計
發(fā)布時間:2008/5/26 0:00:00 訪問次數:634
    
    
    來源:電子設計應用 作者:南昌大學信息工程學院 劉曄 汪燦華 范靜輝
    
    摘 要:本文介紹了s3c2410中nand閃存的工作原理,分析了從nand閃存啟動u-boot的設計思路,并著重描述了nand閃存支持u-boot的程序設計,移植后u-boot在嵌入式系統(tǒng)中運行良好。
    關鍵詞:u-boot;nand閃存;s3c2410;嵌入式系統(tǒng)
    
    引言
    隨著嵌入式系統(tǒng)的日趨復雜,它對大容量數據存儲的需求越來越緊迫。而嵌入式設備低功耗、小體積以及低成本的要求,使硬盤無法得到廣泛的應用。nand閃存設備就是為了滿足這種需求而迅速發(fā)展起來的。目前關于u-boot的移植解決方案主要面向的是微處理器中的nor 閃存,如果能在微處理器上的nand 閃存中實現(xiàn)u-boot的啟動,則會給實際應用帶來極大的方便。
    
    u-boot簡介
    u-boot 支持arm、 powerpc等多種架構的處理器,也支持linux、netbsd和vxworks等多種操作系統(tǒng),主要用來開發(fā)嵌入式系統(tǒng)初始化代碼bootloader。bootloader是芯片復位后進入操作系統(tǒng)之前執(zhí)行的一段代碼,完成由硬件啟動到操作系統(tǒng)啟動的過渡,為運行操作系統(tǒng)提供基本的運行環(huán)境,如初始化cpu、堆棧、初始化存儲器系統(tǒng)等,其功能類似于pc機的bios。
    
    nand閃存工作原理
    s3c2410開發(fā)板的nand閃存由nand閃存控制器(集成在s3c2410 cpu中)和nand閃存芯片(k9f1208u0a)兩大部分組成。當要訪問nand閃存芯片中的數據時,必須通過nand閃存控制器發(fā)送命令才能完成。所以, nand閃存相當于s3c2410的一個外設,而不位于它的內存地址區(qū)。
    
    nand閃存(k9f1208u0a)的數據存儲結構分層為:1設備(device) = 4096 塊(block);1塊= 32頁/行(page/row);1頁= 528b = 數據塊 (512b) + oob塊 (16b)
    在每一頁中,最后16個字節(jié)(又稱oob)在nand閃存命令執(zhí)行完畢后設置狀態(tài),剩余512個字節(jié)又分為前半部分和后半部分?梢酝ㄟ^nand閃存命令00h/01h/50h分別對前半部、后半部、oob進行定位,通過nand閃存內置的指針指向各自的首地址。
    nand閃存的操作特點為:擦除操作的最小單位是塊;nand閃存芯片每一位只能從1變?yōu)?,而不能從0變?yōu)?,所以在對其進行寫入操作之前一定要將相應塊擦除;oob部分的第6字節(jié)為壞快標志,即如果不是壞塊該值為ff,否則為壞塊;除oob第6字節(jié)外,通常用oob的前3個字節(jié)存放nand閃存的硬件ecc(校驗寄存器)碼;
    
    從nand閃存啟動u-boot的設計思路
    如果s3c2410被配置成從nand閃存啟動,上電后,s3c2410的nand閃存控制器會自動把nand閃存中的前4k數據搬移到內部ram中, 并把0x00000000設置為內部ram的起始地址, cpu從內部ram的0x00000000位置開始啟動。因此要把最核心的啟動程序放在nand閃存的前4k中。
    
    由于nand閃存控制器從nand閃存中搬移到內部ram的代碼是有限的,所以, 在啟動代碼的前4k里,必須完成s3c2410的核心配置,并把啟動代碼的剩余部分搬到ram中運行。在u-boot中, 前4k完成的主要工作就是u-boot啟動的第一個階段(stage1)。
    根據u-boot的執(zhí)行流程圖,可知要實現(xiàn)從nand閃存中啟動u-boot,首先需要初始化nand閃存,并從nand閃存中把u-boot搬移到ram中,最后需要讓u-boot支持nand閃存的命令操作。
    
    開發(fā)環(huán)境
    本設計中目標板硬件環(huán)境如下:cpu為s3c2410,sdram為hy57v561620,nand閃存為64mb的k9f1208u0a。
    
    主機軟件環(huán)境為redhat9.0、 u-boot-1.1.3、gcc 2.95.3。修改u-boot的makefile,加入:
    wch2410_config : unconfig
    @./mkconfig $(@:_config=) arm arm920t wch2410 null s3c24x0
    
    即將開發(fā)板起名為wch2410,接下來依次進行如下操作:
    mkdir board/wch2410
    cp board/smdk2410 board/wch2410
    mv smdk2410.c wch2410.c
    cp include/co
    
    
    來源:電子設計應用 作者:南昌大學信息工程學院 劉曄 汪燦華 范靜輝
    
    摘 要:本文介紹了s3c2410中nand閃存的工作原理,分析了從nand閃存啟動u-boot的設計思路,并著重描述了nand閃存支持u-boot的程序設計,移植后u-boot在嵌入式系統(tǒng)中運行良好。
    關鍵詞:u-boot;nand閃存;s3c2410;嵌入式系統(tǒng)
    
    引言
    隨著嵌入式系統(tǒng)的日趨復雜,它對大容量數據存儲的需求越來越緊迫。而嵌入式設備低功耗、小體積以及低成本的要求,使硬盤無法得到廣泛的應用。nand閃存設備就是為了滿足這種需求而迅速發(fā)展起來的。目前關于u-boot的移植解決方案主要面向的是微處理器中的nor 閃存,如果能在微處理器上的nand 閃存中實現(xiàn)u-boot的啟動,則會給實際應用帶來極大的方便。
    
    u-boot簡介
    u-boot 支持arm、 powerpc等多種架構的處理器,也支持linux、netbsd和vxworks等多種操作系統(tǒng),主要用來開發(fā)嵌入式系統(tǒng)初始化代碼bootloader。bootloader是芯片復位后進入操作系統(tǒng)之前執(zhí)行的一段代碼,完成由硬件啟動到操作系統(tǒng)啟動的過渡,為運行操作系統(tǒng)提供基本的運行環(huán)境,如初始化cpu、堆棧、初始化存儲器系統(tǒng)等,其功能類似于pc機的bios。
    
    nand閃存工作原理
    s3c2410開發(fā)板的nand閃存由nand閃存控制器(集成在s3c2410 cpu中)和nand閃存芯片(k9f1208u0a)兩大部分組成。當要訪問nand閃存芯片中的數據時,必須通過nand閃存控制器發(fā)送命令才能完成。所以, nand閃存相當于s3c2410的一個外設,而不位于它的內存地址區(qū)。
    
    nand閃存(k9f1208u0a)的數據存儲結構分層為:1設備(device) = 4096 塊(block);1塊= 32頁/行(page/row);1頁= 528b = 數據塊 (512b) + oob塊 (16b)
    在每一頁中,最后16個字節(jié)(又稱oob)在nand閃存命令執(zhí)行完畢后設置狀態(tài),剩余512個字節(jié)又分為前半部分和后半部分?梢酝ㄟ^nand閃存命令00h/01h/50h分別對前半部、后半部、oob進行定位,通過nand閃存內置的指針指向各自的首地址。
    nand閃存的操作特點為:擦除操作的最小單位是塊;nand閃存芯片每一位只能從1變?yōu)?,而不能從0變?yōu)?,所以在對其進行寫入操作之前一定要將相應塊擦除;oob部分的第6字節(jié)為壞快標志,即如果不是壞塊該值為ff,否則為壞塊;除oob第6字節(jié)外,通常用oob的前3個字節(jié)存放nand閃存的硬件ecc(校驗寄存器)碼;
    
    從nand閃存啟動u-boot的設計思路
    如果s3c2410被配置成從nand閃存啟動,上電后,s3c2410的nand閃存控制器會自動把nand閃存中的前4k數據搬移到內部ram中, 并把0x00000000設置為內部ram的起始地址, cpu從內部ram的0x00000000位置開始啟動。因此要把最核心的啟動程序放在nand閃存的前4k中。
    
    由于nand閃存控制器從nand閃存中搬移到內部ram的代碼是有限的,所以, 在啟動代碼的前4k里,必須完成s3c2410的核心配置,并把啟動代碼的剩余部分搬到ram中運行。在u-boot中, 前4k完成的主要工作就是u-boot啟動的第一個階段(stage1)。
    根據u-boot的執(zhí)行流程圖,可知要實現(xiàn)從nand閃存中啟動u-boot,首先需要初始化nand閃存,并從nand閃存中把u-boot搬移到ram中,最后需要讓u-boot支持nand閃存的命令操作。
    
    開發(fā)環(huán)境
    本設計中目標板硬件環(huán)境如下:cpu為s3c2410,sdram為hy57v561620,nand閃存為64mb的k9f1208u0a。
    
    主機軟件環(huán)境為redhat9.0、 u-boot-1.1.3、gcc 2.95.3。修改u-boot的makefile,加入:
    wch2410_config : unconfig
    @./mkconfig $(@:_config=) arm arm920t wch2410 null s3c24x0
    
    即將開發(fā)板起名為wch2410,接下來依次進行如下操作:
    mkdir board/wch2410
    cp board/smdk2410 board/wch2410
    mv smdk2410.c wch2410.c
    cp include/co