|
1.6627/6629是从0X00404000开始执行应用代码,二级boot设置从这个地址开始执行 2.参考例子设置boot的大小是BOOTLOADER_FLASH_SIZE,跳转的起始地址是FW_DATA_ADDR,代码例子如下: #define BOOTLOADER_FLASH_SIZE 52*1024 //boot 代码大小 根据实际情况设置,要4K的整数倍 #define FW_INFO_ADDR (0x404000UL + BOOTLOADER_FLASH_SIZE) #define FW_DATA_ADDR (FW_INFO_ADDR + 0x1000UL) volatile uint32_t app_part_addr = FW_DATA_ADDR; 3.跳转代码实现代码如下: void fw_app_jump(uint32_t app_part_addr) { uint32_t app_jump_addr = app_part_addr + 4; __set_PRIMASK(1); // Disable ALL IRQ, MUST use __set_PRIMASK(1) 禁用中断 drv_icache_enable(); drv_icache_invalidate(); __DSB(); __ISB(); __set_MSP(*(uint32_t *)(app_part_addr)); ((void(*)(void))(*(volatile uint32_t*)app_jump_addr))(); } 4.boot完整工程参考example_2_boot上传的附件 5.应用工程需要设置cm4f_flash.sct中的 #define __ROM_BASE 0x412000 启动地址,截图如下: 6.验证使用SDK中的ble_app_simple工程,编译出来的BIN文件使用AvaDFU_V1.0.0.16_Beta.exe上位机,在对应的跳转地址0X412000烧录这个BIN文件,烧录截图如下:
7.测试结果如下: 8.注意如果应用代码是使用ble_app_simple_nonrtos工程,需要在main函数里面重新打开总中断 __set_PRIMASK(0); |
example_2_boot-202606086791.rar



