从上电开始

hisi手册介绍启动方式有bootrom、片外flash、PCIE等几种方式。实际上是通过上电时几个硬件管脚的电平决定CPU内部的重映射:

  • 选择bootrom启动,将bootrom地址重映射到0地址开头的空间,bootrom启动串口(hitool)交互流程,类似Ti芯片的fastboot。如果串口通信成功则通过串口下载程序并执行。
  • 选择片外flash启动,则将片外flash在总线上的地址映射到0地址,执行flash 0地址处的程序。
从上电开始_第1张图片

详细过程:
bootrom:

  • bootrom是一块ROM区域,可以直接执行代码,可以理解为内置的类似norflash的但是只读的ROM区

片外flash:

  • 上电,处理器将片外flash上前面的数据映射到FMC空间,然后将FMC空间重映射到0地址。
  • CPU执行0地址的代码,即执行片外flash起始的代码,在uboot即为start.S。
  • 初始阶段使用的ROM为FMC,ram为SRAM,经过初始化DDR和自举后将代码重定向到DDR内,取消重映射,SRAM保存异常向量表
  • start.S经编译后0地址处为连续的异常向量表,0地址是一条跳转指令,跳转到reset代码部分
    start.S代码,执行了切换到SVC模式、禁用cache、禁用MMU、检查自举模式、打印SystemStartup、清除重映射、初始化DDR、初始化全片寄存器、判断从FMC启动则拷贝flash到DDR、初始化堆栈、跳转到_start_armboot,就跳转到C语言部分了,具体分析可以参考这篇:《3519v101 start.S》。
_start: b       reset           @ 跳转reset
        ldr     pc, _undefined_instruction   @ 未定义指令
        ldr     pc, _software_interrupt     @ 软中断
        ldr     pc, _prefetch_abort     @ 预取错误
        ldr     pc, _data_abort      @ 数据错误
        ldr     pc, _not_used       @ 未用
        ldr     pc, _irq         @ 中断
        ldr     pc, _fiq        @ 快中断

你可能感兴趣的:(从上电开始)