3 服务器端的软件设计
3.1 升级文件传输的数据格式
为了达到快速准确升级的目的,首先对原始的升级代码(Intel Hex文件)进行打包,然后加人相应的数据包ID号和校验码,并定义数据包长度≤256个字节,以适应G:PRS通信方式对数据包长度的要求,避免出现频繁掉线和发送不出去的问题。具体的数据包格式如下:数据包格式:PacklD+起始地址+长度+数据+校验码;PackID:一个完整的数据包为一个记录,下一个数据包的记录号自动加1;起始地址:烧写数据的FLASH首地址。即数据部分中包含的第一条数据的记录地址+线性扩展地址;长度:该包数据部分的字节数;数据:同一个扩展线性地址记录内且地址连续的数据记录的数据域。当读到一个扩展线性地址记录号后,将此扩展线性地址记录号内的数据区域打包成256个字节之内的数据包,超过256个字节或读到下一个扩展线性记录号时则另起一个新的数据包;校验码:CRC循环冗余校验码。
3.2 服务器端主要程序流程
服务器端主要程序流程图如图4和图5所示。服务器先把升级文件的路径配置完毕,并将要升级的目标程序代码按照第3.1节所示的数据包格式进行打包。并对每个数据包进行编号。
接着如图4所示,服务器发送升级指令,并通过GPRS网络透明传输到远程终端。如果当前运行的用户程序代码在1区,则将2区升级数据发送给远程终端,否则将2区升级数据发送给远程终端。由于地形和环境因素的影响,GPRS网络在远程通信过程中可能出现阻塞或断开的情况。
如果服务器在一定的时间内没有收到远程终端的应答信号,则重发,如果三次重发失败则保存成功接收到的数据块ID号和数据校验码,进入断点续传。升级文件传输完毕则发送跳转指令,使远程终端执行新的程序代码。
3.3 服务器端西己置表
服务器端升级配置表中重要字段的配置如下:
这些字段将服务器和远程终端紧密地联系起来,使得编程思路更加清晰,Update ID标志了用户程序目前所在存储区;Update User Zone为升级做好文件配置准备工作,LastOrder为断点续传做好准备,保证整个程序的紧密性以及可靠性。
4 结 语
该方案采用应答机制、断点续传、CRC校验等技术,充分利用ARM芯片内部FLASH存储器资源,通过GPRS网络,实现对ARM嵌入式终端的系统软件进行远程在线升级,解决了大型分布式监控系统远程嵌入式终端系统软件的在线升级和维护问题。该方案已经成功地应用在南京航道局的航标自动监测系统中,该系统有600多盏安装有嵌入式终端的航标灯,对该系统进行在线升级仅耗时20 min,且一次性升级成功。实践证明,该方案的实施可有效降低工程复杂度,缩短升级时间,节约升级、维护成本,同时具有升级成功率高和升级速度快的特点。