STM32 IAP 升级新方法

一、背景

在做基于STM32等芯片产品开发时,经常面临需要开发升级功能,升级方法从大类来分,分成ISP和IAP,这两者的区别在此不再多说,现着重描述IAP功能。

IAP功能常规来说需要分别制作BOOT和APP两份代码。

BOOT功能大概包含有:

1:接收升级包

2:校验APP功能代码,跳转至APP

所以在APP代码开始处经常需要添加 中断向量偏移操作,如下:

SCB->VTOR = FLASH_APP_START_ADDR;

下面是将要介绍的完全不同思路的IAP升级方法。

二、芯片硬件环境

首先芯片需要满足特殊的Flash架构特性,手册描述如下,在此以STM32U575为例

其中Dual Bank 的地址分配

现已Flash 1M为例,每个bank 512K

Flash memory area 

Flash memory corresponding bank 

Start address 

 End address 

SWAP_ BANK=0 

SWAP_ BANK=1 

User main memory 

Bank 1 

Bank 2 

0x0800 0000 

0x0807 FFFF 

Bank 2 

Bank 1 

0x0808 0000 

0x080F FFFF 

通过手册 FLASH option register (FLASH_OPTR)中Bit20置位,Bit21 默认为1,然后软复位,可将 Bank1 和 Bank2 交换运行。

通过读取 Bit 20 的值,可判断是 Bank1 还是 Bank2。

三、使用参考

一份代码包含接收升级包的功能,不区分BOOT和APP,集成在一起。

当 Bit20 = 0(默认设置),代码从Bank1开始运行,开始接收升级包,就将升级包从Bank2的首地址依次存放直到完全接收完毕。

接收完毕且校验通过之后,将 Bit20 置位为1,执行软复位。那么软复位之后,就会从Bank2地址的程序开始运行。

优势:

  1. 不需要人为中断向量偏移
  2. 只需编译一份代码
  3. 不需要考虑地址偏移带来的顾虑,

劣势:

1、Bank1和Bank2的空间大小是平均分配整个Flash,那么应用程序的大小不能超过Flash的一半

2、如果某个应用程序需要有单独的一些特殊信息存放,那么Bank1和Bank2均处保存一份,最好在每个Bank的最后一个page

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

写代码混口饭吃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值