车载终端的功能应当随着用户的需求而变化,因此车载终端的升级维护也显得越来越重要。然而,目前大部分车载终端还不具有远程升级的功能,必须在现场通过预留的通信口下载更新程序才能升级,升级维护相对比较困难而且也增加了成本。针对这样的情况,本文提出了一种具有可行性的远程升级解决方案。监控中心只需要发送一条远程升级指令给车载终端,车载终端就能自动的更新自身的固件程序,简单方便而且安全可靠,还可以让所有的车辆同时升级。
1.远程升级的基本原理
1.1 lAP简介
lAP(In Application Programming)是用户自己的程序在运行过程中对内部Flash的部分代码区域重新烧写。要实现lAP功能需要在设计固件程序时编写两个项目代码,第一个项目代码为BootLOAder程序,第二项目代码为UserApp程序,即用户功能程序。BootLoader程序不执行正常的功能操作,只执行对第二部分代码的更新;UserApp程序才是真正的功能代码,这两部分项目代码都同时烧录在内部Flash中。
1.2 远程升级的基本原理
远程升级有两种模式,主动模式和被动模式。主动模式是指车载终端自动检测是否有新版本的程序需要更新,被动模式是指监控中心给车载终端下发升级指令后车载终端才执行远程升级操作。本课题中,使用的是被动模式。车载终端收到监控中心发送的远程升级指令后,连接远程FTP服务器,建立连接后下载要更新的程序代码,同时将其写入车载终端的外部flash中,更新程序代码下载完毕后,对其进行校验,校验通过后,自动重启终端进入BootLoader模式,利用lAP技术重新烧写User-App程序代码区域。烧写完毕后,跳转到新的UserAPP程序执行,然后给监控中心发送远程升级成功指令。可以用图1形象地表示远程升级的过程。
图1 远程升级的过程
2.远程升级系统的设计与实现
2.1 车载终端的硬件结构
车载终端硬件结构如图2,这里只介绍与远程升级相关的模块,核心处理器使用ST公司的STM32系列MCU,该系列MCU支持IAP编程技术,外围无线通信GPRS模块使用SIMCOM公司SIM900A,SIM900A的最新软件版本可以支持FTP协议,外部大容量存储器。
图2 车载终端硬件结构简图
2.2 Flash空间划分
2.2.1 内部Flash空间划分
STM32的内部Flash地址起始于0x08000000,一般情况下,程序文件从此地址开始写入。STM32是基于ARM CortexM3内核的微控制器,其内部通过一张“中断向量表”来响应中断,程序启动后首先从0x08000004地址取出复位中断向量的地址,并跳转到复位中断服务程序,如图标号①所示;在复位中断服务程序执行完之后,会跳转到我们的main函数,如图标号②所示;而main函数一般都是一个死循环。在main函数执行过程中,如果收到中断请求,此时STM32强制将PC指针指回中断向量表处,如图标号示;然后,根据中断源进入相应的中断服务程序,如图标号④所示;在执行完中断服务程序以后,程序再次返回main函数执行,如图标号⑤所示。整个过程如图3所示。
图3 STM32程序运行流程图
BootLoader程序也有自己独立的中断向量表、中断处理例程和主循环程序,在Flash中加入BootLoade程序后各个程序的地址分配如图4,其中M为UserApp程序中断向量表的偏移量,(0x08000000+M)为UserApp程序的起始地址。
图4 BootLoade程序UserApp程序地址分配图
2.2.2 外部Flash空间划分
外部Flash空间大小为1MB,一共分成16个扇区,每个扇区64KB,远程升级使用其中的4个扇区,这4个扇区又划分为两部分,前两个扇区作为更新代码区,后两个扇区作为备份代码区。每一次代码更新成功后都会将更新代码区的程序拷贝到备份代码区,也就是说备份代码区始终保留的是终端最近一次更新成功的代码。
2.3 FTP远程文件下载
监控中心给终端下发远程升级指令的同时会将FTP服务器的IP、端口号、用户名、密码、更新程序的文件名称和路径发送到终端,终端根据这些参数通过AT指令配置GPRS模块,然后连接到FTP服务器,连接成功后请求下载更新程序文件。由于更新程序文件大小一般为几十KB,最大不会超过100K。而FTP一次请求不超过1460B,因此需不断地发送请求,直到没有数据可返回为止。所有的更新程序都会暂存在外部Flash的更新代码区。图5表示了这样一个过程。
图5 FTP远程文件下载流程图
另外,远程升级系统可以自适应网络,根据网络的状态调整数据下载的速度。终端和FTP服务器建立连接后,相当于建立一条数据链路,监控中心给终端反馈该链路的数据容量,终端依此调整请求数据下载的速度,以平衡网络负荷,提高数据下载的可靠性。
2.4 lAP编程的实现
STM32有一个Flash编程和擦除控制器(FPEC),FPEC模块是一个寄存器组用以处理Flash的编程和擦除操作。每次复位后,FPEC模块是被上锁的,需要向FPEC模块控制寄存器写入一组键值序列keyl和key2才可以解锁,解锁后可以操作其他寄存器。为了防止对用户代码区的非法访问,通常Flash的页(每页的大小为2KB)是加以保护的,试图在受保护的页面进行编程都会在FPEC模块中返回一个保护错误标志。
lAP编程的对象主要是UserApp代码区域,在编程前必须先根据UserApp代码区域的起始地址和代码大小计算出要编程的区域在flash中的开始和结束页号,然后判断这些页号是否在受保护的区域内,在去除保护后将这些页统一擦除然后再进行编程。由于要更新的程序存储在外部Flash中,因此在运行lAP程序时,需要在内存开辟缓存,将外部Flash的代码读到缓存中,然后再烧写到Flash UserApp代码区。STM32是以半字(2个字节)的方式对Flash进行编程的,每写入半字后都要从Flash相同的地址再读出这半字,如果读出来的值跟写入的值相同,则继续写入下个半字,否则重写这半个字,这种情况基本不会出现,但是为了万无一失,在编写程序时还是加了这种判断。在烧写完整个UserApp程序后,需要将编程过的页重新设为写保护,然后再将FPEC模块上锁。lAP编程的整个过程可以用图6来表示。
图6 lAP编程的过程
2.5 远程升级的可靠性
对于车载终端来说,可靠性永远都是最重要的。远程升级属于危险系数比较高的一个操作,因此需要对造成远程升级失败的各种情况做分析,并制定好解决方案,以确保升级的可靠性。下面就具体地分析,在目前的技术条件下远程升级过程中可能会出现的一些不稳定因素。
1)网络不稳定,文件下载一半就中断了。这种情况是可能存在的,大部分车载终端使用的是GPRS网络,GPRS网络并没有覆盖到每一个地方,特别是在山区,中继站的密度相对较小,那么离中继站比较远的地方信号比较弱甚至没有信号,此时FTP连接最容易断开,造成文件下载失败。如果FTP连接断开,终端是可以检测到了,如果终端检测到这种情况,会保存已经下载的文件数据,然后重新建立连接,请求下载余下的部分,如果连续几次都失败,就认为本次升级失败,然后将升级失败的情况报告给监控中心。
2)下载的更新文件中部分内容出现错误或丢失其中某些内容。虽然FTP协议是一种建立连接的可靠协议,但是误码率并不是绝对的零。因此我们假设这种情况是存在的,当一个更新文件下载完毕后根据约定的规则会对文件进行校验,如果校验结果与从监控中心收到的校验信息不同,则认为下载的更新文件有错误,丢弃更新文件然后重新下载。另外GPRS模块和MCU是通过串口通信的,在升级过程中必须将该串口置于最高优先级,否则下载的更新文件极易在串口传输中丢失某些字节造成升级失败。
3)在lAP编程的过程中出现错误。如果在lAP编程过程中出现错误,新的UserAPP程序是不能正常的运行的,在跳转到UserAPP程序执行之前看门狗是打开的,如果UserAPP不能正常运行,则不能执行喂狗操作,在喂狗时间到后系统就会自动重启进入BootLoader程序,在BootLoader程序中可以检测到上一次更新失败,然后会重新执行lAP编程操作,如果连续几次升级失败,说明更新程序有问题,最后BootLoader程序会加载备份程序代码,将系统恢复到升级之前的状态。
2.6 远程升级系统的总体实现
2.6.1 远程升级系统的总体实现
FTP远程文件下载,lAP编程这两个部分实现后,再加入对远程升级系统可能出现的意外情况的处理,那么整个远程升级系统基本就实现了。图7,表示出远程升级系统的总体实现过程。
图7 远程升级系统的总体实现流程图
2.6.2 远程升级系统的测试
以上分析过3种可能导致远程升级失败的情况,除了第三种情况没有办法模拟,分别模拟了第一种和第二种情况。第一种情况,远程升级过程中,主动断开FTP服务器的网络,那么终端必定不会下载到完整的更新程序,造成更新失败,测试结果如表1。
表1 升级过程中断开FTP服务器网络
第二种情况,预先生成更新文件的校验信息,传送给终端,然后随机将更薪程序文件中某些字节去掉,终端下载的是不完整的更新程序,必定校验通不过,造成升级失败,测试结果如表2。
表2 更新程序文件部分字节丢失
最后测试了在网络良好的条件下的升级情况,一共测试了50次,每一次升级过程都在两分钟完成,没有失败的情况,测试结果如表3,因此这样的升级系统是安全可靠的。
表3 网络良好条件下测试
3.结束语
经过多次测试,该升级系统具有比较高的可靠性。未来随着3G网络的普及,车载终端无线通信模块若使用3G模块,该升级系统也是同样适用的。
核心关注:拓步ERP系统平台是覆盖了众多的业务领域、行业应用,蕴涵了丰富的ERP管理思想,集成了ERP软件业务管理理念,功能涉及供应链、成本、制造、CRM、HR等众多业务领域的管理,全面涵盖了企业关注ERP管理系统的核心领域,是众多中小企业信息化建设首选的ERP管理软件信赖品牌。
转载请注明出处:拓步ERP资讯网http://www.toberp.com/
本文标题:车载终端远程升级系统的设计与实现