时间:2024-09-03
杭州浙达精益机电技术股份有限公司 郑俊翔 陈朱峰 朱 伟
随着4G网络的普及,使野外实时监测设备得以方便的实现,但是安装野外的设备存在着两个问题:(1)设备一般安装的比较偏远;(2)设备一般成分布式排布,每台设备间相距比较远;这样使设备的系统升级极不方便。文章提出了通过4G网络实现以STM32为微控制器的设备的远程系统升级方案。从而实现远程对野外设备的系统升级,大大的提高了生产效率,并且可以及时对设备运行过程中发现的bug进行修复。
在铁轨断轨监测,水源水质监测,输油管道结构健康监测等监测系统中,都需要在野外安装设备,并且存在仪器多,分布广等现象,同时个别监测系统,还会存在着分布式设备之间彼此需要协调交互工作。当出现各种原因,需要对仪器设备固件进行升级时,需要工作人员到现场进行升级,将会严重影响工作效率,并且需要消耗大量的人力物力。本文提出的基于4G网络和STM32的远程升级方案,能有效的解决人员到现场升级设备,并且能够更快更便捷的实现系统的升级,极大的减少了生产成本。
远程升级仪器是基于STM32微控制器,整个仪器的硬件组成包括太阳能供电,电源管理系统,GPRS_4G通信部分,EEPROM外部存储器和其他用户功能模块。图1所示为升级功能部分的的主要硬件组成。
图1 升级功能模块硬件框图
STM32通过串口和GPRS_4G模块进行连接。GPRS_4G通信模块可以实现串口到网络的双向数据透明传输,可以通过此模块实现发送数据到网络上指定的服务器。模块也可以接收来自服务器的数据,并将信息通过串口发送至STM32,如图2所示。
EEPROM(Electrically Erasable Programmable read only memory)是指带电可擦可编程只读存储器。是一种掉电后数据不丢失的存储芯片。做为外部的一个独立存储器,可以在程序升级前后保存系统配置数据,保证系统升级前后数据的一致性。同时也可以为升级提供一些辅助标志功能。
IAP即应用编程,本系统中设计两个程序:Bootloader(引导加载程序)程序和APP(应用程序)程序。Bootloader程序不执行应用的用户功能操作,只负责接收服务器发送过来的系统升级的数据,并跳转到对应的APP程序。APP程序为用户功能代码,执行用户功能操作,同时可以接收服务器的升级请求,跳转到Bootloader程序进行升级操作。
表1 STM32启动方式选择
图2 4G网络传输示意图
STM32有三种启动模式,用户可以通过设置BOOT0和BOOT1的引脚电平状态,来选择复位后的启动模式,如表1所示。
图3 FLASH存储器空间分配
STM32的FLASH地址起始于0x08000000,正常工作模式下,程序文件就从此地址开始写入。那么栈顶地址存放于0x8000000处,而“中断向量表”的起始地址为0x8000004处。当STM32遇到复位信号后,则从“中断向量表”处取出复位中断服务入口地址,继而执行复位中断服务程序,然后跳转__main函数。
本系统中使用STM32的FLASH存储器大小是512K,此空间被划分为三大块,分别用于运行Bootloader程序,APP程序1,APP程序2,如图3所示。
远程升级系统,存在着一定的不确定性,如通信中断,仪器缺电等情况,这些情况都会导致系统升级失败,则在升级的过程中,不能把原来的APP程序给擦除了。所以用户功能代码区分为APP程序1和APP程序2两个区域。其中一个区域用于当前运行的程序,另外一个区域用于装载升级程序代码。
图4 Bootloader 程序流程图
因为Bootloader程序只负责升级部分代码,代码量相对APP程序来说较小,这里分配的地址为0x8000000至0x8012000区间,大小为72K。而APP程序为用户代码,需要实现各种实际应用中的功能,代码量相对较大。则把FLASH剩余的空间对半分,分别分配给APP程序1和APP程序2,分配地址为0x8012000至0x8049000和0x8049000至0x8080000,各220K大小的存储空间。
远程升级系统开机启动时,首先运行的是Bootloader程序。程序首先在外部EEPROM里面读取当前APP程序运行的FLASH存储器空间标志信息,再检测程序是否需要升级。当检测到程序需要升级,则GPRS_4G模块通过网络从服务器上接收升级固件,并存储到当前未被使用的APP程序存储空间里。升级固件接收完毕后,跳转到升级固件存储的APP程序存储空间,运行更新后的程序。如果没有检测到升级,则直接跳转到当前APP程序存储器空间,运行当前APP程序,流程图如图4所示。
表2 通信协议表和示例
当升级过程中出现异常,如升级过程中,网络通信出现中断,长时间接收不到升级固件,则直接跳回到当前APP程序存储器空间,运行当前的APP程序。
图5 APP程序流程图
APP程序流程图如图5所示,首先复位存在外部EEPROM里的升级请求信号,然后在EEPROM里面置位当前使用FLASH的标志位。这样下次再进入升级程序后,可以根据EEPROM里的FLASH的使用标志信息,判断升级固件应存放那块APP程序区域。最后进入用户程序,用户程序实时监听是否有升级请求,当有接收到升级请求信号后,跳转到Bootloader程序。
分布式系统中,由于仪器众多,在进行固件升级时,需要遵循一定的通信协议,才能正确的进行升级。服务器发送的数据分9部分,如表2所示。
为了降低远程传输数据出现的误码率,把升级固件拆分成小包进行传输。包的长度可以根据实际使用的情况,在通信协议里进行设置,如在表2的例子,固件数据包的长度设置为1024个字节。索引号表示当前传输的数据包是第几包,当出现传输错误,CRC32效验不正确时,终端仪器会返回错误接收的数据包的索引号,服务器根据索引号,重新发送此索引号的数据包。当终端仪器正确接收完当前包数据后,给服务器返回应答信号,直到固件升级完成。
结束语:本文着重讲述了基于4G网络和STM32远程系统升级的硬件设计框架,IAP的远程升级原理,系统的程序逻辑设计和固件升级的通信协议。在野外分布式监控系统中,该远程升级系统的运用,极大的提高了生产效率。此设计方案也可以运用到其他的一些需要远程操作的应用场合。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!