基于GPRS的STM32固件远程升级系统

2019-09-10 07:22牛军浩张少壮冯怡凯覃小梅蒙远键
现代信息科技 2019年23期

牛军浩 张少壮 冯怡凯 覃小梅 蒙远键

摘  要:嵌入式产品投入市场后,由于需求的改进或者应用程序BUG的修补,仍需要对产品上的应用程序进行维护、更新,但工程师到现场更新应用程序比较麻烦,嵌入式软件的远程在线升级功能可以使工程师不用亲临现场,直接将编译好的程序通过网络传输给产品,产品上的无线模块接收到应用软件程序包之后自动保存到程序区,由此实现应用程序的远程更新。本课题重点研究和实现了STM32的应用程序远程升级功能模块的方案,主控板通过无线模块与服务器端连接,当主控板运行应用程序时,服务器端可以查看主控板当前的应用软件状态,并向主控板发送升级请求,主控板接受请求后自动进入引导升级程序,接收来自服务器端的应用程序包,完成应用程序的更新。

关键词:远程升级;网络传输;固件更新

中图分类号:TP368.1;TN929.532      文献标识码:A 文章编号:2096-4706(2019)23-0055-03

STM32 Firmware Remote Upgrade System Based on GPRS

NIU Junhao,ZHANG Shaozhuang,FENG Yikai,QIN Xiaomei,MENG Yuanjian

(Guilin University of Electronic Technology,Guilin  541004,China)

Abstract:After the embedded product is put into the market,due to the improvement of the requirement or the repair of the application program BUG,the application program on the product needs to be maintained and updated. But it’s hard for engineers to update the application on site,the remote on-line upgrade function of the embedded software can enable the engineer to transmit the compiled program directly to the product through the network without being on-site,and the wireless module on the product is automatically saved to the program area after the application software package is received,thereby realizing the remote update of the application program. This project focuses on the research and implementation of the STM32 application remote upgrade function module. The main control board is connected with the server end through the wireless module,and when the main control board runs the application program,the server side can view the current application software state of the main control board,and sends an upgrade request to the main control board,the master control board automatically enters the boot upgrade program after receiving the request,receives the application package from the server side,and finishes the update of the application program.

Keywords:remote upgrade;network transmission;firmware update

1  緒论

1.1  课题的背景及意义

如今一些产品投放市场后仍需要工程师亲临现场维护,部分是由于应用软件的BUG需要修补,部分是用户需求的改进,还有部分是市场需求的提高等等,诸多原因都需要更新应用程序,若可以远程对应用程序进行更新,则可以节省很多的人力、物力以及时间,给产品维护带来很大的方便。尤其是对于一些无人值守的产品,只需要在远程给产品发送升级申请,产品对版本号进行判断后自行选择是否进行更新,无需人为操作,更新完成后直接运行应用程序,智能化使产品维护更加便捷。

1.2  应用软件远程升级功能的研究现状及发展趋势

1.2.1  应用软件远程升级的研究现状

应用软件远程升级功能目前大多是依赖于无线通信,单片机可以通过各种接口与无线模块进行数据传输,如今网络已覆盖国内大部分地区,通信稳定、速度快、可永远在线等优点为应用软件的传输提供了十分良好的环境。

借由无线模块将应用软件包传输到单片机上,单片机即可执行自我升级,也就是在应用升级(In Application Programming,IAP)。当单片机在运行程序的时候可以提供一种改变FLASH数据的方法,也就是说程序自己可以往程序存储器里写数据或修改程序。这种方式的典型应用是用一小段代码来实现程序的下载。

1.2.2  应用软件远程升级的发展趋势

应用软件远程升级的未来发展趋势是向着智能化的方向发展。无需人为操作,一键升级,自动备份老版本程序,防止突发故障丢失升级程序包,使得升级的可靠性得到很好的保障。这对于产品应用程序的维护和更新均有有很大的意义。

2  应用软件远程升级相关技术与原理分析

2.1  C#搭建Socket服务器平台

