基于LPC2378的IAP功能和压缩算法在远程更新的应用.doc_第1页
基于LPC2378的IAP功能和压缩算法在远程更新的应用.doc_第2页
基于LPC2378的IAP功能和压缩算法在远程更新的应用.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于LPC2378的IAP功能和压缩算法在远程更新的应用本文采用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区位于地址0x000TE0000x0007FFFF处。IAP命令不允许对Boot扇区执行写擦除运行操作。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所列。在进行片内Flash修改时,首先需要读取器件的ID和Boot代码命令版本;确认无误后,选择准备编程的扇区;然后擦除扇区并执行扇区查空,将RAM内容复制到Flash中;最后进行RAM内容与Flash的比较,检查是否复制成功。2 远程更新的实现2.1 程序分区软件开发采用ADS1.2集成开放环境。ADS全称为ARM Developer Suite,是ARM公司推出的ARM集成开发工具。在ADS链接选项ARM Linker中选择Scattered方式后,通过修改scf文件可以将程序编译成应用程序和更新程序两部分。其中,应用程序占用021扇区,用于实现终端的功能;更新程序占用2227扇区,在终端出厂后不再进行修改。当进行程序更新时,利用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扇区中。当所有的压缩程序包都解压复制后,清除程序更新标志,然后复位。终端再次启动后,运行的就是更新之后的应用程序了。2.3 解压缩算法在更新程序里的实现在程序编译、链接完后,对应用程序生成的ROM_MAINhex文件进行二进制提取。虽然可以使文件大大减小,但所生成的文件仍然很大,需要进一步压缩。本文采用LZW压缩算法对其进行压缩,LZW(Lempel-Ziv-Welch)压缩算法是一种串表式无损压缩技术,支持流式解压缩,可以根据内存大小选择合适的最大字典串长。表3显示了对ROM_MAINhex文件(940 KB)进行二进制提取,以及提取后对其进行LZW压缩各阶段的文件大小。当需要进行程序更新时,将压缩后的文件发送给终端。终端收到全部程序压缩包并确认无误后,进行复位并调用更新程序。在更新程序中,由于内存的限制,每次从外部Flash读取1 024字节进行解压缩。当解压出的字节数达到512时,调用IAP功能函数,并将这512个字节复制到内部Flash中,继续进行解压缩。之前读取的1 024个字节解压完毕后,再重新从外部Flash进行读取解压,直到对应用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论