STM32远程升级实现:Bootloader与应用程序结合

1、flash空间分配:

事先在flash开辟好空间,假设flash为128k,我这边给它分为五个区,分别为bootloader、标志位、application、application backup、标签ID。

(注:升级之前,app的代码烧录于application的flash存储区域内。用于app升级的bin文件大小一定要小于自己开辟的flash空间大小)

2、 升级流程(以标签板为例):

上位机发送一个升级指令,bootloader先判断是否收到升级指令,若收到升级指令,则进入升级状态。此时,将application backup的flash数据擦除,application backup区域开始接收app升级文件(即升级后的app代码)的数据包。若接收数据包失败,返回上位机一个接收失败的标志位,上位机再下发一个退出升级的标志位给bootloader,退出升级,然后(标签板)重启,(即从bootloader跳转到application的区域,读application的代码);若数据包全部成功接收,上位机判断app升级文件里边的版本号跟bin文件的文件名是否一致,若不一致,上位机返回标签板ID;若一致,则app升级成功,返回一个升级成功标志位给bootloader(与此同时,将application区域作为下次储存app升级文件的备用区),退出升级(跳出bootloader,跳转到application backup),代码从application backup区域开始执行。

若下次还要升级,则擦除的是application区域的存储数据,然后接收数据包,在执行上述的操作。(Application与application backup的存储区域是交替使用的)

升级机制:

上位机发送一个升级指令,APP先判断是否收到升级指令,若收到升级指令,将擦除事先划分好的flash的特定区域,然后把升级指令的标志位写入该区域,然后执行系统复位;接着程序从bootloader开始执行,bootloader读存放升级指令标志位的flash的信息,若为升级指令的标志,则进入升级状态。

此时,将application backup的flash数据擦除,application backup区域开始接收app升级程序的数据包。1、若接收数据包失败,返回上位机一个接收失败的标志位,上位机再下发一个退出升级的指令给标签板,若bootloader成功收到退出升级指令,退出升级,然后(标签板)重启(即从bootloader跳转到application的区域,运行application的代码)﹔若无收到退出升级指令,则标签板死机;2、若数据包全部成功接收,上位机判断app升级文件里边的版本号跟bin文件的文件名是否一致,若不一致,上位机返回标签板ID;若一致,则app升级成功,返回一个升级成功标志位给标签板的bootloader (与此同时,将application区域作为下次储存app升级文件的缓存区),退出升级(跳出bootloader,执行application backup代码)。

3、注意事项:app升级文件的中断向量表的偏移地址需要修改;app的起始地址需要修改。

若app一开始烧录于flash的application区域时,IROM1需要修改为0x80004000,size根据代码大小来定。

(注:升级app文件的IROM1需要修改为0x80011000)

beyond compare软件可用于文件对比!!!

若app一开始烧录于flash的application区域时,中断向量表的偏移地址需设置为:

#define VECT_TAB_OFFSET  0x4000

(注:升级app文件的偏移地址也是需要修改的哦,根据第一张图为例,中断向量表的偏移地址需设置为:#define VECT_TAB_OFFSET  0x11000)

(下边这两张图不用管,嘿嘿)

(13条消息) STM32单片机bootloader扫盲_stm32 bootloader_不咸不要钱的博客-CSDN博客

(4条消息) STM32 内核复位 与 系统复位 区别及程序实现___disable_fault_irq_electrocrazy的博客-CSDN博客

(2条消息) STM32 从APP跳入BootLoader问题_stm32 bootloader 跳转_yhl_sophia的博客-CSDN博客

(2条消息) 【STM32学习笔记】STM32 BOOTLOADER配置以及APP跳转_stm32跳转到指定地址运行_Carry_王的博客-CSDN博客

(2条消息) STM32远程升级(IAP)_stm32远程烧写程序_我滴阿紫的博客-CSDN博客

物联沃分享整理
物联沃-IOTWORD物联网 » STM32远程升级实现:Bootloader与应用程序结合

发表评论