首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 驱动开发 >

ARM上电后如何执行的

2012-03-25 
ARM上电后怎么执行的昨天面试,问我ARM启动流程,我说首先从地址0x0开始执行,然后那哥们马上打断我,说从开通

ARM上电后怎么执行的
昨天面试,问我ARM启动流程,我说首先从地址0x0开始执行,然后那哥们马上打断我,说从开通电源到执行0x0还有一些步骤是什么,我本来就没做过boot移植,凭借我的经验和这两天看的书才知道首先从0x0地址开始执行,突然被他那么一问,我被唬住了。当时也就瞎扯了什么程序放在flash中,执行要拷贝到内存中执行。
接着哥们又提了一个问题,说flash需要驱动识别,你刚开始启动的时候驱动程序都没有,怎么能够从flash读取数据呢?我想想也是啊(我的头脑转不出来了),但是还好我知道内存条是不需要驱动支持就能识别的。

回来查了资料,还是有2点没搞明白,希望知道的人指点指点。
1.arm的开始执行地址是0x0,但是执行设备如nor flash, rom等等是需要指定的,我想知道是在什么地方或者什么环节指定的?

2.flash没有驱动不能识别,那是相当于os的吧,开始启动的时候,arm是不是读flash的端口就能取到存储flash上的数据/指令呢?

[解决办法]
可以查看下irom启动方面资料就明白了
[解决办法]
1,硬件实现。记得有一款开发板是通过跳线来区别nor flash和nand flash的。
2,记得有书上说过,nand flash的前4k拷贝是通过硬件实现的。即会自动拷贝前4k内容。当然了,前4k只是Bootloader的第一阶段而已。
[解决办法]
1)开机后,ARM有两种启动方式,一种是直接从0地址的NOR FLASH开始启动;一种是先将NAND FLASH中前4K的内容拷贝到内部4K的RAM(起步石)中运行;
2)使得有上述两种不同启动方式的原因是:人为使芯片上OM0,1管脚的电平不同;
3)硬件实现的拷贝或自举,不需要软件进行干预,所以就不需要所谓的驱动程序。
[解决办法]

探讨

可以查看下irom启动方面资料就明白了

[解决办法]
人为使芯片上OM0,1管脚的电平不同

还有 你看arm 接 nandflash 那一章 有硬件的接法确定 了 nand 的特性 比如是 几位的 大页 还 小页等等


这些都是硬件确定的
[解决办法]
强烈建议楼主读读bootloader的启动流程,还有1楼所说的IROM的启动流程。现在ARM11支持irom启动,别的启动方式都是间接从IROM启动的。
[解决办法]
每家的处理器芯片都有一个指定的上电过程,这个过程是必须follow的,不正确的上电过程可能会引发问题,其中以GPIO错误输出比较常见。
上电完毕到RESET起来期间,XTAL开始跑了,这需要一段时间才有稳定的输出。内部硬件逻辑会将所有的寄存器初始化到复位态。所以外部复位器件给的RESET信号应该足够的长以保证电源、晶振的状态稳定并且寄存器初始化能够完成。
寄存器初始化结束的一个标志是RESET_OUT从未定义态到平稳的低电平输出。

[解决办法]
必须要知道的是,所有的处理器PC指针复位值都会是0,所以一定会在0地址开始执行代码。
这个0地址是个很讲究的东西。可以出现在0地址的东西通常有下面几种:
1. 片内的SRAM
2. 外部总线上的NOR FLASH
3. 片内固化的ROM CODE。每个厂家都会给ROM CODE起个名字,比如三星管这个叫IROM
那么怎么知道map哪个呢,这种情况下CPU还没开始跑,所以只能依赖于硬件逻辑。一般的做法是通过一些外部的管脚来配置,三星平台管这个叫OM。通过这部分的配置,芯片内部逻辑确定将什么东东map过去。
将SRAM map到0地址是ARM9时代的做法,那时候天是那么的蓝,水是那么的清,NAND FLASH启动扇区不需要ECC。复位起来的第一件事情就是NAND CONTROLLER将启动扇区COPY到SRAM内,然后CPU开始执行。其它两种方式没有这种COPY的动作。
然后,CPU从0地址开始执行代码。
因为NAND是个很容易丢数据的东西,NAND启动方式有很大的问题。因为NAND CONTROLLER在COPY启动代码时不带ECC,常见的问题是数据异常导致启动失败。所以现在这种方法不再使用了。
NOR启动,没什么好说了,大家都很了解。
引入ROM CODE启动方式主要是为了支持各种启动设备,包括各种ECC的NAND,各种串口,各种USB口,各种SD卡,各种拍脑袋想到的东东。有了ROM CODE作为跳板,就很容易发挥想象力了。


[解决办法]
为啥我回的贴纸会有非法字符捏

热点排行