AT32 部分型号有零等待闪存和非零等待闪存,零等待闪存的起始地址是0x08000000。为了将更多的 APP 程序放在零等待闪存内,可以将 IAP 程序放在非零等待闪存。或者其他原因也可以将 APP 程序放在非闪存起始地址,即 IAP 起始地址不是 0x08000000。
Answer:
IAP 程序可以放在闪存任何扇区的起始地址,当放在非 page0 的起始地址时,需要在 page0 增加一个引导程序,由引导程序跳转到 IAP,在 IAP 中跳转到 APP。
1. FAQ0049_SourceCode_V2.0.0utilitiesFAQ0049_demosource_codeguide 为引导程序例程,起始地址0x08000000,预留空间大小 4KB,用户引导程序根据实际占用空间设置对应的大小。程序在引导程序运行时 LED4 闪烁
2. FAQ0049_SourceCode_V2.0.0utilitiesFAQ0049_demosource_codeiap 为 IAP 例程,起始地址 为0x0807C000,预留空间大小 16KB,用户 IAP 程序根据实际占用空间设置对应的大小。程序在 IAP 运行时LED2 闪烁
注意设置中断向量表的起始地址和 IAP 起始地址相同:
/* config vector table offset */
nvic_vector_table_set(NVIC_VECTTAB_FLASH, 0x7C000);
3. FAQ0049_SourceCode_V2.0.0utilitiesFAQ0049_demosource_codeapp_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.0utilitiesFAQ0049_demotool_release)烧录 APP 程序,烧录成功后 LED3 闪烁。
类型:MCU 应用
适用型号:AT32 全系列
主功能:FLASH
次功能:无