论文部分内容阅读
摘 要:介绍IAP(在应用编程)方法及其相关应用,以及将IAP应用于嵌入式系统设备软件远程升级的现实意义;结合某地区远程集中抄表系统,着重阐述采用GPRS无线通信进行远程软件升级的思想和实现方法,以及应用中应注意的一些关键技术,并讨论了提高GPRS远程升级速度和可靠性的一些措施。
关键词:集中器;嵌入式系统;IAP;远程升级;GPRS
中图分类号:TP36文献标识码:A
Application of IAP in GPRS Remote Meter-Reading Embedded System
NI Chen-qiang
(Xi'an University of Sicience and Techonology ,ShanxiXian710054)
Key words: concentrator;embedded system;IAP;long-range software upgrade;GPRS
远程集中抄表系统的核心设备一般是基于嵌入式系统的终端设备,如集中器、集抄配变检测终端等。它们管理居民用户电表、台区考核总表等计量终端,收集、存储大量的计量终端数据,并通过电话、GPRS等通信方式连接远程服务器。目前,我国远程集抄系统的标准化尚未完成,各省集抄系统的数据通信协议并不遵循统一的标准,对终端设备的功能要求也不尽相同。这就导致终端设备经常需要升级软件,以满足不同地区的通信协议要求和功能要求。然而,集中器通常安装于台区变压器配变箱中,现场升级程序十分不便。于是,通过终端的上行信道实现终端程序的远程升级,已成为终端设备的必备功能。本文介绍一种基于IAP(在应用编程)和GPRS无线通信的集中器远程软件升级的实现方案。
图1 集中器的硬件构成框图
集中器的硬件构成如图1所示。微控制器采用LPC2214,它是基于一个支持实时仿真和跟踪的16/32位ARM7TDMI-S的微控制器,带有16K静态RAM和256K高速片内FLASH存储器。LPC2214还集成了1个TWI接口、2个UART接口和内置看门狗WDT。
外扩的存储器主要包括SRAM,FLASH两种类型。SRAM用来扩展系统内存。FLASH用来存储电表的档案信息和电表的各类历史数据。集中器还带有断电后可电池供电的日历时钟。载波/485通信模块使集中器与电表之间建立通信信道。
GPRS模块是终端设备的上行通信设备,用来在集中器和远程服务器之间建立TCP/IP连接,实现终端设备与远程服务器的通信。GPRS模块选用华为公司生产的GTM900-B无线模块。它是一款两频段 GSM/GPRS 无线模块,支持标准的 AT 命令及增强AT命令,支持PPP协议,用户无需实现PPP协议即可实现数据传输功能。
2 LPC2214在应用编程简介
在应用编程IAP是应用于F1ash程序存储器的一种编程模式。它允许应用程序在运行过程中对FLASH中的另外一段程序代码进行改写,这为固件程序的现场自动升级带来了极大的灵活性。
LPC2214 支持JTAG、ISP、IAP三种方式对其内部Flash进行编程,用来写入用户代码或数据。LPC2214的片内FLASH共有18个扇区,其中扇区8和扇区9大小为64KB,其他扇区(扇区0-7和10-17)大小为均为4KB。IAP程序位于Boot扇区(扇区17),复位后整个Boot扇区被重映射(remap)到存储地址Ox7FFFFE000~Ox7FFFFFFF处,而IAP程序的入口地址为0x7FFFFFF0。IAP程序为Thumb代码,因此,使用ADS1.2开发系统软件时,若使用C程序调用IAP程序,需要设置编译参数-apcs/interwork。IAP程序使用片内RAM的最高端的32字节空间,如果用户要使用IAP功能,应保留这部分RAM。另外,调用IAP功能前,要关闭PLL、MAM部件及所有中断。IAP程序的详细使用方法这里不作介绍,请参见参考文献。
3 集中器软件远程升级方案
为了保证远程升级的可靠性,必须有一部分程序是不可升级的,这样可以避免由于升级过程中的强干扰或突然断电导致系统彻底崩溃。本系统将软件系统分为用户引导程序和应用程序。用户引导程序是不可远程更新的,它负责应用程序的远程更新,它还可以包括操作系统、底层设备驱动程序等更新可能性很小的程序;应用程序是远程升级的对象,可以根据需求的变化进行远程升级。
程序的分块存放是使用ADS的“分散加载机制( scatterloading mechanism)”来实现的。分散加载文件如下:
ROM_LOAD_BOOT 0x000000000x00004000
{ ROM_BOOT_EXEC 0x00000000
{ Startup.o (vectors, +First)
IAP.o (+RO)
OS.o (+RO)
}
}
ROM_LOAD_APP 0x00004000
{ ROM_APP_EXEC 0x00004000
{ * (+RO)
}
……(RW ,ZI 定位,略)
}
将应用程序分为两个加载区,第一个加载区ROM_LOAD_BOOT用于存放系统启动代码、IAP代码和操作系统等,这一部分程序是不可升级的,占用前4个扇区。第二个加载区ROM_LOAD_APP用来存放系统应用程序,从第5个扇区开始存放,可通过IAP进行远程升级。
当需要对集中器软件进行远程升级时,远程服务器通过文件传输的方式,将程序映像文件(BIN格式)下载到集中器的外部FLASH中,经校验确保程序正确后,应用程序停止喂狗,使系统主动复位。系统复位后的程序流程如图2所示,首先运行启动代码,初始化运行环境,然后检查外部存储器FLASH中是否有新版本的程序。如果有,则调用IAP功能程序,将应用程序进行更新,然后运行新的应用程序;否则直接进入旧版应用程序。
图2 系统软件升级流程图
4 提高远程升级速度的措施
在实际应用过程中,基于GPRS的远程升级存在升级速度慢的缺点。以本系统为例,程序代码大小约150KB,在数据通信过程中,为确保数据的可靠传输,并满足各省电业局通信协议标准,数据传输采用多帧传输方式,每帧最大长度为512字节。整个升级过程需要远程服务器和集中器交互确认几百次。当GPRS信道状况良好的时候,完成升级需要30分钟左右。然而GPRS通信易受终端所在地区的地形环境及网络状况的影响,时常会出现网络阻塞、掉线等状况,通信过程中的失败重发,必然导致升级过程消耗更多的时间,这对于产品在用户心中的印象是负面的。
为了提高远程升级的速度,可采取以下两点措施:
(1)数据压缩。
对程序代码进行数据压缩后下载到集中器,后者进行解压,然后存储。由于程序代码具有一定的特征(都满足ARM指令集的特征),压缩效率较高。
(2)对应用程序进行分块加载。
在产品的实际开发过程中,每次对程序的升级通常只是修改了一小部分程序,而大部分程序并没有被修改,因此,每次升级都把整个应用程序代码的BIN文件下载到集中器的方法显然是不合理的。
然而,程序的小部分修改,对BIN文件的影响往往是很大的。一般表现为被修改代码之前的BIN文件内容没有变化,而被修改部分之后的BIN文件内容却发生很大的变化。这主要是由于被修改部分之后的代码的存储位置发生了变化,以及由于程序存储位置发生变化而导致的一些绝对跳转指令码本身的变化。
可见,BIN文件内容发生大量变化的主要原因是代码的连续存放。解决方法为,在分散加载文件中,对应用程序部分进一步进行划分,根据功能划分为几个不同的装载区,如,划分为驱动程序部分、自动抄表部分、上层协议解析部分等,并为每个装载区预留足够的冗余空间。这样,当某部分程序发生变化时,就可以只下发对应装载区的BIN文件,从而大大减小数据传输量,提高软件升级速度。
5 结束语
基于LPC2214和GPRS技术的软件远程升级方案基本解决了远程抄表系统中现场集中器的软件远程升级的问题,摒弃了传统升级方式中需要打开设备手工安装跳线等繁琐过程,增强了系统软件维护的方便性,缩短了新产品的上市时间,提高了产品的市场竞争力。通过利用数据压缩技术及ADS的分散加载机制,有效的提高了集中器远程升级的速度和可靠性。
参考文献:
[1]周立功.ARM嵌入式系统基础教程[M].北京:北京航空航天大学出版社,2005.
[2]广州周立功单片机发展有限公司.LPC2000系列ARM Flash存储器系统和编程.
[3]韦文祥等.基于ARM和GPRS的嵌入式远程IAP在配变监控终端上的应用[J].电气应用,2006.
[4]ADS1.2,Linker and Utilities Guide.
关键词:集中器;嵌入式系统;IAP;远程升级;GPRS
中图分类号:TP36文献标识码:A
Application of IAP in GPRS Remote Meter-Reading Embedded System
NI Chen-qiang
(Xi'an University of Sicience and Techonology ,ShanxiXian710054)
Key words: concentrator;embedded system;IAP;long-range software upgrade;GPRS
远程集中抄表系统的核心设备一般是基于嵌入式系统的终端设备,如集中器、集抄配变检测终端等。它们管理居民用户电表、台区考核总表等计量终端,收集、存储大量的计量终端数据,并通过电话、GPRS等通信方式连接远程服务器。目前,我国远程集抄系统的标准化尚未完成,各省集抄系统的数据通信协议并不遵循统一的标准,对终端设备的功能要求也不尽相同。这就导致终端设备经常需要升级软件,以满足不同地区的通信协议要求和功能要求。然而,集中器通常安装于台区变压器配变箱中,现场升级程序十分不便。于是,通过终端的上行信道实现终端程序的远程升级,已成为终端设备的必备功能。本文介绍一种基于IAP(在应用编程)和GPRS无线通信的集中器远程软件升级的实现方案。
图1 集中器的硬件构成框图
集中器的硬件构成如图1所示。微控制器采用LPC2214,它是基于一个支持实时仿真和跟踪的16/32位ARM7TDMI-S的微控制器,带有16K静态RAM和256K高速片内FLASH存储器。LPC2214还集成了1个TWI接口、2个UART接口和内置看门狗WDT。
外扩的存储器主要包括SRAM,FLASH两种类型。SRAM用来扩展系统内存。FLASH用来存储电表的档案信息和电表的各类历史数据。集中器还带有断电后可电池供电的日历时钟。载波/485通信模块使集中器与电表之间建立通信信道。
GPRS模块是终端设备的上行通信设备,用来在集中器和远程服务器之间建立TCP/IP连接,实现终端设备与远程服务器的通信。GPRS模块选用华为公司生产的GTM900-B无线模块。它是一款两频段 GSM/GPRS 无线模块,支持标准的 AT 命令及增强AT命令,支持PPP协议,用户无需实现PPP协议即可实现数据传输功能。
2 LPC2214在应用编程简介
在应用编程IAP是应用于F1ash程序存储器的一种编程模式。它允许应用程序在运行过程中对FLASH中的另外一段程序代码进行改写,这为固件程序的现场自动升级带来了极大的灵活性。
LPC2214 支持JTAG、ISP、IAP三种方式对其内部Flash进行编程,用来写入用户代码或数据。LPC2214的片内FLASH共有18个扇区,其中扇区8和扇区9大小为64KB,其他扇区(扇区0-7和10-17)大小为均为4KB。IAP程序位于Boot扇区(扇区17),复位后整个Boot扇区被重映射(remap)到存储地址Ox7FFFFE000~Ox7FFFFFFF处,而IAP程序的入口地址为0x7FFFFFF0。IAP程序为Thumb代码,因此,使用ADS1.2开发系统软件时,若使用C程序调用IAP程序,需要设置编译参数-apcs/interwork。IAP程序使用片内RAM的最高端的32字节空间,如果用户要使用IAP功能,应保留这部分RAM。另外,调用IAP功能前,要关闭PLL、MAM部件及所有中断。IAP程序的详细使用方法这里不作介绍,请参见参考文献。
3 集中器软件远程升级方案
为了保证远程升级的可靠性,必须有一部分程序是不可升级的,这样可以避免由于升级过程中的强干扰或突然断电导致系统彻底崩溃。本系统将软件系统分为用户引导程序和应用程序。用户引导程序是不可远程更新的,它负责应用程序的远程更新,它还可以包括操作系统、底层设备驱动程序等更新可能性很小的程序;应用程序是远程升级的对象,可以根据需求的变化进行远程升级。
程序的分块存放是使用ADS的“分散加载机制( scatterloading mechanism)”来实现的。分散加载文件如下:
ROM_LOAD_BOOT 0x000000000x00004000
{ ROM_BOOT_EXEC 0x00000000
{ Startup.o (vectors, +First)
IAP.o (+RO)
OS.o (+RO)
}
}
ROM_LOAD_APP 0x00004000
{ ROM_APP_EXEC 0x00004000
{ * (+RO)
}
……(RW ,ZI 定位,略)
}
将应用程序分为两个加载区,第一个加载区ROM_LOAD_BOOT用于存放系统启动代码、IAP代码和操作系统等,这一部分程序是不可升级的,占用前4个扇区。第二个加载区ROM_LOAD_APP用来存放系统应用程序,从第5个扇区开始存放,可通过IAP进行远程升级。
当需要对集中器软件进行远程升级时,远程服务器通过文件传输的方式,将程序映像文件(BIN格式)下载到集中器的外部FLASH中,经校验确保程序正确后,应用程序停止喂狗,使系统主动复位。系统复位后的程序流程如图2所示,首先运行启动代码,初始化运行环境,然后检查外部存储器FLASH中是否有新版本的程序。如果有,则调用IAP功能程序,将应用程序进行更新,然后运行新的应用程序;否则直接进入旧版应用程序。
图2 系统软件升级流程图
4 提高远程升级速度的措施
在实际应用过程中,基于GPRS的远程升级存在升级速度慢的缺点。以本系统为例,程序代码大小约150KB,在数据通信过程中,为确保数据的可靠传输,并满足各省电业局通信协议标准,数据传输采用多帧传输方式,每帧最大长度为512字节。整个升级过程需要远程服务器和集中器交互确认几百次。当GPRS信道状况良好的时候,完成升级需要30分钟左右。然而GPRS通信易受终端所在地区的地形环境及网络状况的影响,时常会出现网络阻塞、掉线等状况,通信过程中的失败重发,必然导致升级过程消耗更多的时间,这对于产品在用户心中的印象是负面的。
为了提高远程升级的速度,可采取以下两点措施:
(1)数据压缩。
对程序代码进行数据压缩后下载到集中器,后者进行解压,然后存储。由于程序代码具有一定的特征(都满足ARM指令集的特征),压缩效率较高。
(2)对应用程序进行分块加载。
在产品的实际开发过程中,每次对程序的升级通常只是修改了一小部分程序,而大部分程序并没有被修改,因此,每次升级都把整个应用程序代码的BIN文件下载到集中器的方法显然是不合理的。
然而,程序的小部分修改,对BIN文件的影响往往是很大的。一般表现为被修改代码之前的BIN文件内容没有变化,而被修改部分之后的BIN文件内容却发生很大的变化。这主要是由于被修改部分之后的代码的存储位置发生了变化,以及由于程序存储位置发生变化而导致的一些绝对跳转指令码本身的变化。
可见,BIN文件内容发生大量变化的主要原因是代码的连续存放。解决方法为,在分散加载文件中,对应用程序部分进一步进行划分,根据功能划分为几个不同的装载区,如,划分为驱动程序部分、自动抄表部分、上层协议解析部分等,并为每个装载区预留足够的冗余空间。这样,当某部分程序发生变化时,就可以只下发对应装载区的BIN文件,从而大大减小数据传输量,提高软件升级速度。
5 结束语
基于LPC2214和GPRS技术的软件远程升级方案基本解决了远程抄表系统中现场集中器的软件远程升级的问题,摒弃了传统升级方式中需要打开设备手工安装跳线等繁琐过程,增强了系统软件维护的方便性,缩短了新产品的上市时间,提高了产品的市场竞争力。通过利用数据压缩技术及ADS的分散加载机制,有效的提高了集中器远程升级的速度和可靠性。
参考文献:
[1]周立功.ARM嵌入式系统基础教程[M].北京:北京航空航天大学出版社,2005.
[2]广州周立功单片机发展有限公司.LPC2000系列ARM Flash存储器系统和编程.
[3]韦文祥等.基于ARM和GPRS的嵌入式远程IAP在配变监控终端上的应用[J].电气应用,2006.
[4]ADS1.2,Linker and Utilities Guide.