|
本帖最后由 laotang365 于 2014-9-19 18:57 编辑
以下是裸机程序中start.s的部分代码- /* init system clock */
- bl system_clock_init
- /* initialize memory controller */
- bl mem_ctrl_init
- /* initialize nand flash controller */
- bl nand_init
- /* setting trustzone protection controller */
- bl tzpc_init
- /* wakeup or not */
- ldr r0, =(0xe0100000 + 0xa000)
- ldr r1, [r0]
- bic r1, r1, #0xfff6ffff
- cmp r1, #0x10000
- beq wakeup_reset
- cmp r1, #0x80000
- beq wakeup_reset
- /* copyself to ram using irom */
- adr r0, _start
- ldr r1, =_start
- cmp r0, r1
- beq have_copyed
- bl irom_copyself
复制代码 代码中的启动流程是先进行system_clock_init mem_ctrl_init nand_init tzpc_init,最后才开始进入判断程序决定是否自拷贝,但是start.s不是首先在iram中执行过一次了吗,自拷贝到0x34000000后,从0x34000010再重新运行一次,那么system_clock_init mem_ctrl_init nand_init tzpc_init重复再次运行????
此时代码已经在DDR中运行,mem_ctrl_init 再次初始化不会导致DDR复位吗?对程序运行没影响吗?
不过mem_ctrl_init 又必须在iram中先运行一次,初始化DDR,不然无法拷贝代码到DDR中,不太明白,DDR重新初始化不会影响代码运行?
另外,从nand_flash中启动时Uboot应该也必须进行DDR初始化然后自拷贝吧,这样我dnw将裸机程序下载到DDR中,用go命令为什么不能运行呢? |
|