这次主要对STM32F103/Keil和LPC2478/IAR加了一个IAP在线升级功能,
主要记录一下自己的思路,无代码,实在是代码感觉没啥写的,都是一些网上很多流传的东西。
1、开发环境
Keil+stm32f103+JLINK
2、程序思路
在升级中,必须要考虑的问题就是:升级成功以及失败,然后失败的补救措施。所以我以前的写法是最简单粗暴的
2.1、IAP升级旧版本
bootloader有两个功能,由标志位控制,
一个是跳转到app程序(一般升级后进入)
一个是允许升级程序(一般升级失败或者初始状态)
bootloader根据标志位判断当前是升级还是跳转,如果程序处于app则先更新标记位表示进入升级,然后复位,进入bootloader
这个优点就是代码简单,空间利用率高,如果程序很大的话比较适合,但是如果空间使用不大那么可以使用双缓存,毕竟可以在出错之后回滚。
2.2、IAP升级双缓存版本
我使用的单片机内部flash大小为512kb,所以我按照128kb可以划分为5个区域
- bootloader大小为64kb,假设地址为0x80000000-0x80010000
- 运行区域大小为128kb,主要此地址固定代码中断向量表偏移量,假设地址为0x80010000-0x80030000
- 升级数据存储1大小为128kb,假设地址为0x80030000-0x80050000
- 升级数据存储2大小为128kb,假设地址为0x80