STM32串口iap升级用例解析

将STM32单片机的片上flash分为三个区域:

IAP程序区:0x8000000~0x8004000(16kb空间用于存储iap程序和用户信息)

说明:iap程序主要是初始化一个通信串口用于接收主控发给单片机的升级bin文件数据帧,数据帧带有特定协议,后面详细说明,用户信息包含升级标志及原始参数存储,包括显示颜色、音量等级等,这些信息固定在分配的16kb空间的最后一页(一页是2kb),即0x8003800~0x8004000空间段为用户信息存储区。

APP1程序区:0x8004000~0x801a800(90kb空间用于存放应用程序1)

说明:单片机最初始程序固件由iap+APP1组成.bin文件,下载到单片机上运行时也是由iap将运行的移位指针跳转到0x8004000开始正式运行。当有升级指令将程序由APP1切换成IAP程序时,升级标志位被改写,并进入iap程序等待升级固件数据帧,接收到真确固件后,iap会自动重启,并将升级标志恢复清零。再次运行时,iap将判断其之前的更新APP2(0x801a800~0x8031000)的程序是否能运行,如果可以就跳转到APP2运行,此后如果有重新升级的指令,将程序存放到APP1段,跳转APP1运行,这样轮流交替升级就是iap的原理,由于目前扫码终端的运行固件(.bin)文件不是很大,分90kb空间一个区域是够用的,STM32F103VET512Kb的片上flash,够用,无需外扩存储空间。

APP2程序区:0x801a800~0x8080000(0x801a800以后的区域都为APP2)

说明:APP2区与APP1区为升级固件主要存储区,升级时,IAP程序里处理会把新固件存放的那个区域的数据清空,而旧的应用程序会在下一次更新操作是清空。一定要确保固件大小在单个分配区域的最大范围之内,比如分配的区域是90Kb,则固件文件大小确保不大于90kb字节长度,如果大于,需要将APP区域空间分配大一点,避免下次升级时新固件数据存储把旧固件给覆盖或重叠,导致APP1APP2区都无正常程序可运行,这种情况就只能用下载器现场从新烧写固件。

用户存储数据一定不要存放在APP1和APP2区域段,不知道那次升级就会把用户存储数据给擦除替换,这将导致iap无法读到正确的标志,升级将不能继续执行或根本无法运行(这种情况也只能下载器重新烧写固件)。

猜你喜欢

转载自blog.csdn.net/qq_28643619/article/details/86515591