LPC1768学习笔记:IAP升级
1.需求:通过串口给主机升级,主机的通信串口与升级串口相同
2.方法:要完成APP与IAP程序的切换判断,我们需要一个flag_update单独标识地址的,当flag_update为0xFF的时候,视为正常上电状态,程序由IAP(0x10000000)可以直接跳转到APP中执行;当flag_update为0x55的时候,视为远程烧写状态,程序由IAP开始之后,不跳转APP,而是执行自己的等待烧写流程。这边具体的流程和应用后面会具体介绍。
为了满足切换判断的功能,就需要该标志位不随APP程序的烧写而发生变化,所以我这边选择将IAP存储区之后的一个扇区,即地址0x10009000作为flag_update的存储地址,这样,在IAP程序不变的情况下,随便怎么烧写APP,只要目标地址满足上述表格中的要求,该标志位就不会发生变化。当然,使用用其他满足条件的存储方式(诸如存入外部Flash、存入EEPROM等)都可以。
一.芯片内存划分:芯片总内存为512K
(1)IAP程序内存 :0x0000 0000 - 0x0000 8FFF -36K(可根据自己调整)
(2)升级标志内存:0x0000 9000 - 0x0000 9FFF -4K
(3)数据缓冲内存:0x0000 B000 - 0x0000 BFFF -4k
(4)APP程序内存 :0x0000 C000 - 0x0007 FFFF -472k
芯片手册内存分布地址:
二.IAP流程图说明:
【IAP】:对于IAP程序来说,首先根据flag_update状态判断是否跳转APP,如果不跳转,则等待升级包。待升级包传输完毕,全部写到APP的地址中之后,再执行跳转到APP程序的起始地址执行(或者直接重启)。跳转或者重启之前需要将flag_update重新置为正常上电状态(0xFF),这样以避免下一次重启之后,程序仍然跑在IAP中。
【APP】:对于APP程序来说,需要实现的很简单,就是在串口收到某些外部指令的时候(可自由设置),将flag_update置为远程烧写状态(0x55),并重启。重启之后,MCU会重新从IAP程序开始执行,执