二级boot制作实现

eddy wen · 13次点击 · 14小时前

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   启动地址,截图如下:

  image.png

6.验证使用SDK中的ble_app_simple工程,编译出来的BIN文件使用AvaDFU_V1.0.0.16_Beta.exe上位机,在对应的跳转地址0X412000烧录这个BIN文件,烧录截图如下:

image.png

7.测试结果如下:

  image.png

8.注意如果应用代码是使用ble_app_simple_nonrtos工程,需要在main函数里面重新打开总中断

    __set_PRIMASK(0);


example_2_boot-202606086791.rar
被收藏 0  ∙  0 赞  
加入收藏
点赞
0 回复  
善言善语 (您需要 登录 后才能回复 没有账号 ?)

请先登录网站