hisi手册介绍启动方式有bootrom、片外flash、PCIE等几种方式。实际上是通过上电时几个硬件管脚的电平决定CPU内部的重映射:
- 选择bootrom启动,将bootrom地址重映射到0地址开头的空间,bootrom启动串口(hitool)交互流程,类似Ti芯片的fastboot。如果串口通信成功则通过串口下载程序并执行。
- 选择片外flash启动,则将片外flash在总线上的地址映射到0地址,执行flash 0地址处的程序。
详细过程:
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 @ 快中断
网友评论