华大HC32L系列运行中FLASH热擦除

本文介绍了在资源有限的情况下,如何在华大HC32L190系列MCU上实现运行中自己擦除自己的技术,以支持OTA更新。关键步骤包括预留安全区域存储不被擦除的Flash操作驱动,调整驱动运行位置,以及编写擦除烧写程序,确保程序能自动跳过安全区域进行擦写。
摘要由CSDN通过智能技术生成

实现运行中自己擦除自己

目前很多项目实现都要支持MCU级别的OTA,通过各种通讯途径从OTA Server拿到版本后并最终要烧写到运行区域并用新版本启动系统。由于华大的擦除程序必须从Flash开头区域运行(小于Flash偏移0x8000,部分型号略有差异),一般会通过放置在头部的Loader来实现这个。但是当容量受限,本身APP空间已经不够的情况下Loader可能就会被拿掉,此时只有一个单一APP IMAGE运行并且需要实现自身擦除自身。或者当Loader也需要升级时,就要考虑怎么升级擦除自己。以下实现在HD32L190系列上已经成功实现并部署,可供参考。该编译环境用的是Keil,如果采用别的开发环境需要适当调整链接脚本语法格式,原理相同。

1)预留Secure区域

修改Link Scripts为Flash擦除程序预留一个Secure Section空间,所有存在这个区域的代码将不被擦除,因此通常这里只存放不变的Flash操作驱动代码。以下示例只保留了4KB用于Secure空间,实测够了,如果还想塞入更多的代码可以适当放大,当空间溢出后,编译链接过程会检测到并报错的。

LR_IROM1 0x00000000 0x0001000  {
       ; load region size_region
  ER_IROM1 0x00000000 0x00001000  {
     ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
  }
  RW_IRAM1 0x20000000 0x00008000  {
     ; RW data
   .ANY (+RW +ZI)
  }

}
LR_IROM2 0x00001000 0x00001000 {
   
  ER_IROM2 0x00001000 0x00001000 {
   
   *.o (SECURECODE)
  }
}
LR_IROM3 0x0
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值