陈建林,连雪海,姚克波
(中电科(宁波)海洋电子研究院有限公司,浙江 嘉兴 314000)
船舶位置信息的获取对于船员和管理部门都至关重要,船载监管终端采用GPS/BD定位系统获取自身的位置信息,与采集的设备状态、环境温度、航速航向等相关数据打包之后,通过GPRS网络或北斗一代网络上传至监管平台[1]。该监管终端采用太阳能+锂电池的供电方式,不依赖船电供电,可广泛应用于渔船、游船、货船等各类型船舶,能有效提高航海的安全性和监管的有效性。
本文所述的远程升级功能主要用于对船载监管终端的嵌入式软件进行远程维护,避免不必要的现场拆装和人员投入。远程升级操作完成之后,船载监管终端自动执行新的应用程序,实现新的软件功能。
本文设计的船载监管终端选用PIC16系列单片机作为处理器,外围包括供电电路、大容量SD卡、GPS/BD定位单元、GPRS模块和北斗一代模块等,如图1所示[2]。该终端采用太阳能+锂电池的供电方式,光照不足时,通过锂电池供电来维持监管终端的正常工作,光照充足时,由太阳能电池板为锂电池充电。为保证经历长期的阴雨天气,监管终端仍能正常工作,配备了3 W的太阳能电池板和8 000 mAh的锂电池。大容量SD卡主要用于存储终端的状态信息,便于事后追述和情景再现,同时暂存远程升级时平台下发的十六进制文件(Hexadecimal,HEX)。GPS/BD定位单元用于获取船舶自身的位置信息和当前时间信息。
图1 硬件电路原理
该终端采用GPRS和北斗一代的双模通信方式,在GPRS网络翻盖区域之内,终端和平台之间采用GPRS网络进行通信,在GPRS网络翻盖区域之外,终端和平台之间采用北斗一代网络进行通信。这种双模通信方式可以弥补各自的弱点,实现船载终端的全天候、全海域覆盖。但是,本文所述的远程升级功能由于数据量过大,不便于采用北斗一代进行数据传输,只能通过GPRS网络实现远程升级功能。
HEX文件解析是实现远程升级功能的基础,HEX文件解析完成之后,单片机便可通过串口接收来自平台下发的应用程序,再按照特定的规则写入FLASH中,实现船载监管终端的远程升级功能。
Intel HEX 文件是遵循 Intel HEX 文件格式的 ASCII 文本文件。在 Intel HEX 文件的每一行都包含了一个 HEX 记录。这些记录是由一些代表机器语言代码和常量的十六进制数据组成的。Intel HEX 文件常用来传输要存储在 EEPROM/FLASH 中的程序和数据。大部分的 EEPROM/FLASH 编程器能使用 Intel HEX 文件。Intel HEX文件由任意数量的十六进制记录组成,每个记录包含5个域,具体格式如下:
<0×3A> [数据长度1Byte] [数据地址2Byte] [数据类型1Byte] [数据nByte] [校验1Byte] <0×0D> <0×0A>
例::10 0000 00 000080308A0046282000 8A0185019130 56
<0×3A> 每个 Intel HEX 记录都由冒号开头;
数据长度 数据长度域,它代表记录当中数据字节的数量;
数据地址 地址域,它代表记录当中数据的起始地址;数据类型 代表HEX记录类型的域,它可能是以下数据当中的一个:
00-数据记录
01-文件结束记录
02-扩展段地址记录
03-开始段地址记录
04-扩展线性地址记录
05-开始线性地址记录
数据记录 数据域,一个记录可以有许多数据字节,记录当中数据字节的数量必须和数据长度域中指定的数字相符;
校验和 校验和域,它表示这个记录的校验和,校验和的计算是通过将记录当中所有十六进制编码数字对的值相加,以256为模进行以下补足。
HEX文件以行为单位,每行以字符“ : ”(0×3A)开头,以回车换行符0×0D,0×0A为结束。每行开始和结束之间的所有内容,都是以字符形式表现的。上面的例子中,“ : ”后面的“10”表示该行的数据长度为16个字节,“0000”表示该行的有效数据在FLASH中的起始地址为0×0000,“00”表示该条记录类型为数据记录,“000080308A00462820008A0185019130”为该条记录的有效数据,“56”为该条记录的校验和,任意多条上述记录组成一个完整的Intel HEX文件。
并非每条记录都有有效数据,若记录中的第二个字节为0,则这条记录就没有数据。由于每条记录标识数据地址的只有2 Byte,所以最大只能到64 K。为了可以保存更多的有效数据,就有了“扩展线性地址记录”。如果这行的数据类型是0×04,那么,这行的数据就是随后数据的基地址。
第一行是扩展线性地址记录,里面的基地址是0×0004,第二行是数据记录,里面的地址值是0×0000。那么数据000080308A00462820008A0185019130要写入地址为(0×0004 << 16) | 0×0000的FLASH中,也就是写入FLASH的0×40000这个地址。同样,第三行的数据的写入地址为0×40010。当一个HEX文件的数据超过64 K的时候,文件中就会出现多个扩展线性地址记录。 一般情况下,每个HEX文件的最后一行都为:00000001FF,这样的一行数据内容是固定的,数据长度和地址均为0。
平台软件对实际HEX文件的解析,需要综合考虑单片机缓冲区的规模和远程升级的效率。若解析生成的数据包过大,则会占用较多的单片机缓冲区,影响应用程序的执行速度;若数据包过小,势必会增加数据交互的次数,降低远程升级的效率。本文最终选定的数据包上限为80字节,即最多一次性发送5条数据记录。
远程升级过程中,每包数据都要经过串口通信、GPRS网络和SD卡读写等多个环节,为保证远程升级的可靠性,每个环节都要进行严格的数据校验,特别是GPRS网络环节,易因环境干扰等因素产生错误数据,进而导致升级失败。
本文采用简单实用的求和校验算法对数据进行校验,即平台将解析生成的数据包中的地址和有效数据进行求和,生成一个16位的校验和,将该校验和附在数据包的末尾,同时在数据包的最前面增加一个数据头“$”,构成一个新的数据包,然后发送出去。在接收端,根据数据包和校验和之间所遵循的规则进行检验,以确定传送中是否出错。若校验错误,则要求平台重传该包数据;若校验正确,则开始传输下一包数据,直到整个HEX文件全部传输完成。
本文选用PIC16系列单片机作为处理器,该系列单片机自带的增强型FLASH支持固件对自身进行编程,这是由被称为“BootLoader”的固件内核实现的。该固件内核驻留在单片机内,通常使用FLASH中应用程序不常用的一小块空间。当固件内核被激活时,外部设备可以使用串口协议进行读写,以及验证对单片机应用程序进行的更新。应用程序烧写完成之后,“BootLoader”会放弃控制权,让器件正常执行应用程序,直到再次调用“BootLoader”为止。
执行远程升级时,平台软件将解析完成的应用程序HEX文件通过GPRS网络下发至待升级设备的SD卡中,HEX文件下发完成且校验通过之后,再将SD卡中的应用程序通过固件内核下载到单片机的FLASH中,下载完成且校验通过之后,固件内核主动放弃控制权,设备开始正常工作,如图2所示[3-4]。一般情况下,平台软件也可直接将HEX文件通过GPRS网络发送至固件内核,而不经过SD卡中转,但通过这种方式进行远程升级存在一定的风险。若升级过程中出现GPRS网络中断或信号太差,则容易导致设备无法恢复正常工作。
图2 远程升级实现流程
图3为船载监管终端平台软件示意图,图4为安装示意图。执行远程升级时,在平台软件上选中需要升级的单台或多台设备,平台软件按照既定的HEX文件解析方式将数据包逐一发送至监管终端,发送完成且校验通过之后,设备复位并开始正常工作[5]。
本文设计的船载监管终端已在渔船、游船等各型船舶上获得广泛应用,为船员和监管部门提供了很大的便利。终端自带的远程升级功能可以很好地辅助设备的现场维护,提高作业效率,降低人员开销。
图3 远程升级平台界面
船载监管终端以其灵活、实用、免维护等特性,逐步在船舶领域推广应用。本文以船载监管终端的远程升级功能为研究对象,主要完成以下4项工作:(1)应用程序HEX文件解析。(2)文件传输中的数据校验。(3)远程升级流程的设计和实现。(4)对所设计的远程升级功能进行实验验证。实验效果表明,本文设计的远程升级功能达到了预期的设计目的,实现了应用程序的远程更新和维护。
图4 船载监管终端安装示意
[参考文献]
[1]黄东军.物联网技术导论[M].2版.北京:电子工业出版社,2017.
[2]丁灵译.图解物联网[M].北京:人民邮电出版社,2017.
[3]刘雪莲,黄涛. GPRS通信方式下直放站远程升级设计与实现[J].现代电子技术,2015(1):41-43.
[4]刘兆庆,陈长春,彭宇. LXI仪器固件远程升级设计与实现[J]. 测控技术,2012(7):85-87.
[5]Microchip Technology Inc. AN1310. PIC16和PIC18器件的高速串行自举程序[M].New York:Microchip Technology Inc., 2010.