历史上的今天
返回首页

历史上的今天

今天是:2025年02月12日(星期三)

正在发生

2020年02月12日 | ARM 启动过程

2020-02-12 来源:eefocus

    对于一般的嵌入式系统来讲,考虑到系统成本,运行速度等因素,往往联合使用好几种存储器件。在下面讲到的例子中,是我在开发中用到的一个 ARM9EJ 的处理器,系统中采用了SDRAM, ROM, Nand FLASH, ITCM ,DTCM 等。

   
    SDRAM: 程序正常运行时所在的存储器, 物理地址 0x24000000 - 0x24800000 (以8M 为例);
    ROM:   复位后, ARM 从 ROM 启动, ROM 是只读的,出厂时就烧好了,不可更改,正常运行时,物理地址:
            0x2C000000 - 0x2C006000 (24KB);
    Nand FLASH: 外接存储器件,正常运行的程序会通过烧录工具先放在这里。也可以做为用户的数据存储区,通过文件系统来访问。


    ITCM, DTCM: 类似与 SDRAM ,但是速度比 SDRAM 快很多,当进行大量,繁琐,且实时性要求较高的运算时,使用该存储。


    从开机,即对处理器发送一个 RESET 信号后, ARM 处理器就进入中断模式,从中断向量 RESET 处理,即地址0x00000000 处开始执行。但是,我们看到,整个系统在物理地址 0 处是没有存储器件的。实际上是, 对与大多数的ARM处理器来讲,有一个硬件映射的机制。对与这个处理器来说,开始时,默认将 ROM (0x2C000000 - 0x2C006000) 映射到地址零处,注意,此动作是由硬件达成的,软件不用考虑。此时,送到地址总线的地址是 0x00000000, 但是对应的却是ROM 中offset 为0处的代码。 看看ROM 中代码是怎么考虑的:

    .section .boot                  #1
    __RESET_ADDR:
 /* Move PC to ROM address */
  LDR PC, =0x2C000024            #2
 /* Hardward init */
 BL  __HARDWARD_INIT          

 /* Detect SDRAM size */
 BL  __SDRAM_DETECT

 /* SDRAM init */
 BL  __SDRAM_INIT

 /* Data section init */
 BL  __DATA_INIT                #3


 /* BSS section init */
 BL  __BSS_INIT                 #4
 
 /* ARM mode stacks init */
 BL  __STACK_INIT               #5


 /* Enter C code */
 B __MMU_START_MAIN              #6
    
    需要注意的是上面标出来的6个地方,下面分别解释:
    #1
    GCC 会把以下的代码放到 .boot 段中,通过 ld 中对 .boot 的安排,可将该段放在指定的地址空间,参见后面的 ld 描述;
    
    #2
    此处将 PC 指针赋值为 0x2C000024, 通过对这个 .boot 段进行反汇编,可以看到该地址对应 
    BL  __HARDWARD_INIT, 就是该条指令的下一条。 此时,物理地址 0x00000024 和 0x2C000024 都对应这条指令,这是由于重映射机制造成的。通过,执行 
    LDR PC, =0x2C000024, 使得处理器的地址空间从原来的 0x0000000 变到 0x2C000000 ,这是必要的。其一: ROM 本身就对应在 0x2C000000 这个地址空间,恢复到此空间是很自然的。其二:为后面的重映射做准备。因为ROM 的运行速度没有 SDRAM 快,所以通常把程序加载到 SDRAM 中运行,由于中断向量的在 0x00000000 处,所以需要把 SDRAM 映射到 0 地址去,这也是硬件映射的。如果不做这种转换的话,当进行了硬件映射后,两条指令就接不上了,上一条指令是 0x0000xxxx, 位于 ROM 中,下一条指令 0x0000xxxy 为与SDRAM ,会接着从 SDRAM 中执行,很容易出问题。
    
    #3
    此处做数据段的初始化的,数据段是可读可写的。所以必须把数据段搬到 SDRAM 中去,方可使用。该数据段的 LMA 和  VMA 是不同的,通过在 ld 中加上标签,可以得知从哪儿搬数据,要搬到那儿去。

    #4
    做BSS 段初始话,一般清0。 值得注意的是,对于初始化为 0 的全局变量,可能会放在这里。

    #5
    初始化,各个模式下的堆栈。

    #6
    启动MMU,进入main 函数。      

    由于 ROM 中空间有限,上面在 ROM 中代码不可能做更多动作。 一般我们把自己编写程序生成 arm 代码放在 Nand Flash 中。在 ROM 中的程序进入main 后,就会通过nand driver 将存在nand 中的code 读到 SDRAM 中,然后做硬件重映射,将 SDRAM 映射到地址 0 处, 然后在 SDRAM 中跑。 对于 ARM 的 bootload 来将,做的就是这个工作。

推荐阅读

史海拾趣

GHI Electronics公司的发展小趣事

为了满足不同客户的多样化需求,GHI Electronics不断拓展其产品线。除了传统的电子元件和模块外,公司还开始涉足智能家居、物联网等新兴领域。通过不断引入新技术、新产品,GHI Electronics成功实现了从单一产品向多元化产品线的转变。这种转变不仅丰富了公司的产品线结构,也提高了公司的综合竞争力。

倍思特(BEST)公司的发展小趣事

