您的位置 首页 嵌入式

arm上电后的第一条指令

类似的文章网上很多了,大都以软件分析为主,从U-boot到kernel。很多文章的分析也是非常详细以及精辟的。在这里,不想多说软件的机制,那样…

相似的文章网上许多了,大都以软件剖析为主,从U-boot到kernel。许多文章的剖析也是十分详细以及精辟的。在这儿,不想多说软件的机制,那样的时机留给我们吧。

记住07-08年一次去华为面试,主考官问了一些nand flash的操作的事宜,也算还好,没有太多刁难。面试成果仍是没有被选取,这儿有许多要素,有自己的,也有对方的。记住在面试的时分考官问了一个问题,flash的读写。还很详细的指了nand的操作。后来快面试完毕的时分我问了考官一个问题:软件能够经过读写操控寄存器,或是把指令碑文在data-bus上来模仿操控指令(理论上能够碑文)。可是在还没有任何初始化外设(SDRAM,DRAM,RAM)的情况下,哪里的代码能够操作nand flash这样的设备。应为这样的设备,是要运用指令来操控flash的行为的。这样的状况也便是上电那一倒茶,到mpu的榜首条指令的开端当地,是怎么过渡的。(留意:nand,cf-card,usb-storage不是仅有的掉电非易失的存储元器件,还有arm-xxx片内的rom和ram)

带着这样的问题看了许多材料,不乏芯片手册等等。现在在omap的板子上总算找到答案来验证自己的主意。所以想把它写下来。

话说这样的rom很不被人们注重,在开发进程中往往考虑两种要素:本钱,开发周期。

本钱清楚明了,64M的换32M的,32M的换16M的,比起flash的操作,这儿仍是比较敬服broadcom的工程师竟然能够把image操控在2M之内。

开发周期更清楚明了,sdk包,处理方案悉数选用ralink的。Demo板拿来直接调试就好了。很少有人会去关注上电之初flash的操作。那么,为什么没有一个完好的文档阐明完结硬件劳动的进程呢?我也不知道。

看了mpc860的用户手册,上面提及了一个概念HC。(HARDWARE COPY)。这样的HC是硬件完结的,那么硬件的逻辑是否便是和软件相同呢?再去看看了fpga的规划丛书,答案完全能够。硬件完全能够模仿软件的指令。这儿有所不同的是软件是开发人员,要求cpu这么去做的。可是硬件是什么人物?这个人物能够这样以为:在软件无法触及的范畴,替代了部分软件(开发人员的逻辑)。这样的逻辑往往是单一,简练的。说了半天,开端剖析发动进程。

榜首:概念

Rom ram sdram flash这些概念我们都不陌生了。也不解说相关的电器特性。只需知道相关操作特性:

ram能够经过地址直接拜访。读写像sdram,掉电易失。直接经过队伍地址译码。找到存储单元。而且把存储单元中的内容回来在数据线上。地址和数据线能够复用。

可是flash这样的设备,不是这样,特别是spi和nand类型的。直接给出的地址无法作用到数据线上。想要得到设备上的详细数据有必要经过指令的方法来完结:read +操作的设备地址;write + 操作设备的地址。数据线用于传输数据,指令线用于传输数据。复用的地址线经过锁存来一共读或者是写操作。

留意:这些设备的数据线和指令线是否复用,要看详细的datasheet。

第二:原因

CPU的行为只要两种:1取指令2运算。那么确保在某一时间cpu获得指令是正确的,这便是最重要的工作。确保在32位并行拜访时分得到的数据是正确的,而且这上电之初在设备(能够进行直接地址拜访)中的数据便是boot的代码。

第三:处理

假如CPU在上电之初能够拜访片内的ram。而且ram中的内容便是存储boot的代码的设备中一部分内容。这样cpu就能够顺畅的碑文指令了。

那么是什么把flash的内容劳动到片内的ram上呢?这就使上面提及的硬件替代了部分软件的逻辑。这样的逻辑往往是简略的。便是从flash上劳动。劳动到哪里?片内的ram。

在omap的芯片上片内的ram坐落0x40200000 ~ 0x4020ffff。Flash坐落(GPMC)总线的接口上。在u-boot下运用简略的指令来比较一下flash中榜首个page中的二进制内容,和ram中的内容,是否相同。

1中显现的nand dump指令下page 0 offset 0的内容

2中显现的是x-load用UE打开端显现的二进制内容

图3中显现的是片内的ram中偏移量为0x800地址开端的内容

如上三图所示flash,ram中的内容是相同的。和ram中的内容作比较出了字节序不相同,其实内容都相同。那么为什么在偏移量的0x800的内容开端时相同的?这便是CPU上电今后的榜首条指令了。要求在这个方位。这个方位和外设电路的(boot电路)组织相关。这个发动地址能够挑选,可是开关的行为由外设电路决议。详细开发板要看详细的datasheet。软件上也能够操控,在编译的最终阶段,有衔接脚本中指出偏移量。再有ld解析后组装成能够运转的image。

这样一来就能够看出来,上电后,并不是boot代码在运转。而是有其他的机制确保了代码出现在有用地上。然后CPU到事前按排好的地址去取指并碑文。这就使所谓的HC,硬件劳动。在artmel系列的开发板上还有称之为“step stone”的概念。便是寄存flash里面前4k的代码的ram。详细的记不太清楚了,曾经有一次遇到过32M的flash。往往在较大容量的flash上,前面的4k或是64k的拜访方法上存在差异。有的遵从CFI规范,有的则是JEDC的规范。看芯片的规划而定。不光是软件的规划依照这些规范,硬件的逻辑规划也要分量这样的标志。

其实上电指出还有cpu的clock也是很重要的要素。有时机再聊聊这个clock和PLL。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/264493.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部