远程升级在节水灌溉控制器上的应用
根据我国的水资源现状,我国政府部门提出了节水灌溉的号召,大量的节水灌溉控制器应运而生。由于我国地域辽阔,不同地方的水资源情况和农田分布情况差别较大,统一采用一种控制方式很不实际,要根据不同的地域设计不同的控制策略;另外,由于国内灌溉区域分布较广,现场维护升级费时费力[1]。针对这些问题,我们需要在节水灌溉控制器中设计远程升级功能。
当前嵌入式设备的程序升级大都利用主控芯片的IAP功能,将Flash划分为2个区,一个区存储引导程序,该引导程序可以实现数据通讯及用户区程序擦写操作,另一个区存储用户程序。当设备需要升级时,先擦除用户程序,然后再接收新的固件代码并将其存储在用户程序区,实现远程在线升级更新。这种程序升级方法适合于通讯状况良好的场合,但农田罐区一般都分布在非人口聚集区,网络通讯状况较差,且经常会出现意外断电的情况,针对这种情况我们在设计时采用了双用户程序区的设计思路,即设计了两个用户程序存储区,升级程序时不擦除当前运行的程序代码,而是把新固件放置在另外一个用户程序区,待固件下载完毕检验无误后再跳转到新的代码区执行,采用这种方法极大的提高了设备的稳定性。
一、硬件设计
节水灌溉控制器采用NXP半导体公司的LPC1763FBD100作为主控芯片,该芯片采用ARMCortex-M3内核,内部集成Flash容量为256KB,该芯片支持在线编程和启动引导功能,可以实现远程程序升级功能。
节水灌溉控制器的无线通讯采用了有人科技的USR-GM3无线通讯模块,支持串口转GPRS的透明传输,该模块与主控芯片LPC1763采用Uart接口连接,通过GPRS与数据中心的服务器连接,如图1所示。
图1 节水灌溉控制器工作系统框图
二、软件设计
将LPC1763的代码区域分为四个区,有一个IAP程序区,一个标志存储区和两个用户区,如表1所示为各区在Flash中的地址分配情况。两个用户区可以存储用户固件,用户区和IAP程序区之间可以相互跳转运行。
表1 LPC1763FBD100Flash分配表区域名称 地址范围 作用说明IAP程序区 0x00000000-0x00002FFF 存储IAP代码,实现远程升级管理控制标志存储区 0x00003000-0x00003FFF 存储标志位,设备地址,用户程序标志等第一用户区 0x00004000-0x00021FFF 存储用户应用固件1第二用户区 0x000-0x0003FFFF 存储用户应用固件2
IAP程序区中存储的代码主要用于负责管理远程升级,确定当前运行程序使用第一用户区的固件1还是使用第二用户区的固件2,程序第一次正常运行时是使用第一用户区的固件1运行的,当第一用户区的固件在运行过程中检测到远程升级请求时,代码跳转到IAP程序区运行,IAP程序负责验证远程升级的确定性,检查当前用户使用的固件程序所在的区域位置(称为当前固件存储区),确定非当前固件存储区,在确保校验正确的情况下,将远程升级代码下载到非当前固件存储区,下载完毕且校验正确后,IAP程序将最新下载固件的存储区设置为当前固件存储区,并修改相应的标志位,跳转到最新固件存储区开始运行,完成远程升级,如图2所示为IAP程序流程图。
图2 IAP程序流程图
三、通讯协议
为了确保安全,在通讯协议中设计了握手、安全认证等环节,所有通讯都采用CRC校验方式,确保数据准确可靠,具体通讯格式如下表
表2 服务器端指令帧格式起始符 地址 命令字 数据长度 总包数 包号 数据域 CRC校验0xA5 8字节 1字节 2字节 2字节 2字节 2字节
表3 控制器响应帧格式起始符 地址 命令字 数据长度 总包数 包号 数据域 CRC校验0xA5 8字节 1字节 2字节 2字节 2字节 2字节
其中的8字节地址为控制器出厂时的唯一指定地址,数据长度为数据域长度,总报数和包号只对程序包传输有效,对于其他指令无效,用0x000x00填充。CRC校验为数据帧所有数据的16位冗余校验,控制器响应指令中的数据域主要反映接收数据包是否正确,正确为0x1A,否则为0xA1,服务器下发指令和控制器响应指令中的命令字均相同。
四、测试
对在农田灌溉现场应用的节水灌溉控制器进行远程程序升级测试,发现对于网络状况不好的地区的控制器升级需要尽量用比较小的数据包一次成功率更高,单包数据不超过1Kbyte为宜,经过多次对不同地区的远程升级测试,没有发现因为意外断电或网络不畅而出现控制器失灵的问题。
五、结论
下一篇:没有了