你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【NUCLEO-H533RE评测】使用双存储区Flash 在不关闭系统的状态下,实现OTA

[复制链接]
埃斯提爱慕 发布时间:2024-7-21 10:48

跌跌撞撞,历经一个星期,终于实现了功能。

双BANK的好处是,不再像以前一样,需要一个bootloader程序来负责跳转,程序始终运行在0x08000000起始的位置。在用户程序中,只管接收新固件,并存放在另一个BANK中,也就是0x08040000起始的区域,接收完成后,切换SWAP_BANK,重新,即可。

https://shequ.stmicroelectronics.cn/thread-643647-1-1.html 还是在这个工程基础上修改。

首先找用户手册里相关的说明。

image.png

image.png

image.png

看了这些后,就认为只要按步骤,改变SWAP_BANK位就可以了。在STM32CubeProgrammer

image.png

image.png

image.png

勾选SWAP_BANK选项后,再读Flash。

image.png

image.png

image.png

通过这个验证,我再次觉得使用很简单,因为程序都是从0x08000000处复位运行。也就是当SWAP_BANK未勾选时,应用程序中,将新固件接收,并写到0x08040000开的的程序空间(BANK2区域),然后通过勾选SWAP_BANK,新程序就变到了0x08000000的位置,下次复位运行就是新程序了。这样就省掉了原来bootloader。

移植一个Ymodem,用于下载新的固件。(这个就不多细说了,官方例程里有)

image.png

同样,也读出来确认一下,两个区域都有程序

image.png

image.png

勾选SWAP_BANK,复位程序

image.png

image.png

试到这里,功能是实现了,但我们实际应用中可不能用下载软件来切换。还得在程序里实现切换SWAP_BANK。

修改程序

需要注意的是,擦除需要根据SWAP_BANK的状态来决定擦除BANK1还是BANK2。而写flash的地址,不需要管SWAP_BANK的状态,都是从0x08040000到0x0807ffff。

uint32_t FLASH_If_Erase(uint32_t StartSector)
{
  uint32_t UserStartSector;
  uint32_t SectorError;
  FLASH_EraseInitTypeDef pEraseInit;

  /* Unlock the Flash to enable the flash control register access *************/ 
  FLASH_If_Init();

  /* Get the sector where start the user flash area */

  pEraseInit.TypeErase = FLASH_TYPEERASE_MASSERASE;
  if(FLASH->OPTCR & FLASH_OPTCR_SWAP_BANK)
  {
      pEraseInit.Banks = FLASH_BANK_1;
  }
  else
  {
      pEraseInit.Banks = FLASH_BANK_2;
  }

  pEraseInit.Sector = FLASH_SECTOR_0;
  pEraseInit.NbSectors = 32;

  if (HAL_FLASHEx_Erase(&pEraseInit, &SectorError) != HAL_OK)
  {
     /* Error occurred while page erase */
     return (1);
  }

  return (0);
}

image.png

image.png
收藏 评论2 发布时间:2024-7-21 10:48

举报

2个回答
yang9397 回答时间:2024-8-6 08:56:38
支持一下( B/ O* x6 B6 j0 M7 v7 q1 M0 ]% d
埃斯提爱慕 回答时间:2024-8-8 13:05:14

yang9397 发表于 2024-8-6 08:56
支持一下

感谢

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版