Socket是面向客户/服务器模型设计的,针对客户和服务器程序提供不同的Socket系统调用。客户随机申请一个Socket(相当于一个想打电话的人可以在任何一台入网电话上拨号呼叫),系统为之分配一个Socket号;服务器拥有全局公认的Socket,任何客户都可以向它发出连接请求和信息请求。.net平台封装了建立Socket通信所使用的类,在VS2010上利用C#语言可以很方便地把服务器搭建起来。

2.2  TCP/IP协议

Transmission Control Protocol/Internet Protocol,即传输控制协议/因特网互联协议,又名网络通讯协议。简单来说:TCP控制传输数据,负责发现传输的问题,一旦有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地,而IP是负责给因特网中的每一台电脑定义一个地址,以便传输。相较于UDP协议,TCP传输速度比较慢,但其可靠性较高。

2.3  CRC校验

CRC(Cyclic Redundancy Check)即循环冗余校验码,是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。

2.4  IAP技术

IAP(In-Application Programming)即在应用编程,指单片机可以在系统中获取新代码并对自己重新编程,即可用程序来改变程序。单片机通过串口接收新代码,将其写入对应的FLASH分区,设置地址偏移并移动PC指针,使程序在对应的分区内运行。

将FLASH的主存储器分成五个部分,最初的区域为BootLoader区(起始于0x08000000),这里放置BootLoader程序,由JTAG烧录,其作用是接收应用程序包、备份应用程序、存储应用程序等。一般情况下,程序文件从此地址开始写入;其次是应用程序区,应用程序主要存放在这个地址段,升级完成后将PC指针指向该地址段的首地址,使应用程序在这里运行;再往后是应用程序的备份区,为防止升级过程中出现故障,所以在FLASH中开辟出一片区域将当前版本的应用程序存储起来,当终端重新上电或者升级超时之后再将APP从中恢复出来,以免系统丢失应用程序无法正常工作;随后是公共指令区,一些指令、标志将会存在这片区域,应用程序或者BootLoader都可以访问这片区域,如升级标志,进入升级之前在应用程序中将升级标志置1,进入BootLoader升级成功之后将其置0,系统去读这个标志的时候就知道将要运行哪个区域的程序了。

3  系统整体框架

系统整体的框架如图1所示,通过服务器端点击按键进行操作,打开服务器,等待无线模块的连接。无线模块与服务器端连接上之后,点击按键通过Socket给无线模块发送请求(包含版本号),无线模块将服务器端传输过来的信息通过串口发送給单片机。当接收到升级请求时,单片机在FLASH公共命令区写下升级标记并告知服务器端,随后跳转至BootLoader程序。若单片机进入了BootLoader程序,点击开始升级的按键之后,服务器端读取应用程序文件,将其发送给终端,BootLoader程序接收这个程序包,并对其进行校验、保存。为保证数据的可靠传输,采用Ymodem协议进行文件的传输,单片机要先给服务器端发送请求,服务器端才开始传输文件,等待终端收到数据包并且校验通过之后,终端会进行应答,此时服务器端才开始发送下一帧数据。应用程序升级成功后,BootLoader才会置位FLASH公共命令区中的标记,将PC指针指向APP程序区的首地址。

3.1  服务器

服务器端的主要功能是将应用程序文件通过网络发送给终端,并观察终端应用程序升级的过程中每一个阶段的状态。在Visual studio 2010中建立一个窗体,搭建友好的人机交互界面,利用.net平台上封装好的Socket类库新建一个服务器。

各个阶段终端反馈回来的信息都显示在服务器端的消息窗口上,如图2所示,如此可以直观地了解终端的各个状态。

3.2  终端设计

3.2.1  Bootloader

终端负责接收来自服务器端的升级请求,进行判断之后进行应答,能对当前应用程序进行备份与恢复,成功升级以及应对升级过程中的突发事件。

在FLASH中的公共指令区存放了一个切换程序的标志,保证BootLoader和APP都能访问。系统上电之后首先会在BootLoader程序中读出这个标志,若判定要进入APP程序,则检查APP程序区存放的栈顶地址是否合法(中断向量表中的第一个放的是栈顶地址),只有APP程序的栈顶地址合法的情况下才会去执行APP,否则就从备份区中把上一次备份的APP调出来执行。将PC指针指向APP程序的起始地址,使程序在APP程序中运行。

