1、应用场景:程序从QspiFlash引导启动,作为Boot程序,提供更新程序的功能;将包含应用的完整程序下载到RAM中,重新加载启动。
2、软件源码:MIMXRT1170-EVK中示例代码
3、设计思路:
1)Boot程序的Code使用Flash,Data使用一片OCRAM
2)App程序存放在另一片IOCRAM上,堆栈使用跟Boot相同的OCRAM空间(也可更改)
3)如果Boot程序中开启了中断,在跳转之前要关中断,否则有可能跳转时出现程序运行异常问题
4)在App的程序中,要关闭BOARD_BootClockRUN的时钟初始化函数,因为PLL无法重新配置(还未查明原因)
4、关键代码段:
uint32_t CORE1_RAM_ADDRESS = 0x20242000,CORE1_FLASH_START = 0x30200000;
uint32_t* pBuf = (uint32_t*)CORE1_RAM_ADDRESS;
(void)memcpy((void *)(char *)CORE1_RAM_ADDRESS, (void *)CORE1_FLASH_START, core1_image_size); __disable_irq(); SCB->VTOR = (uint32_t)CORE1_RAM_ADDRESS; __set_MSP(pBuf[0]);//将把用户代码的栈顶地址设为栈顶指针 ((void (*)())pBuf[1])(); 个人愚见,如有问题,敬请指正!



