S3C2410X的NAND flash启动

news/2024/11/17 4:45:55/

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指针调整的代码如下 :

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中开始执行。


http://www.ppmy.cn/news/560894.html

相关文章

杰理AC692X,695X,696X方案NFC音响耳机、故事机

前言 最近发现NFC类的儿童玩具音响耳机产品挺多人做的,尤其是欧洲印度等市场。由于这类产品大部分卖欧美市场,所以国内的线上购物网站我只找到了卢卡音乐盒,凯叔讲故事故事机等。 产品的形态大概就是一个长得比较可爱的音响或者耳机&#x…

简要说明S3C2410X的Nandflash启动模式

由于Norflash相对较高的价格,一般MCU厂商都会通过其他方法在硬件上实现支持Nandflash启动模式。 S3C2410X就是在MCU内部集成4KB被叫作Steppingstone的SRAM,当系统启动时Nandflash前4KB数据就被自动地拷贝到Steppingstone中,然后从Steppingsto…

f1c100s 源码_全志 F1C100S/200S Ucos Kile MDK emwin 408M-ARM9内置DDR 源码

可支持 F1C100S/200S 软硬件定制开发 本商品为-源码例程-价格 买源码送199开发板1块[F1C100S主板 4.3寸480x272LCD RTP] 技术支撑 F1C100S/200S详情: 1. 采用arm9内核,标准运行在408MHZ,可稳固超频到600MHZ,且功耗很低 2. 100S内置32MB-DDR/200S内置64MB-DDR,可以pin-to-pin替…

XOP 网格计划是什么?XOP 的特性

今天的主角,XOP,本名叫:SPDR S&P Oil & Gas Exploration & Production ETF(中译名:油气开采 ETF-SPDR)。是一个可以通过美股账户交易的 ETF(场内基金)。这个基金追踪的是…

STM32详解一startup_stm32f10x_hd_vl(超值类型STM32F100xx)和startup_stm32f10x_hd(大容量的STM32F101xx,STM32F102xx,S)

STM32详解一 转载w282529350 最后发布于2013-12-09 14:31:06 阅读数 8413 收藏 展开 STM32详解1 一、在进入主题之前我们先了解一些必要的基础知识----stm32系列芯片的种类和型号:startup_stm32f10x_cl.s 互联型的器件,STM32F105xx,STM32…

S-函数的编写规则

S-函数使Simulink的功能大大扩充,除Mmatlab外,用户还可以用其他语言(C/C/FORTRAN/Ada)编写实现算法,很强大的同时也对使用者提出了较高的要求。下面是编写S-函数的整个流程: 0 基础知识 (1&…

3500x架构_r5 3500x处理器深度实用评测3500x游戏性能测评

我们之前提到过,它和Core一样6核6线程,最高加速频率也是一样的。因为ZEN2架构每Hz性能更好,所以我们期待锐龙超越Core。 实际测试也证实了这一点。在处理器基准测试中,它在单线程和多线程性能上都优于酷睿,胜率约为10%。在多媒体性能测试中,的物理操作是等效的。两者的压…

大数据——Spark GraphX介绍

一、GraphX介绍 Spark GraphX是一个分布式图处理框架,它是基于Spark平台提供对图计算和图挖掘简洁易用的而丰富的接口,极大的方便了对分布式图处理的需求。 众所周知,社交网络中人与人之间有很多关系链,例如Twitter、Facebook、微…