无bootloader的在线升级IAP方案

我们开发的产品在出厂后,由于产品功能增加,或修改bug等原因,需要升级产品的固件firmware,把最新的程序导入到存储器中。怎么把程序烧到flash?通常有三种情况,分别对应产品开发的三个阶段,分别是: (1)研发调试阶段,使用仿真器通过仿真接口把程序烧到flash (2)工厂生产阶段,生产人员通过工装软件,短接boot引脚, cpu上电后执行内部的rom等待程序从串口,can等外设传入。 (3)产品发货后,升级程序,不能拆外壳,不能拨码,只能想办法在线升级。

我们需要设计一段程序用来擦除旧的程序写新的程序。两种做法第一种是划分一段flash地址作为bootloader。第二种是借助外部的spi flash或eeprom等非易失性存储器,先将新的程序保存,然后运行一段ram升级程序,擦除片内的flash,拷贝新程序到片内flash就完成了程序升级。

1.设计bootloader
这种方案很常见,暂时不做详细的介绍。

2.无bootloader
该方案的优势是不会浪费宝贵的片内flash资源,但是需要借助外部的NVRAM。
第一步需要通过通信协议将bin文件写到NVRAM。
第二步需要设计一段在ram运行的update_ram()程序(需要关闭中断,以防程序发生不要预期)。
void update_ram()
{
//读取NVRAM的标志位,判断是否需要升级
if(NVRAM_read(&upFlagAdd) == 1)
{
//擦除片内flash
//从NVRAM拷贝数据到片内flash
//reset CPU
}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值