应用程序的备份与恢复是一样的过程,备份要求从APP程序区将数据读取出来,保存到备份区,而恢复则是把数据从备份区读出来,保存到APP程序区。

在BootLoader中接收数据时,会把数据的长度length写入FLASH中,在进行数据的备份和恢复时,去访问FLASH中指定数据区域的首地址,读取逐个地址的数据,再逐个写到备份区或者APP程序区中,直到读出的数据长度满足等于length时,说明已经完整地读取出了APP数据包,并成功写入指定分区。清除备份标志或者恢复标志,成功完成备份或恢复。

数据包传输结束之后,服务器端会发送一个EOT信号,此时数据传输进入第三阶段,收到这个信号时,除了回复应答信号之外,还要发送请求,等待服务器端发送全零数据包,收到这个全零数据包意味着所有数据已经成功传输。每次接收数据都判断是否超过10秒,计超过的次数,当超过6次(1分钟)则判定为升级超时。

3.2.2  APP

封装了一个函数加入到APP中,在APP程序中,设置程序起始地址和中断向量表偏移,利用串口与无线模块连接,在程序中将串口传过来的数据缓存起来,调用封装好的Request函数,解析缓存区中的数据,即可进行应用程序的升级。Request函数的具体流程首先在数据缓存区中找到数据头,数据头由0xAA和0xF6两个字节组成,第三个字节为功能指令,这里定义0x01为升级指令,第四个字节为新的APP的版本号,最后一个字节为和校验,数据头找到之后,往下找到和校验,将数据头到和校验之间(包含数据头,不包含校验)的数据相加,结果取低八位,拿去与和校验进行对比,若一样,则表示数据没有出错,判断功能指令处是否为0x01,确定为0x01,则提取出新的APP版本,与当前的版本号(保存在FLASH中)进行对比,若新的版本号大于当前版本号,将备份标志和升级标志置1,记录新的版本号,将这些信息存入FLASH中,舒适化堆栈指针,使其指向BootLoader的首地址,执行BootLoader程序,进行应用软件升级。

4  结  论

完成的工作:成功进入BootLoader并进行备份,服务器端请求升级,进入BootLoader并成功执行备份操作。旧版本的APP让两个LED快速循环闪烁,BootLoader中令一个LED快速闪烁,新版本的APP让两个APP慢速循环闪烁。在终端可以看到由两个LED快速循环闪烁变为一个快速闪烁,表明终端以进入BootLoader程序。成功升级,实现远程、在线升级应用程序,升级成功自动运行最新的程序,升级成功率为90%以上。数据传输完成后,服务器端会有提示:“APP成功升级至新版本”,终端的表现为从BootLoader(一个LED快闪)转化成新的APP版本(两个ALED循环闪烁)。升级超时、升级失败、校验失败等故障,超过一分钟不给终端发送程序包,服务器端窗口提示超时,自动从备份区中恢复并执行旧版本程序。

存在的问题:单次只能升级一个终端的应用程序,无法进行批量升级。

未来的研究方向:优化服务器端程序,实现多线程操作,同步升级多个终端;在服务器端后台进行优化,自动判断是否可以升级,并确定发送程序包。

参考文献:

[1] 曾自怡,李靖沙.GPRS通信技术在五凌电力水情测报系统中的应用 [J].水电站机电技术,2019,42(9):29-31.

[2] 郑欢欢,钱宇坤.基于GPRS的远程抄表系统的设计 [J].工业计量,2019,29(4):23-26.

[3] 李坊玉.STM32 ST-LINK Utility应用功能及使用方法(三) [N].电子报,2019-09-15(007).

[4] 刘定良,陈文科.基于GPRS和PLC的大学校园配电网远程监控系统设计 [J].智库时代,2018(47):163-164.

[5] 谢世春,陈露,李继扬.大数据时代下计算机网络信息安全问题 [J].电子技术与软件工程,2019(19):178-179.

作者簡介:牛军浩(1981-),男,汉族,河南林州人,就职于测控技术与仪器系,主任,高级实验师,工学硕士,研究方向:智能仪器、自动测试总线。