基于LPC2378的IAP功能的配变监测终端远程设计

出处:liudewei 发布于:2012-08-21 10:38:01

  本文采用Philips公司的32位微处理器LPC2378进行配变监测终端的开发,并利用该芯片自带的IAP功能实现了终端程序的远程更新。为了降低通信流量和终端的存储空间,本文还将LZW压缩算法应用到程序更新中。

  1  LPC2378芯片介绍

  LPC2378是一款基于ARM7TDMI-S的32位处理器。它具有512 KB的片内Flash程序存储器、32 KB的静态RAM(SRAM),以及在系统编程(In-System Programming,ISP)和在应用编程(In-Application Program-ming,IAP)功能。由于程序对内存需求比较大,所以外扩了一片64 KB的SRAM。

  通常,程序的可通过3种方式实现:

  ①采用嵌入式实时操作系统。该方法加大了系统对存储容量的要求,增加了硬件和软件成本。

  ②采用增加外控制烧录系统的方法。该方法同样增加了系统的复杂度和成本,且降低了系统本身的可靠性。

  ③采用IAP技术。该方法充分利用芯片本身的功能,不增加外围器件,是一种的实现方案。

  1.1  LPC2378的FIash扇区

  IAP命令以“扇区”为单位进行操作,操作时需要指定扇区号。LPC2378的扇区分布如表1所列。IAP、ISP和RealMonitor程序都位于Boot区,Boot区位于地址0x000TE000~0x0007FFFF处。IAP命令不允许对Boot扇区执行写/擦除/运行操作。

LPC2378的扇区分布如表1

  1.2  LPC2378的IAP功能

  IAP程序是Thumb代码,位于地址0x7ffffff1。IAP功能可用下面的C代码来调用。

  定义IAP程序的入口地址:

  # define IAP_ENTER_ADR 0x7ffffff1

  定义函数类型指针:

  Typedef void(* IAP)(uint32[ ],uint32[ ])

  IAP iap_entry;

  设置函数指针:

  Iap_entry=(IAP) IAP_ENTER_ADR;

  使用下面的语句来调用IAP:

  Iap_entry(command,result);

  IAP功能主要通过调用iap_entry()函数来实现。IAP命令和定义的函数如表2所列。

IAP命令和定义的函数如表2

  在进行片内Flash修改时,首先需要读取器件的ID和Boot代码命令版本;确认无误后,选择准备编程的扇区;然后擦除扇区并执行扇区查空,将RAM内容复制到Flash中;进行RAM内容与Flash的比较,检查是否复制成功。

  2  远程更新的实现

  2.1  程序分区

  软件开发采用ADS1.2集成开放环境。ADS全称为ARM Developer Suite,是ARM公司推出的ARM集成开发工具。在ADS链接选项ARM Linker中选择Scattered方式后,通过修改.scf文件可以将程序编译成应用程序和更新程序两部分。其中,应用程序占用0~21扇区,用于实现终端的功能;更新程序占用22~27扇区,在终端出厂后不再进行修改。当进行程序更新时,利用IAP功能对应用程序部分进行擦除改写,以实现终端应用程序的更新。链接用的.scf文件定义如下:

  在.scf文件中,RO表示程序代码数据内容,RW和ZI表示该程序部分中定义的通用数据变量和需进行零初始化的数据变量。ROM_MAIN部分主要包括应用程序部分和其定义的数据。ROM_EXEC是应用程序的代码区域,位于片内Flash,地址从0开始。IRAM中是程序运行的堆栈,位于片内RAM中。ERAM是应用程序定义的数据变量,位于片外RAM中。LOADER部分是更新程序的代码区域,位于片内Flash,地址从0x78000开始。程序编译、链接完成后,ADS会生成两个名为ROM_MAIN和LOADER的十六进制文件。在需要程序更新时,主站将完成二进制提取的ROM_MAIN文件通过有线或无线的方式发送给终端,终端全部收到后调用更新程序进行程序更新。但由于提取完的二进制文件仍然比较大,需要对其进行压缩,以降低通信费用。

  2.2  程序更新的实现方法

  程序运行流程如图1所示。终端在程序启动时,先检查是否需要程序更新,如果不需要则正常进入main()函数运行。在运行过程中,当遇到主站发过来的压缩程序包时,首先需要对压缩程序包进行检查,如果无误,则将其存到对应位置的外部Flash中。当收到主站的程序更新命令时,终端需要对接收到的全部压缩程序包进行检查,确认无误后置位程序更新标志,保存当前数据并复位。当终端程序再次启动,发现有程序更新标志时,则调用更新程序。在更新程序中,首先从外部Flash中取出压缩的程序包,然后对其进行解压缩,并将压缩后的程序复制到对应的内部Flash扇区中。当所有的压缩程序包都解压复制后,清除程序更新标志,然后复位。终端再次启动后,运行的就是更新之后的应用程序了。

程序运行流程如图1

  2.3  解压缩算法在更新程序里的实现

  在程序编译、链接完后,对应用程序生成的ROM_MAIN.hex文件进行二进制提取。虽然可以使文件大大减小,但所生成的文件仍然很大,需要进一步压缩。本文采用LZW压缩算法对其进行压缩,LZW(Lempel-Ziv-Welch)压缩算法是一种串表式无损压缩技术,支持流式解压缩,可以根据内存大小选择合适的字典串长。表3显示了对ROM_MAIN.hex文件(940 KB)进行二进制提取,以及提取后对其进行LZW压缩各阶段的文件大小。

  当需要进行程序更新时,将压缩后的文件发送给终端。终端收到全部程序压缩包并确认无误后,进行复位并调用更新程序。在更新程序中,由于内存的限制,每次从外部Flash读取1 024字节进行解压缩。当解压出的字节数达到512时,调用IAP功能函数,并将这512个字节复制到内部Flash中,继续进行解压缩。之前读取的1 024个字节解压完毕后,再重新从外部Flash进行读取解压,直到对应用程序完全解压并复制完为止。

  结  语

  本文介绍了基于LPC2378的IAP功能实现配变监测终端程序远程更新的方法,并将LZW压缩算法应用于程序更新中。该产品投入运行一年多以来,取得了良好的运行效果。此项技术具有一定普遍性,略加修改可以应用到其他同类产品中

参考文献:

[1]. LPC2378 datasheet https://www.dzsc.com/datasheet/LPC2378_2404783.html.
[2]. ARM7TDMI-S datasheet https://www.dzsc.com/datasheet/ARM7TDMI-S_1231795.html.

版权与免责声明

凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。

本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

相关技术资料
上传BOM文件: BOM文件
*公司名:
*联系人:
*手机号码:
QQ:
应用领域:

有效期:
OEM清单文件: OEM清单文件
*公司名:
*联系人:
*手机号码:
QQ:
有效期:

扫码下载APP,
一键连接广大的电子世界。

在线人工客服

买家服务:
卖家服务:

0571-85317607

客服在线时间周一至周五
9:00-17:30

关注官方微信号,
第一时间获取资讯。

建议反馈

联系人:

联系方式:

按住滑块,拖拽到最右边
>>
感谢您向阿库提出的宝贵意见,您的参与是维库提升服务的动力!意见一经采纳,将有感恩红包奉上哦!