[应用相关]

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

[复制链接]
662|1
手机看帖
扫描二维码
随时随地手机跟帖
骑着蜗牛狂奔O|  楼主 | 2021-5-17 20:58 | 显示全部楼层 |阅读模式
本帖最后由 骑着蜗牛狂奔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 闪烁
195641o4riae4zagararga.png
2. FAQ0049_SourceCode_V2.0.0\utilities\FAQ0049_demo\source_code\iap 为 IAP 例程,起始地址 为0x0807C000,预留空间大小 16KB,用户 IAP 程序根据实际占用空间设置对应的大小。程序在 IAP 运行时LED2 闪烁
195641hyt4ou1a4fojuoe6.png
注意设置中断向量表的起始地址和 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 内。
195641uj42jj2hjjcu54uc.png
注意设置中断向量表的起始地址和 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
次功能:无

FAQ0049_将IAP放在非闪存起始地址的方法_V2.0.0.pdf

512.96 KB

FAQ0049_将IAP放在非闪存起始地址的方法_V2.0.0.zip

7.72 MB

使用特权

评论回复
单片小菜| | 2021-5-18 09:28 | 显示全部楼层
这个方法很棒,很好,不错的想法。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

53

主题

126

帖子

1

粉丝