引 言
用电现场监控终端是一种与多功能计量设备同步计量并全方位监控用电状况的智能化设备,在目前全国电力紧缺的情况下,起到了削峰填谷,提高电网运行效率的作用,尤其适合于对用电大户的用电监控。
市场的需求和应用技术的成熟往往是矛盾的,用户总希望尽快用到功能完善、技术先进的产品,但从新技术到应用总有一个过程。这个过程的长短最大程度上决定了产品的市场前景,如果要好好把握市场,常常不得不一边开拓市场一边完善技术。实践是检验真理的唯一标准,要做出好的产品,必须与用户形成互动的关系,利用用户的反馈信息对产品不断完善。另外,产品长时间使用后,终端程序设计上的缺陷也就慢慢浮出水面,这就要求对终端系统程序进行升级。如果对几百个终端进行现场ISP升级,那么不但浪费大量的人力、财力,更重要的是浪费了宝贵的时间,延误了开拓市场的机遇,降低了用户对产品的信誉度。
在Internet飞速发展的时代,将终端接入到Internet是解决上述问题的可靠、现实的方案。本设计方案应用于用电现场监控终端,采用高性能Philips ARM MCULPC2124,结合GPRS技术实现终端系统程序的远程升级。
1 LPC2124芯片简介
1.1 功能介绍
LPC2124基于一个支持实时仿真和跟踪的16/32位ARM7TDMI-SCPU,并带有236 KB嵌入的高速Flash存储器和16 KB RAM。对于内嵌Flash存储器支持JTAG、ISP、IAP等多种编程方式。
LPC2124具有非常小的64脚封装、极低的功耗、多个32位定时器、4路10位ADC、PWM输出、46个GPIO以及多达9个外部中断,且内置了宽范围的串行通信接口,使它们特别适用于工业控制中。因为用电监控终端对硬件资源要求高,软件功能复杂,实时性强,所以采用LPC2124可以提高产品的性价比。
1.2 Flash存储系统
LPC2124存储系统包含256 KB的17个扇区。Flash存储器从O地址开始并向上增加,17个扇区的大小也不连续分布,17个扇区总容量为248 KB,剩下的8 KB存储空间为Boot扇区。Boot扇区位于Flash存储系统的顶端部分,地址空间是0x0003 EO00~0x0003FFFF。LPC2124存储系统的地址分配如图1所示。
Boot Block占用第17扇区,即Boot扇区。该扇区的存储空间专用来存放B00t装载程序,控制复位后的初始化操作,并提供Flash的编程方法(代码)。B00t装载器可启动对空白片的编程、已编程器件的擦除和再编程以及在运行的系统中由应用程序对Flash存储器进行编程。
1.3 Flash存储系统的编程
LPC2124支持多种方式对Flash进行编程,用来写入用户代码或数据。第一种是通过内置的串行JTAG接口;第二种是通过UART0进行在系统编程(ISP);第三种是通过在应用编程(IAP)实现。
1.3.1 JTAG编程
LPC2124的JTAG Flash编程可方便下载程序到片内Flash,但JTAG接口更主要的是提供硬件系统调试功能,诸如实现软件的断点、单步。JTAG Flash编程要中断应用软件的正常运行,连线较多,通信距离较短,而且要现场编程,只适应于产品在开发期的调试使用。
1.3.2 在系统编程
ISP(In-Svstam Programming)技术,即在系统可编程技术,是指电路板上的空白器件可以编程写入最终用户代码,而无需从电路板上取下器件;已编程的器件也可用ISP方式擦除或再编程。LPC2124支持ISP的Flash编程,但要巾止应用软件的正常运行,且需要提供一定的硬件资源+包括UARTO口、RS232驱动和CPU特殊引脚的状态;编程要求现场操作,非常适用于便携式智能仪器的升级,但显然不适用于用电监测终端这类安装环境特殊的设备。ISP编程原理详见参考文献。
1.3.3 在应用编程
在应用编程IAP(In-Application Programming)是应用在F1ash程序存储器的一种编程模式。简单地说就是在应用程序控制下,对程序某段存储空间进行读取、擦除或写入操作。与ISP操作非常相似。具有在线编程功能,且克服了ISP的不足之处。它可以在应用程序正常运行的情况下对另外一段程序Flash进行读/写操作,甚至可以控制对某段、某页甚至某个字节的读/写操作。这为数据存储和固件的现场升级带来了极大的灵活性。
2 IAP功能的硬件设计
基于LPC2124的以上3种编程方法的分析,IAP实现对终端程序升级自然是最佳选择方案。下面介绍一种基于GPRS的远程IAP系统方案,系统框图如图2所示。
AT45DB08081B,8Mb串行Flash存储器,兼有ROM的掉电数据保存和RAM的读/写速度,最快支持20MHz的时钟频率,擦写次数达10000次,内置2个264字节SRAM缓冲器,使得对主存储体的编程可以连续进行,省去编程等待时间。AT45DB081B采用CASON-8封装,支持2.5~3.6 V低电压,操作功耗低,支持模式O和3的SPI总线接口,与MCU接口简单,稳定可靠,非常适用于数字语音、图像、程序代码和数据的存储应用中。在本设计中采用模式0与LPC2124通信,速度可达MCU主频的1/8。
GPRS模块使用Wavecom公司生产的Q2406B,双频GPRS/GSM模块(EGSM900/1800 MHz或EGSM900/l900 MHz),内置TCP/IP,与标准AT指令完全兼容;其设计开发符合ETSI GSM Phase 2+标准。
3 IAP功能的软件设计
3.1 IAP编程接口
LPC2124的IAP程序位于Boot扇区,复位后整个Bool扇区被映射到存储地址Ox7FFFFE000~Ox7FFFFFFF处;而IAP的入口地址为0x7FFFFFFFo,程序为Thumb代码。IAP编程命令使用RAM的最高端32字节,所以应用程序应保留这部分RAM。在使用IAP擦除/编程操作过程中,片内Flash存储器不可访问。当用户应用程序运行时,用户F1ash区域的中断向量有效,所以在调用Flash擦除/写IAP之前,用户应当禁止中断或确保用户中断向量在:RAM中有效和中断处理程序位于RAM中。IAP代码不使用或禁止中断。
3.2 IAP编程C语言实现
对于在应用编程,LPC2124是通过寄存器R0中的字指针指向存储器(RAM)包含的命令代码和参数来调用IAP程序。IAP命令的结果返回到寄存器R1所指向的存储器(RAM)。
调用LPC2124的IAP可使用如下C语言代码:
◆定义IAP程序入口地址
#definc lAP_LOCATl0N Ox7FFFFFFFl
◆定义数据结构来传递IAP命令表和结果给IAP程序
unslgned long Command[5];
unsigncd long Result[2];
◆定义函数类型指针,函数包括两个参数,无返回值
typcdef void(*IAP)(unsigned int[],unsigncdim int[]);
IAP iap_entry; //定义函数指针
◆设置函数指针
iap_entry=(IAP)IAP_LOCATION;
◆使用下面的语句来调用IAP
iap_entry(command,result);
本系统是基于LPC2124工程模板进行移植的,在ADSl.2嵌入式软件开发平台上,用C语言直接调用IAP程序代码实现IAP编程。IAP的命令码、状态码和命令详解以及IAP功能的详细应用见参考文献。
4 远程升级在用电现场监控终端的应用
终端软件系统的设计包括用户引导程序设计(与Boot装载程序有区别,前者由用户设计,后者由芯片生产商设计并固化)和应用程序的设计。它们在LPC2124中的入口地址不同,终端复位后,如果未进入ISP编程状态,则首先执行用户引导程序,由用户引导程序决定执行IAP升级还是正常运行;应用程序实现终端的各种功能,包括新版本应用程序升级包的下载。
4.1 终端用户引导程序设计
终端用户引导程序是基于文件系统的思想来设计的。终端的应用程序代码存放在LPC2124的Flash存储器中,终端正常运行时,MCU不停地从Flash中读取指令。如果对应用程序升级,即对应用程序占用的Flash存储器扇区进行擦除和再编程,显然执行Flash编程的代码占用的Flash扇区不能被擦除,那么升级程序的代码只能用单独的扇区存放,升级程序的执行可由应用程序调用,也可作为单独的程序执行。由于LPC2124的IAP代码采用16位Thumb指令集,执行IAP的过程中应禁止或者关闭中断。如果将升级程序采用应用程序调用的方式来设计,会增加应用程序设计的复杂性,升级的可靠性较差。LPC2124复位后,由于Boot程序总是从Flash的0地址读取指令,所以升级程序代码放在起始扇区内,设计为用户引导程序的一部分,而用户引导程序总是不被修改的。如果升级过程失败,MCU复位后应用程序可以重新升级,增强了升级的可靠性。
终端用户引导程序在系统上电后执行。首先它检查应用程序升级标志和版本号。当检查到升级标志置位且出现新版本号时,从AT45DB081B中读取应用程序升级包,然后执行LPC2124的Flash编程动作,实现对应用程序的升级。升级任务完成后,清除升级标志和更新应用程序版本,最后转移到应用程序入口并执行应用程序代码。引导过程流程如图3所示。
4.2 终端应用程序设计
终端应用程序负责完成终端的数据采集、更新、扫描,并上报告警事件,控制现场执行机构,执行前置机的远程命令及保存各种历史数据等。前置机的远程命令包括读/写终端命令、中继命令和远程升级命令。当终端接收到前置机的远程升级命令后,终端分析升级命令帧,读取升级包信息,包括包总长度、包校验码、帧序号和帧校验码,然后应答前置机并请求发送后继数据帧,终端对后继数据帧进行校验,校验正确则应答成功和接收下一帧数据,否则应答失败并要求终端重发。连续5次重发失败,则认为网络通信质量差而取消当前升级操作,保存成功接收到的帧号和数据校验和以备续传。应用程序升级包按帧的方式通过GPRS Modem,由前置机下载到终端,并保存到终端的AT45DB081B Flash存储器。下载成功后,置位升级标志和记录升级包版本号,以备用户引导程序升级。
升级包的下载过程可看成是数据的传输过程,应用程序可同步实现终端的其他各种功能,不影响终端的正常运行。应用程序升级包下载成功后,终端进行必要的现场保存并主动复位,从而执行用户引导程序升级的最后一步——Flash编程。另外,也可在终端里配置升级时间,避开终端任务重负荷阶段,使得升级过程对终端正常工作的影响降低到最小。
应用程序升级包的下载流程如图4所示。
4.3 通信协议的设计
GPRS与Internet连接建立后,进入数据透明传输阶段。本系统在完善的TCP/IP机制基础上设计用户应用层协议。为实现系统某个终端的系统软件升级,前置机将要升级的程序代码转化为写终端升级代码帧,接入Internet到GPRS网络,透明传输下载到目标终端。根据江西省用电现场服务与管理系统通信规约,将写终端升级代码帧分为3种:前置机升级请求帧、升级代码数据帧和终端回应帧。帧格式在参考文献中有详细说明。
5 远程IAP应用的可靠性探讨
终端应用程序的升级过程不免要受到环境的干扰,如终端掉电、异常的终端复位和网络通信阻塞等故障,都会导致终端远程IAP的失败,因此必须提供一套可靠的软硬件机制来保证终端IAP过程的正常工作。以下是本系统中采取的措施:
◆终端掉电及异常复位处理。由于终端的停电及电网波动等干扰引起的终端复位,都将中止终端的升级过程,导致升级失败。本系统采用下载和IAP过程完全分离的升级方式。IAP位于用户引导程序部分,不被擦除。AT45DB08lB中总是备份最新版本终端应用程序,所以任何阶段操作失败都能保证终端的正常工作。另外,在终端配备蓄电池和充电电路,在终端主电源来电时对蓄电池充电,使得终端掉电时也可正常运行,远程IAP过程更为可靠。
◆远程通信的误码处理。对数据传输过程产生的误码,通用的、有效的解决办法,就是用CRC循环冗余校验和重传机制。数据校验码校验正确后存入AT45DB081B,错误时返回错误编码发和帧序号请求重发,直到检测到结束帧。结束帧数据长度不够,用00填充。
◆网络阻塞、故障处理。由于地形和环境因素的影响,GPRS网络在远程IAP的通信过程中可能出现阻塞或断开的情况。这时终端和前置机对无回应帧采用延时重发的机制,连续5次不成功则断开GPRS网并重新连接,终端保存升级的下载断点信息,以待网络恢复后继续传数据。
结语
该设计方案基本解决了本系统的远程代码升级的问题,增强了系统软件维护的方便性,缩短了新产品的上市时间,也为用户提供了更安全、快捷的服务。用GPRS网络作为传输通道,为接入Internet困难的偏远地区的现场用电监控终端的远程维护,提出了一种全新的、可靠的设计方案。