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

本文采用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扇区执行写/擦除/运行操作。



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文件可以将程序编译成应用程序和更新程序两部分。其中,应用程序占用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扇区中。当所有的压缩程序包都解压复制后,清除程序更新标志,然后复位。终端再次启动后,运行的就是更新之后的应用程序了。



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进行读取解压,直到对应用程序完全解压并复制完为止。

结  语

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

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