1 系统结构
系统结构如图1所示,由服务器和远程终端组成,其中远程终端包括基于ARM内核的嵌入式控制芯片(以下简称ARM芯片)和GPRS Modem模块,两者之间通过RS 232总线连接;服务器与远程终端通过GPRS进行通信。用户需要升级远程终端时,首先将服务器端的升级标志位置1,通过GPRS将升级标志位传给远程终端,远程终端上电后将自动检测升级标志位,若标志位为1表示需要升级,否则不升级。然后,服务器将升级文件通过GPRS透明的下载到远程终端,实现数据的传输及更新,从而达到远程终端的嵌入式系统软件的在线升级的目的。
2 远程终端软件升级的关键技术
2.1 FLASH存储器编程
远程终端的升级主要是对ARM芯片内部FLASH存储器的数据进行擦除及下载,目前很多ARM芯片支持多种方式对FLASH进行编程,ARM芯片内部FLAsH存储器的编程有JTAG,ISP和IAP三种方式:JTAG编程主要用于产品开发期的调试;ISP需要提供一定的硬件资源和中止应用软件的运行,适用于便携式设备的升级;IAP与ISP非常相似.主要区别是IAP允许在应用程序正常运行的情况下,对FLASH存储器中另外一段程序进行读/写操作,甚至可以控制对某段、某页的读/写操作,为数据存储和固件的自动升级带来了极大的灵活性。该方案通过GPRS网络传输升级文件的程序代码,利用ARM内部的FLASH存储器及其IAP编程,实现终端的嵌入式系统软件的远程无线在线升级。有关IAP的命令码、状态码和命令详解以及IAP功能的详细应用见参考文献。
2.2 远程终端的程序设计
为了在线升级,将ARM芯片内部FLASH存储器按图2所示划分为启动区、用户代码跳转区、用户代码1区和用户代码2区。其中启动区用于存放系统初始化和启动代码,用户代码跳转区用于存放跳转到相应用户代码区的指令.用户代码1区和用户代码2区用于交替存放当前终端正在执行的用户代码和升级的用户代码。若当前终端执行的用户程序存放在1区,则将接收到的升级程序存放到2区;待升级程序接收结束后,更改用户代码跳转区的指令,使其指向升级程序,即用户代码2区;此后用户代码2区的程序成为当前终端指向的用户程序,而用户代码1区则用于下次升级代码的存放区。
远程终端上电后首先进入启动区进行系统的初始化;接着终端从片外的E2PROM中读取升级配置,包括升级标志位、已接收到的最后一个数据包的ID等。若终端处于升级状态,则如图3所示,向服务器发所要升级数据的指令,而且指令中将包含终端上次已接收到的最后一个数据包的ID,这样可以避免已接收的数据包的重复发送,并实现续传的功能。终端从GPRS网络接收数据包后对数据包进行解析和校验判断,并与服务器形成一问一答的应答机制。FLASH中进行数据编程的最小单位是页(512个字节),当接收到的升级数据达到1页后.通过IAP进行编程。如果当前运行的用户程序代码在1区,则把升级数据保存到2区,否则保存到1区。编程成功后,将最后一条数据包的ID保存到E2PROM中。所有升级数据发送结束并编程成功后,通过IAP修改用户代码跳转区的指令,使远程终端运行新的升级代码。