GHI Electronics深知技术创新是企业持续发展的关键。因此,公司不断加大研发投入,致力于开发具有自主知识产权的产品。其中,ARM微控制器、显示模块、空气质量传感器、模块化系统以及微处理器等主打产品系列,凭借其卓越的性能和稳定的品质,在消费电子、便携设备、通讯/网络等领域获得了广泛应用。这些技术创新不仅巩固了GHI Electronics在市场上的领先地位,也为其未来的发展奠定了坚实的基础。

Akustica(Bosch)公司的发展小趣事

GHI Electronics公司成立于2003年,总部位于美国密歇根州。公司自创立之初便明确了其使命:为客户提供咨询、制造和解决方案,以降低风险、成本和复杂性。这一清晰的定位使得GHI Electronics能够迅速在电子工程和制造领域站稳脚跟。随着市场需求的不断变化,GHI Electronics不断调整和优化其服务内容,逐渐赢得了客户的信任和市场的认可。

Electro Technik Industries公司的发展小趣事

随着电子技术的快速发展,ETI意识到只有不断创新才能在竞争中立于不败之地。公司加大了对研发的投入,积极引进国内外先进技术,并鼓励员工提出创新性的想法。在一次偶然的实验中,ETI的研发团队成功研发出了一种具有高效能、低功耗特点的电子元器件,这一突破性的技术成果迅速获得了市场的认可,为ETI带来了可观的收益。

Acopian Power Supplies公司的发展小趣事

为了扩大市场份额,ETI开始积极寻求国际合作。公司先后与多家国际知名企业建立了战略合作关系,共同研发新产品、开拓市场。同时,ETI还积极参加国际电子展览会,展示公司的技术实力和产品优势,吸引了众多客户的关注。通过不断努力,ETI的产品逐渐打入国际市场,成为了一家具有全球影响力的电子企业。

爱普特半导体(APTSEMI)公司的发展小趣事

凭借卓越的产品性能和稳定的市场表现,爱普特半导体的市场占有率持续提升。目前,公司在国内非ARM核MCU市场的出货量已经位居第一,市场占有率也遥遥领先。这一成绩的取得,不仅彰显了爱普特在MCU行业的领先地位,也反映了公司在技术创新和市场拓展方面的强大实力。随着公司研发能力的不断提升和市场布局的逐步完善,相信爱普特在未来的市场竞争中将继续保持领先地位。

这些故事只是爱普特半导体发展过程中的一部分,它们共同展现了公司在电子行业中的崛起和成长。作为一家坚持自主创新、构建高端人才队伍、与大型企业战略合作、践行纯国产化发展理念并持续提升市场占有率的企业,爱普特半导体在电子行业的发展道路上正稳步前行。

问答坊 | AI 解惑

和大家一起分享如何选够摄像机镜头的文章!

虽然文章很老,但是很有价值,从千家网转来: 摄像机镜头是视频监视系统的最关键设备,它的质量(指标)优劣直接影响摄像机的整机指标,因此,摄像机镜头的选择是否恰当既关系到系统质量,又关系到工程造价。    镜头相当于人眼的晶状体,如果 ...…

查看全部问答>

PADS能不能对某一些区域设定走线规则?

本信息来自合作QQ群:电子工程师技术交流(12425841) 群主在坛子ID:Kata 请教。…

查看全部问答>

关于源端阻抗匹配的问题

关于源端阻抗匹配的问题,我算出我的DDR2的阻抗为89,根据SI8000软件算的,那我的源端匹配电阻如果为22R的话,那我的阻抗是不是89+22=111R呢 其实这样是错误的, DDR2阻抗是89欧姆,源端匹配电阻也应该是89欧姆,这样才不会反射!   不知道我 ...…

查看全部问答>

行业内知名LED芯片厂家

replyreload += \',\' + 384094;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>

哪位有龚建伟老师的串口调试助手源代码,给我发一份,谢谢

哪位有龚建伟老师的串口调试助手源代码,给我发一份,谢谢,实在没分可给了 king_2001888@yahoo.com.cn…

查看全部问答>

谁能比较一下KEIL和IAR

                                 用过keil c51,iar还没用明白,请高手谈谈感想。…

查看全部问答>

适合跳槽吗?大家给点意见

最近有猎头找上门,一家国内的汽车设计公司的EV汽车电机应用designer职位,说实话虽然有近4年的电机控制系统设计经验,但主要是工业电机控制方面,而且基本上是采用一家的方案(富士通FR系列),其他的接触比较少。想请教各位,纯电动汽车发展前景 ...…

查看全部问答>

msp430调试的时候出现的问题

不知道这个错误: Warning[Pe223]: function \"TestUART\" declared implicitly E:\\ArmRobot21\\MCU_prog\\Src\\main.c 34    啥意思啊?…

查看全部问答>

今年的电子设计共同讨论,思路 双路低频信号发生及分析仪的设计制作(E题)

双路低频信号发生及分析仪的设计制作(E题)[本科题]一、任务设计并制作一个双路低频信号发生器,以及一个能对信号进行频域分析的仪器。电路结构框图示意图如图1所示。 图1  电路结构框图示意图二、要求1.基本要求(1)两路信号均可程 ...…

查看全部问答>

【TI首届低功耗设计大赛】“偷电”的蓝牙温度计_Part2

关于LCD显示低功耗问题:        在Part1中提及的段码液晶,选用普通4COM裸片屏幕,但是仔细研究发现,FR5969中并未带有LCD控制器,如果增加外置的如HT1621专用的LCD控制器,又会增加系统的功耗,控制起来虽然方便了,但是不 ...…

查看全部问答>