历史上的今天
返回首页

历史上的今天

今天是:2026年03月07日(星期六)

2023年03月07日 | 基于LPC2378的IAP功能实现配变监测终端程序远程更新

2023-03-07 来源:elecfans

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

结  语

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

推荐阅读

史海拾趣

Delus Corp公司的发展小趣事

Delus Corp公司深知持续创新对于公司发展的重要性。因此,公司投入大量资源进行研发,并不断探索新技术和新材料。同时,公司也高度重视产品质量,建立了严格的质量管理体系,确保每一件产品都符合高标准的质量要求。这些努力使得公司的产品线不断丰富,产品质量得到了广大客户的认可。

Everspin Technologies公司的发展小趣事

Everspin一直致力于MRAM技术的创新和发展。其中,自旋转移力矩MRAM(STT-MRAM)是该公司的重要技术之一。Everspin在平面内和垂直磁隧道结(MTJ)STT-MRAM位单元的开发方面取得了显著成果,并积累了超过600项有效专利和应用的知识产权组合。这些技术的创新和专利的积累,使得Everspin在MRAM市场中保持了领先地位。

Bedford Opto公司的发展小趣事

Bedford Opto公司在成立初期,面临着激烈的市场竞争和技术瓶颈。然而,公司的研发团队通过不懈努力,成功开发出一款具有革命性的光电传感器。这款产品不仅提高了信号传输的效率,还降低了能耗,迅速在市场上获得了认可。Bedford Opto公司因此逐渐在电子行业中崭露头角。

CEVA, Inc公司的发展小趣事

CEVA, Inc.最初于1999年11月22日在美国特拉华州注册成立,起初的名称并非CEVA。随着公司的业务扩展和技术积累,其在2002年11月进行了更名,成为ParthusCeva公司。这一更名反映了公司业务的进一步发展和市场定位的调整。随后,在2003年12月,公司再次更名为CEVA公司,这一名称沿用至今,成为无线连接和智能传感技术领域的知名品牌。

Galaxy Microelectronics公司的发展小趣事

深圳市飞翼科技有限公司自2006年成立以来,一直致力于模拟与数字MCU混合芯片领域的研究、设计和开发应用。公司主攻电容式触摸感应按键芯片设计,凭借多项独有的专利技术,成功突破了行业内的技术难点。经过多年的努力,飞翼科技已成为该应用领域中技术最全面、市场份额最大的公司之一。其电容式触摸感应芯片广泛应用于各类电子产品中,为用户带来了更加便捷、智能的交互体验。

Euroquartz公司的发展小趣事

Euroquartz在技术创新方面始终保持领先地位。公司推出的新款超薄MEMS滤波器系列产品,就是其技术实力的最好体现。这些滤波器在制造过程中,对互调失真及相位和振幅匹配等特性进行了优化,提供了从音频到3GHz的宽泛可选频率范围,最大功率可达200W。这些创新产品不仅满足了市场的需求,也进一步巩固了Euroquartz在电子元器件行业的领先地位。

问答坊 | AI 解惑

都来说几句

:D 干咱们这行的多久能买个楼,多久能买辆汽车。 大家都在那个城干的。月收入是多少。…

查看全部问答>

基于DSP的癫痫脑电信号处理

  1引 言   癫痫的诊断主要依靠临床病史,脑电图检查可作为一种极有价值的辅助诊断手段。据统计,80%左右的癫痫病人都具有确定性的脑电异常,而只有5~20%左右的癫痫病人脑电图表现正常。尤其对临床诊断困难的非典型癫痫发作、各种异型癫痫 ...…

查看全部问答>

3g usb modem

首先,祝eeworld的朋友们新年快乐。在网上看到了 在wince 下接 3G usb modem 。需要做个 usb 虚拟 com 得驱动程序,从而进行拨号,那位朋友有类似的经验,可否分享一下 谢谢…

查看全部问答>

FPGA QQ群 59234501 30144595 32487895 28546136

刚申请了一个CPLD/FPGA 的QQ群 59234501     30144595       32487895    28546136 …

查看全部问答>

在.Net2005的MFC的Windows CE工程怎么来调用C#写的DLL

有没有高手在.Net2005的MFC的Windows CE工程中调用C#写的DLL啊?C#的DLL里用到了DateTime的类型,我现在是给这个类型搞死了,在我的工程里没法加入/clr控制。…

查看全部问答>

【求助】msp430f149的ADC12问题

我用msp430f149最小系统板做模拟电压采集,单通道多次转换,不知道是哪里出了问题。用P6.0口采集数据,不管我将P6.0接要采集的电压、悬空或者接地,输出的电压数据总是在0.5V左右波动,p6的其他端口也是这样,不知道怎么回事,是不是硬件出了问题? ...…

查看全部问答>

XT2IN端可以外接有源晶振吗

MSP430F14X、15X、16X的XT2IN端可以外接有源晶振吗?…

查看全部问答>

51系统设计出错

proteus仿真的 电路和程序我都传上来 程序可以编译 但是仿真的时候没动静 联系 tangangsl@163.com QQ:522601416  谢谢了 …

查看全部问答>

Espier文档计划

硬件架构确定,后面很快会陆续更新文档,如果大家有什么学习要求,可以提出,合适的会再增加文档 …

查看全部问答>