搜索

[应用相关] FAQ0049 将IAP放在非闪存起始地址的方法

[复制链接]
190|1
骑着蜗牛狂奔O|  楼主 | 2021-5-17 20:58 | 显示全部楼层 |阅读模式
Questions: AT32F403、 AT32F413、 AT32F403A、 AT32F407 有零等待闪存和非零等待闪存, 零等待闪存的起始地址是 0x08000000。 为了将更多的 APP 程序放在零等待闪存内, 可以将 IAP 程序放在非零等待闪存。或者其他原因也可以将 APP 程序放在非闪存起始地址, 即 IAP 起始地址不是 0x08000000。那么如何将 IAP 放在非闪存起始地址?
Answer: AT32F403 开发板为例, 具体实现方法如下:
1IAP 程序可以放在闪存任何页的起始地址, 当放在非 page0 的起始地址时, 需要在 page0 增加一个引导程序,由引导程序跳转到 IAP, 在 IAP 中跳转到 APP
Guide 为引导程序例程, 起始地址 0x08000000, 预留空间大小 4KB, 用户引导程序根据实际占用空间设置对应的大小。 程序在引导程序运行时 LED2 闪烁。
1.png
2、 设置 IAP 的起始地址 FLASH_BOOT_ADDR = 0x0807C000, 即 page248 起始。IAP 为 IAP 例程, 起始地址 0x0807C000, 预留空间大小 16KB, 用户 IAP 程序根据实际占用空间设置对应的大小。 程序在 IAP 运行时 LED3 闪烁。
2.png
IAP 的中断向量映射地址需要设置为 IAP 的起始地址, 即 IROM1 的 Start 值与 SCB->VTOR 值要一致。
3.png
3、 设置 APP 的起始地址 FLASH_APP1_ADDR = 0x08001000, 即 page2 起始。 因开启读保护后, 闪存的前 4KB 默认为写保护, 如果需要开启读保护, APP 的起始地址不能在前 4KB 内。LED 为 APP 例程, 起始地址 0x08001000, 预留空间大小 492KB, 用户 APP 程序根据实际占用空间设置对应的大小。 程序在 APP 运行时 LED4 闪烁。
4.png
APP 的中断向量映射地址需要设置为 APP 的起始地址, 即 IROM1 的 Start 值与 SCB->VTOR 值要一致
5.png
测试方法:
  • 烧录引导程序前将闪存全部擦除, 使用 ICP、 ISP 或编译器烧录引导程序, 烧录成功后 LED2 闪烁。
  • 使用 ICP、 ISP 或编译器烧录 IAP 程序, 烧录成功后 LED3 闪烁。
  • 使用 ICP、 ISP、 编译器或者 IAP 升级软件(IAP_APP_Release 文件内) 烧录 APP 程序, 烧录成功后 LED4 闪烁。

类型: MCU 应用
适用型号: AT32F4xx 全系列
主功能: FLASH
次功能: 无

使用特权

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

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

本版热帖

本版活跃用户

优质原创写原创,赢大奖

编辑推荐

  • 1 wolfe_yu 得到打赏 ¥180.00
  • 2 最美葫芦娃 得到打赏 ¥155.00
  • 3 呐咯密密 得到打赏 ¥120.00
  • 4 hk386 得到打赏 ¥75.00
  • 5 火星国务卿 得到打赏 ¥63.00
  • 6 两只袜子 得到打赏 ¥56.00
  • 7 laocuo1142 得到打赏 ¥50.00
  • 8 ezcui 得到打赏 ¥45.00
  • 9 linghz 得到打赏 ¥45.00
  • 10 gaon2 得到打赏 ¥45.00
在线客服 快速回复 返回顶部 返回列表