LPC824 一种IAP实现方法

1 flash空间分配

LPC824是一款CortexM0+微控制器,片上自带32KB Flash.为了实现IAP功能,先把Flash空间进行地址分配,如下表所示。

LPC824 一种IAP实现方法其中,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。再用fromelfhex转成bin,如以下格式

fromelf.exe --bincombined--bincombined_base=0x00001000 --output .\Objects\ lpc824demo.bin  .\Objects\lpc824demo.axf

得到的bin文件即可用于bootloader更新下载。

LPC824 一种IAP实现方法