微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM9启动分析存储器区分和启动流程解析

ARM9启动分析存储器区分和启动流程解析

时间:11-19 来源:互联网 点击:
最近遇到一个大大的问题,其实以前都一直有问题,但是我没有去深究过!主要是我自己想来弄点新东西,打算用J-link烧写ARM9的处理器,如果能够将j-link的强大调试功能也移到arm9上,那将是一件多么美妙的事情啊。就带着这个问题我一直看资料,最开始我是有两块开发板的,具体点说是三块。但是我当初只用了一块的时候,我没发现什么问题。我当时就是按照别人给我的说明书上进行操作的,也没有去理解和分析为什么!但是最近因为有了那个打算,就发现问题了。我在一块板子上用H-JTAG可以进行烧写,在另外一块上也可以,但是都有一个共同点就是,两块板子都是arm9的(分别是S3C2410和S3C2440),同样我在实际应用中还用到了LPC2478.用J-link来调试和烧写ARM7是件很简单的事情。我想我都具备了这么多条件应该很容易就可以用j-link来烧写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,难怪问题一直解决不了!!其实就是没有好好的去总结自己所看到的东西!做产品设计还真的是要脱了几层皮你的东西才能过关!!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top