本发明涉及一种远程升级方法,尤其是一种基于stm32控制器的gprs远程升级方法,属于无线通信领域。
背景技术:
当前,设备在进行功能升级时,需要对设备进行重新下载程序。传统的设备在进行程序升级的时候,只能现场用仿真器对控制器下载程序,这给厂家带来了极大的不便,并且许多远程控制设备在进行远程升级程序时,容易导致升级不成功。
技术实现要素:
为了提高现有的远程升级设备的升级效率,本发明提供了一种能提高远程升级稳定性,缩短升级时间的基于stm32控制器的gprs远程升级方法。
本发明解决其技术问题所采用的技术方案如下:
一种基于stm32控制器的gprs远程升级方法,所述gprs的远程升级方法包括如下步骤:
1)程序生成阶段:通过类似keil编译器将文件生成hex文件格式,再将hex文件加载到服务器端;
2)设备选中:服务器可以通过人为主动点选进行单台或者多台设备的固件升级;
3)程序升级消息通知:服务器向设备端发送程序更新消息,设备端开始进行升级;
4)设备端预处理:设备端在进行升级前,stm32控制器采用随机采样的方法计算求出信号质量
5)设备端接收升级程序处理:设备端向服务器发送开始升级程序指令时,设备端开始采用防误码通信协议机制进行接收服务器升级程序固件,即设备端在接收程序包时,包序列要与设备端包计数一致。在接收完所有包时,设备端计算程序校验值,并与服务器下发校验值比较。另外,设备端需要通过动态规划计算出设备端每次接收完当前包后需要等待服务器下发下一个包的时间t,即自适应系统延时;
6)设备端iap在线程序升级:设备将存储在外部flash的程序转换成bin格式在线下载到应用程序空间,完成升级。
进一步,在所述步骤4)中,设备获取信号质量
a.在设备向服务器发送长度为l的数据包后,芯片不断向通信模块查询信号量,得到n组信号质量(q1,q2,...,qn);
b.分析得到的n组信号质量(q1,q2,...,qn),求出理想的信号质量
c.将步骤a和步骤b进行s次,得到一组信号质量
再进一步,在所述步骤5)中,设备等待时间t的动态规划过程,包括以下步骤:
a.设备向服务器发送数据长度为l的数据包,l的取值范围为0-300;
b.在设备向服务器发送长度为l的数据包后,打开芯片定时器开始计数,直到芯片接收到服务器发回的应答信号,定时器停止计数,设备按此操作重复发送s组数据包,得到时间(t0,t1,...,ts);
c.计算当前等待时间,服务器需查询本次的信号质量,记为q;
d.自适应等待时间t:
由公式(1)得到
将
其中,c=1,k个信号质量
在所述步骤4)中,设备得到区间中信号质量
在所述步骤d中,k个信号质量
所述步骤a和b都是在所述步骤4)中进行的,在设备允许程序升级时,求出固定值
再进一步,在所述步骤5)中,在计算每次设备端需要等待服务器下发的时间前,服务器只需查询当前的信号质量q,就可根据公式得到当前自适应时间t。
本发明的有益效果表现在:(1)通过在升级前随机向服务器发送几组数据包,判断当前的信号质量是否允许升级,提高远程升级的成功率;(2)动态规划自适应的rto,提高了整个升级过程的效率;(3)防误码通信机制提高了整个升级过程的准确性,防止出现丢包,误码,以及单片机在线升级失败的情况;(4)控制方法基于stm32实现,资源丰富并且能减小控制器的体积。
附图说明
图1为基于stm32远程升级实现的软件流程图。
图2为基于stm32远程升级实现的硬件流程图。
具体实施方式
下面结合附图对本发明的实施方式作进一步描述。
参照图1和图2,一种基于stm32控制器的gprs远程升级方法,所述gprs的远程升级方法包括以下步骤:
1)程序生成阶段:通过类似keil编译器将文件生成hex文件格式,再将hex文件加载到服务器端;
2)设备选中:服务器可以通过人为主动点选进行单台或者多台设备的固件升级;
3)程序升级消息通知:服务器向设备端发送程序更新消息,设备端开始进行升级;
4)设备端预处理:设备端在进行升级前,stm32控制器采用随机采样的方法计算求出信号质量
5)设备端接收升级程序处理:设备端向服务器发送开始升级程序指令时,设备端开始采用防误码通信协议机制进行接收服务器升级程序固件,即设备端在接收程序包时,包序列要与设备端包计数一致。在接收完所有包时,设备端计算程序校验值,并与服务器下发校验值比较。另外,设备端需要通过动态规划计算出设备端每次接收完当前包后需要等待服务器下发下一个包的时间t,即自适应系统延时;
6)设备端iap在线程序升级:设备将存储在外部flash的程序转换成bin格式在线下载到应用程序空间,完成升级。
进一步,在所述步骤2)中,服务器在人为选择设备升级之前,设备应向服务器发送注册帧,注册帧中包含设备mac地址、sim卡的sim卡号、软件版本号和硬件版本号,这个是用来区分升级程序的每个子设备。
再进一步,在所述步骤3)中,设备端发送程序更新消息时,设备端应先判断是否是空闲状态,若是空闲状态,则向服务器发送等待下发程序应答指令,否则向服务器发送结束升级程序应答指令。
再进一步,在所述步骤4)中,设备获取信号质量
a.在设备向服务器发送长度为l的数据包后,芯片不断向通信模块查询信号量,得到n组信号质量(q1,q2,...,qn);
b.分析得到的n组信号质量(q1,q2,...,qn),求出理想的信号质量
将步骤a和步骤b进行s次,得到一组信号质量
再进一步,在步骤4)中,设备得到区间中信号质量
再进一步,在所述步骤5)中,设备等待时间t的动态规划过程,包括以下步骤:
a.设备向服务器发送数据长度为l的数据包,l的取值范围为0-300;
b.在设备向服务器发送长度为l的数据包后,打开芯片定时器开始计数,直到芯片接收到服务器发回的应答信号,定时器停止计数,设备按此操作重复发送s组数据包,得到时间(t0,t1,...,ts);
c.计算当前等待时间,服务器需查询本次的信号质量,记为q;
d.自适应等待时间t:
由公式(1)得到
将
其中,c=1,k个信号质量
再进一步,在步骤5)中,防误码通信机制,包括以下步骤:
5.1)服务器分包下发程序时,服务器首先要将待下载的hex文件,按照hex文件检查规则,如若错误,本次固件升级的过程终止;
5.2)由于hex文件每行都有校验,将hex文件分包下发时,每包的包校验等于每行的校验之和;
5.3)将hex文件前面的冒号去掉转化成16进制文件形式发送,服务器开始向设备发送固件升级消息,采取握手应答的方式,服务器先发出第1条固件升级消息,设备端收到回复一条固件升级消息,服务器收到回复后再发送第2条升级消息......,直到最后一条固件升级消息回复到服务器;
5.4)由于hex文件每行的字节数偏少,因此每发送一包固件升级信息可以包含hex文件中的10行信息,最后不足10条的按实际条数发送;
5.5)协议中每个包有包序列,设备接收包时也对包进行计数,这样,保证了不会产生丢包和错包,当在等待时间内未接到或接到包序列不一致的包,设备向服务器发送重发指令,服务器进行当前包重发,在规定的等待时间内,设备端发起3次重发指令,最后还是未接受到正确的包,则本次升级失败,这种升级方式保证了通信的正常进行;
5.6)当接收完所有包之后,服务器下发升级完成消息,首先,设备按照hex文件检查规则,如若错误,本次固件升级的过程终止;其次,消息中包含了hex文件每行的校验和的后两位,设备再将接收到的hex程序每一行校验值相加,取最后两位与升级完成消息的校验位进行匹配,一致时,设备发起升级完成消息,否则,发送升级失败消息,设备在升级失败的时候都恢复升级前的状态,等待服务器下一次的升级消息。
最后,在所述步骤6)中,设备端程序升级:对于出厂模式的设备和工作模式的设备,设备进行升级的方式有所不同,如图2所示,出厂模式的设备在进行升级时是程序在stm32芯片内部flash的bootloader区中运行,正在运行的程序将通信模块的接收到的程序存储到外部flash中,接收完升级程序时,再往内部flash中app区中进行烧写程序,烧写完后再跳入app程序中;而工作模式的设备在升级时是通过app区中正在运行的程序将通信模块接收到的程序存储到外部flash中,接收完升级程序时,芯片复位,stm32芯片从app区跳到bootloader区,再通过bootloader区将外部flash的程序烧写到app区中,程序再从bootloader区跳到app区中运行。
本发明提出的一种基于stm32控制器的gprs的远程升级方法,采用在升级之前判断当前信号质量是否良好,是否适合升级,提高了升级的成功率,设备端每次接收包到服务器发下一个包需要等待的时间采用动态规划,缩小了整个升级程序的时间,提高了设备在实际时使用中可以缩小程序升级时间,更快的进入工作模式。对于出厂模式和工作模式的设备,stm32分为两种方式进行升级,提高了单片机在线升级的成功率。