LPC824 一种IAP实现方法
1 flash空间分配
LPC824是一款CortexM0+微控制器,片上自带32KB Flash.为了实现IAP功能,先把Flash空间进行地址分配,如下表所示。
其中,sector 30 用于存放IAP标志位。这个物理区域bootloader和应用程序都要访问。
上电复位之后,MCU首先运行bootloader程序,它会检测IAP标志位的特征值,如果是0x987EA321,那么进入IAP模式,等待升级。如果不是,那么跳过IAP,直接跳到APP起始向量入口0x1000,进入正常的应用程序。
需要注意的是,如果进入IAP升级,最后校验完成,确认APP正确之后,bootloader需自行清除IAP标志位,以避免下一次上电复位再次进入IAP。
在应用程序里,可由通信命令,将IAP标志位置为允许IAP升级,重启之后bootloader将进入IAP升级状态。
#define APP_CONFIG_SET_VALUE 0x987EA321 //允许IAP升级
#define APP_CONFIG_CLEAR_VALUE 0xFF //IAP不升级
2 应用程序配置
*.s文件禁止CRP
这里就是在汇编代码注释掉以下行
;IF :LNOT::DEF:NO_CRP
;AREA |.ARM.__at_0x02FC|, CODE, READONLY
;DCD 0xFFFFFFFF
;ENDIF
另外,在Keil 工程属性页设置代码起始地址,编译生成hex。再用fromelf将hex转成bin,如以下格式
fromelf.exe --bincombined--bincombined_base=0x00001000 --output .\Objects\ lpc824demo.bin .\Objects\lpc824demo.axf
得到的bin文件即可用于bootloader更新下载。