从固件启动引导加载程序

时间:2014-03-24 19:35:18

标签: c arm microcontroller cortex-m3

我希望能够直接从代码启动引导加载程序,而无需将引脚置为高电平并重置微控制器以访问它。下面的想法是引导加载程序二进制文件存储在char数组中。调用Start_BootLoader()时,引导加载程序将复制到SRAM中并执行。

但是,代码会复制到RAM中,但是当它尝试在我复制它的位置执行代码时,它什么都不做。

微观。是Energy Micro EFM32380f1024。我使用的下面的代码基于Energy Micro的应用笔记AN0042。

void Start_Bootloader(void)
{
  /* Diable interrupts */
  INT_Disable();

  __set_MSP( ( 0x20000000 + sizeof( bootloader ) + 0x400 ) & 0xFFFFFFF0 );

  /* Load the entire bootloader into SRAM. */

  memcpy( (void*)0x20000000, bootloader, sizeof( bootloader ) );

  /* Start executing the bootloader. */

  BOOT_jump( *(uint32_t*)0x20000000, *(uint32_t*)0x20000004 );
}

1 个答案:

答案 0 :(得分:1)

代码附带ROM和RAM链接器设置 - 但只有RAM版本可能适用于您的情况。尝试从二进制文件中读取第二个字(32位小端) - 它应该指向0x20000000范围内的奇数地址,因为它是新的PC值。