完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
|
|
相关推荐
4 个讨论
|
|
|
Bootloader源码已经固化在ROM里了,可以在反汇编窗口里从地址0x20B00000开始查看。bootloader文档里有说明。
The ROM Boot Loader (RBL) is software code that resides in the on-chip read only memory (ROM) to assist the customer in transferring and executing their application code. The start address of the RBL is 0x20B00000 |
|
|
|
|
|
|
|
vuywsdfwf 发表于 2018-7-25 07:05 core0~7上电都会执行这个Bootloader程序吗? |
|
|
|
|
|
|
|
|
我没有找到有关core1~core7相关更加详细的信息。 在多核启动中,首先由core0根据sw3~sw6的配置来确定使用什么方式启动。假设使用spi nor flash这种方式,那么bootloader会从flash读取core0的代码到Local L2 SRAM里面,并且开始执行core0的用户代码。core0就开始负责从flash搬运core1~core7的代码到各自的Local L2 SRAM里面,并且设置其它各核的BOOT_MAGIC_ADDRESS,然后发送一个IPC中断启动其它核开始执行。 我又了解到,core1~core7从一开始就默认执行IDLE指令,当它们接收到IPC中断时会跳出这个IDLE指令, 并且读取BOOT_MAGIC_ADDRESS,开始开始执行自己的用户代码。 下面是我从bootloader中看到的启动代码,不知道我的理解对不对? 所以我认为core0~core7上电的时候应该是这样的,所有的核一开始的PC地址指向0x20B00000 (bootloaderde 的启动代码), 并且开始执行bootloader的代码。 bootloader根据各核的dnum来区别core0与其他核, 如果是core0则完成上面所述的启动流程;如果是core1~core7的话, 那么就设置并使能IPC中断,并且进入IDLE指令,等待中断core0的IPC中断,当接收到core0的IPC中断后,读取BOOT_MAGIC_ADDRESS,开始执行BOOT_MAGIC_ADDRESS指向的代码,就是c_init00()。 然后多核启动完成。 /**************************************************************************************** * FUNCTION PURPOSE: Boot for non-zero cores **************************************************************************************** * DESCRIPTION: Secondary cores simply clear their boot address register and idle. * Once woken they branch to the address in their boot address register ****************************************************************************************/#pragma FUNC_NEVER_RETURNS(nysh_sec_core_boot)void nysh_sec_core_boot (void)[ void (*fp)(void); UINT32 i; magicAddr = 0; /* The ROM disabled the cache, but it can become enabled during * the boot process, so flush and invalidate are used */ hwFlushCache (); do [ nysh_sleep (); // core1 ~ core7 设置并使能IPC中断,并且进入IDLE指令,等待中断 hwInvalidateCache ((UINT32) &magicAddr); // 读取BOOT_MAGIC_ADDRESS ] while (magicAddr == 0); fp = (void (*)())magicAddr; i = 0; do [ chipKickUnlock(); DEVICE_REG_BOOT_COMPLETE = (1 << DNUM); /* Boot complete bit */ chipKickLock(); i += 1; ] while ((i < DEVICE_MAX_BC_RETRY) && ((DEVICE_REG_BOOT_COMPLETE & (1 << DNUM)) == 0)); /* */ /* */ (*fp)(); // 开始执行各核的代码, _c_int00();] /* nysh_sec_core_boot */ |
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
600 浏览 0 评论
1653 浏览 0 评论
2095 浏览 0 评论
为啥BQ7693003DBTR芯片在和BQ769X0盒子通讯时收不到信号?
1542 浏览 0 评论
DSP 28027F 开发板 XDS100v2调试探针诊断日志显示了 Error -150 (SC_ERR_FTDI_FAIL)如何解决
1385 浏览 0 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
1794浏览 29评论
2820浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
1748浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
1666浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
1681浏览 13评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-14 16:29 , Processed in 0.516771 second(s), Total 44, Slave 37 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1345