骑着蜗牛狂奔O 发表于 2021-5-17 20:58

FAQ0049 将IAP放在非闪存起始地址的方法

本帖最后由 骑着蜗牛狂奔O 于 2022-5-20 20:01 编辑

Questions:AT32 部分型号有零等待闪存和非零等待闪存,零等待闪存的起始地址是0x08000000。为了将更多的 APP 程序放在零等待闪存内,可以将 IAP 程序放在非零等待闪存。或者其他原因也可以将 APP 程序放在非闪存起始地址,即 IAP 起始地址不是 0x08000000。Answer:IAP 程序可以放在闪存任何扇区的起始地址,当放在非 page0 的起始地址时,需要在 page0 增加一个引导程序,由引导程序跳转到 IAP,在 IAP 中跳转到 APP。
1. FAQ0049_SourceCode_V2.0.0\utilities\FAQ0049_demo\source_code\guide 为引导程序例程,起始地址0x08000000,预留空间大小 4KB,用户引导程序根据实际占用空间设置对应的大小。程序在引导程序运行时 LED4 闪烁2. FAQ0049_SourceCode_V2.0.0\utilities\FAQ0049_demo\source_code\iap 为 IAP 例程,起始地址 为0x0807C000,预留空间大小 16KB,用户 IAP 程序根据实际占用空间设置对应的大小。程序在 IAP 运行时LED2 闪烁注意设置中断向量表的起始地址和 IAP 起始地址相同:/* config vector table offset */nvic_vector_table_set(NVIC_VECTTAB_FLASH, 0x7C000);
3. FAQ0049_SourceCode_V2.0.0\utilities\FAQ0049_demo\source_code\app_led3_toggle 为 APP 例程,起始地址为 0x08001000,即 page2 起始。需要注意的是,开启读保护后,闪存的前 4KB 默认为写保护,如果需要开启读保护,APP 的起始地址不能在前 4KB 内。注意设置中断向量表的起始地址和 APP 起始地址相同:/* config vector table offset */nvic_vector_table_set(NVIC_VECTTAB_FLASH, 0x1000);
测试方法:烧录引导程序前将闪存全部擦除,使用 ICP、ISP 或编译器烧录引导程序,烧录成功后 LED4 闪烁。使用 ICP、ISP 或编译器烧录 IAP 程序,烧录成功后 LED2 闪烁。使用 ICP、ISP、编译器或者 IAP 升级软件(FAQ0049_SourceCode_V2.0.0\utilities\FAQ0049_demo\tool_release)烧录 APP 程序,烧录成功后 LED3 闪烁。
类型:MCU 应用适用型号:AT32 全系列主功能:FLASH次功能:无

单片小菜 发表于 2021-5-18 09:28

这个方法很棒,很好,不错的想法。
页: [1]
查看完整版本: FAQ0049 将IAP放在非闪存起始地址的方法