s3c2440的nandflash启动

s3c2440的nandflash启动

ID:34725617

大小:77.68 KB

页数:6页

时间:2019-03-10

s3c2440的nandflash启动_第1页
s3c2440的nandflash启动_第2页
s3c2440的nandflash启动_第3页
s3c2440的nandflash启动_第4页
s3c2440的nandflash启动_第5页
资源描述:

《s3c2440的nandflash启动》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、上文介绍了s3c2440对nandflash的基本操作,其中提到了s3c2440具有nandflash自启动的功能,本文就详细介绍该功能的实现方法。        nandflash由于其自身的特点,不具备运行程序的功能。但s3c2440通过称为“Steppingstone”的内部SRAM缓存,实现了可以运行存储在外部nandflash中的启动代码的功能。它的机制是:当检测到是由nandflash启动时,系统会自动把nandflash中的前4k字节的数据加载到Steppingstone中,然后把该Steppingstone映射为Bank0,因此系统会从Stepp

2、ingstone开始运行程序,从而实现了s3c2440的nandflash自启动的功能。这一过程是由系统自动完成的,无需人为干预。在系统启动以后,Steppingstone所在的SRAM就可以用作其他用途了。 但有人可能会问,如果我的程序很大,超过了4k字节,那是不是就不能利用s3c2440的这个功能了呀?因为Steppingstone只有4k字节大小,也就是程序运行的最大长度只能为4k字节,4k字节以外的内容就运行不到了。这个疑问的答案当然是否定的。我们可以通过在Steppingstone中,把程序的其余部分复制到RAM中,程序运行时由Steppingston

3、e转移到该RAM中,从而就解决了上述难题。一般来说,在启动代码的前4k字节里,要完成s3c2440的核心配置,而把启动代码的剩余部分搬到RAM中运行。        下面我们就介绍一下如何实现上述的功能。        在本博客的第一篇文章中,我们介绍了s3c2440的启动代码,其中有下面这段代码: ……   ……;下面的代码为把ROM中的数据复制到RAM中ldr   r0,=BWSCONldr   r0,[r0]ands   r0,r0,#6          ;读取OM[1:0]引脚状态;为0表示从NANDFlash启动,不为0则从NORFlash启动bne

4、copy_proc_beg        ;跳转,不用读取NANDFlashadr  r0,ResetEntry       ;OM[1:0]==0,从NANDFlash启动cmp   r0,#0               ;ifuseMulti-ice,bne  copy_proc_beg     ;donotreadnandflashforboot;nop;===========================================================nand_boot_beg[{TRUE}bl   RdNF2SDRAM     ;复

5、制NANDFlash到SDRAM]ldr   pc,  =copy_proc_beg;===========================================================copy_proc_begadr  r0,  ResetEntry……   …… 上面这段代码是nandflash自启动的关键所在,我们在这里再详细讲解一下。前三条语句用于读取寄存器BWSCON的第1位和第2位,当这两位都为0时,表示的是nandflash启动,否则为norflash启动。如果不为0,则跳到copy_proc_beg处开始执行。如果为0,则继续执

6、行下面三条语句:adr  r0,ResetEntrycmp   r0,#0bne  copy_proc_beg这三条语句的作用是判断当前是否是在仿真的情况下运行的程序。如果是在仿真的情况下,则跳到copy_proc_beg处开始执行,否则开始执行nand_boot_beg处的语句。RdNF2SDRAM是由C语言所撰写的一段程序,它完成了上面我们介绍的把nandflash中的程序复制到SRAM中的功能。我们再来整理一下什么时候执行RdNF2SDRAM程序:必须具备两个条件,一为由nandflash启动,二为不是在仿真的情况下,只有这两个条件都满足时才开始复制nan

7、dflash程序。ldr  pc,  =copy_proc_beg语句这段程序的重点,这时候我们已经把所有的程序都复制到了SRAM中了,而在执行这条语句之前(包括这条语句)程序都是在Steppingstone中运行,那么接下来的程序是继续在Steppingstone中运行呢,还是在我们刚刚复制完程序的SRAM中运行呢?当然是在SRAM中运行!这样才能避免我们上面所提到的程序大于4k字节时遇到的问题。而如何从Steppingstone跳到SRAM呢?靠得就是这条语句——ldr  pc,  =copy_proc_beg,它把copy_proc_beg的绝对地址赋予p

8、c,由于程序已经复制到了

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。