基于STM32的嵌入式设备程序无线更新系统

2017-10-26 00:15周李钱龙
电脑知识与技术 2017年22期

周李 钱龙

摘要:嵌入式设备经常需要程序更新以进行设备维护和升级。该文结合在应用编程(IAP)技术和蓝牙技术设计出一个无线更新系统来实现嵌入式设备程序的更新。其主要目标是:在不接触嵌入式设备的情况下,对设备进行程序无线更新。这种更新方式可节约嵌入式设备成本,提高工作效率,是对传统有线更新方式的一种创新。

关键词:STM32;嵌入式设备;lAP;无线更新

中图分类号:TP23 文献标识码:A 文章编号:1009-3044(2017)22-0212-02

随着嵌入式设备广泛应用,各行各业对嵌入式设备的系统功能、性能的要求都在日益提高。开发者必须能够针对客户的需求及时方便地对系统进行维护和升级,以延长系统的使用周期,改善系统的性能。显然传统的点对点的有线下载更新维护方式已经不适应了。鉴于此,本文对基于STM32微控制器的嵌入式系统软件远程无线升级技术进行研究,提出了一种已成功验证的无线升级实现方法。

1在应用编程(IAP)

在应用编程(In Application Programming,IAP)是指最终产品出厂后,由最终用户在使用中对用户程序部分进行编程,实现在线升级。IAP技术从结构上将Flash存储器映射为两个存储体,当运行一个存储体上的用户程序时,可对另一个存储体重新编程,之后将控制从一个存储体转向另一个。IAP的实现程序需要由两部分组成:1.引导程序(Boofloader),2.应用程序(APP)。Bootloader负责更新程序的拷贝和跳转到应用程序,必须通过其他手段,如JTAG或ISP烧人。APP运行程序要实现的功能和更新程序的下载、保存。可以使用IAP功能烧入,也可以和第一部分代码一道烧入,以后需要程序更新是再通过第一部分IAP代码更新。

2系统总体设计

本系统主要由STM32单片机,无线通讯模块,上位机组成,系统组成如图1所示。用户操作上位机发送相应的指令和所需要更新的程序文件(bin文件),无线通讯模块负责将控制指令和更新程序从上位机传送到STM32嵌入式设备,STM32接收到了正确的控制指令和更新程序后,开始运行新的程序,接收顺序不分先后。

3程序更新流程

开机时STM32单片机先运行Bootloader程序,检测片内Flash(或者片外Flash或者FRAM)“程序更新标志”是否置位,如果没有,则直接跳转到应用程序。应用程序运行时检测无线模块收到的数据命令,如果有程序更新指令,则接收程序,并保存到片内Flash的靠后的代码段(或者片外Flashl,接收保存完数据后,片内Flash(或者片外Flash或者FRAM)“程序更新标志”置位,然后重启STM32单片机。STM32單片机重新运行Boofload-er,此时Bootloader检测到有程序更新标志,则将片内Flash的靠后的代码段(或者片外Flash)的更新代码拷贝回应用程序代码段,并复位更新程序标志,然后跳转到应用程序,至此程序更新完毕。

4系统硬件设计

单片机的选用STM32F103VET6。其采用ARM Cortex-M3架构,拥有512KB程序内存,64KB存储器容量,最高可达72MHz的处理频率,完全可以满足此次设计要求。此外我们选取了市面上常见的HC-05主从一体蓝牙模块作为本次的无线通讯模块。它可以实现数据透传,两个蓝牙模块配对成功后(蓝牙模块上的指示灯双闪),可以进行全双工通信。

5系统软件设计

本文设计了一种无线更新的具体实施方案。该方案由Bootloader、APP1、APP2三者组成,三者之间的程序切换无需使用下载线重新下载,操作人员无需接触开发板。该方案的设计思想如图2。

Bootloader、APP1、APP2三者的软件执行过程如下:

1)Boofloader通过指令A跳转到APP1,APP1通过指令D跳回到Bootloader。

2)APP1通过指令c跳转到APP2,APP2通过指令B跳回到AFP1。

3)APP2通过指令E跳回Bootloader。

4)当STM32嵌入式设备接受错误的控制指令时,程序不会执行跳转操作。Bootloader不能直接跳转到APP2,必须要经过APP1执行。

5)当APP2程序运行时,要想继续无线更新,需返回Boot-loader,在Bootloader的运行过程中执行程序的无线更新。新的更新文件会覆盖APP1原来在Flash空间的存储;或者返回APP1,在APP1的运行过程中执行程序的无线更新,新的更新文件会覆盖APP2原来在Flash空间的存储。

6总结

经测试,整个无线更新系统可以完成实现程序跳转,实现STM32嵌入式设备的无线更新。该方法还可以减少嵌入式设备的维护成本、提高设备的工作效率。endprint