ARM9启动分析存储器区分和启动流程解析
首先,理清几个概念。NOR flash:(概念最用我自己的语言概括了)是早期的flash,存储量少,存储速度慢,但是执行速度快,可以在flash上执行。可以用来存储代码和作为SDRAM。NAND flash :是用来做海量存储的,一般用来存储数据,文件系统等,烧写速度快。SDRAM :动态存储器,用来进行数据存储,数据刷新,和代码执行。但是不能存储代码。要理解SDRAM和NOR flash的区别,NOR flash是可以用来做为SDRAM,但是不是SDRAM。
我们开始讨论代码存放的地方了,注意的是我在这里给代码加一个限制,(是固化的程序,区别开linux系统文件和bootlooder,我在这里定义bootlooder为程序而linux文件系统为数据)。代码有很多存放的方式,一、存储在单片机的flash上,像ARM7一类的单片机(LPC2478就带有512k的flash)。二、存放在NOR flash中,就是是SDRAM中(如果是SDRAM的芯片就没法存储了如有的开发板用的是HY57V641620 SDRAM芯片,代码是没法存储的)三、存放在NAND flash中,一般的代码都存放在NAND flash中在。
还需要知道的知识就是,存储器的地址映射,下面我们看一种方式的地址映射。代码存放在NAND flash中,用SDRAM的芯片做为动态存储的例子:如下图:
看到这个图,我们是否发现了理解了一点点启动流程了啊?如果还有疑问让我们再来分析一下S3C2440的存储控制模块,实际就是存储地图。如下图所示:
解释下上图,有多种启动方式的,一种是利用NAND flash启动。一种是不用,不用的方式就是直接用SROM(S就是动态的存储空间,其实就是NOR flash)。重点介绍利用NAND flash启动的流程。
大家看到的是通过M[10]=00的方式设置启动方式为用NAND flash启动的方式,S3C2440内部有一个4K的SRAM。这个是芯片自带的。为了支持NAND flash起动,S3C2410内建了内部的4k的SRAM缓存“Steppingstone”。当起动时,NAND flash最初的4k字节将被读入”Steppingstone”然后开始执行起动代码。通常起动代码会把NAND flash中的内容拷到SDRAM中以便执行主代码。注意boot过程是要设置成autoboot的,是通过硬件来设置的。在复位和上电启动过程都要经过这样的一个启动过程,这是最初一步的启动过程。下面就是在通过bootlooder的代码设置系统时钟和初始化寄存器等一系列的工作,在完成后通过跳转指令跳转到系统引导阶段。完成启动。最近还移植了一个最新的u-boot,支持的东西还是挺多的。对这个整体了解也有了一些加深。
在我理解了这么多了后,后来我就解决了那个问题,我的错误是没认真分析,我一直在用j-link flasher烧写SDRAM,难怪问题一直解决不了!!其实就是没有好好的去总结自己所看到的东西!做产品设计还真的是要脱了几层皮你的东西才能过关!!
ARM9启动分析存储器区分启动流 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)