引 言
IAP即在应用中编程,对于嵌入式产品,指在不影响产品正常运行的情况下实现应用程序的更新。许多ARM芯片都提供该操作接口,相对于ISP(在系统编程)方式,具有方便灵活且不需要借助专用boot装载程序或工具的特点,而且在不影响嵌入式产品正常运行的情况下即可完成应用程序的动态升级。在工业控制领域尤其是电力系统控制领域中,嵌入式产品必须保证连续、稳定、可靠地运行,由各种原因导致的应用程序的更新都必须在产品正常运行过程中完成,因此许多用户对相关产品的IAP功能都有明确的要求。
LPC2214是Philips公司推出的一款32位ARM7TDMI-S工业用微控制器。内置25 6 KB高速Flash,128位宽度接口/加速器可以实现60 MHz的操作频率;配置有2个UART接口、4个外部片选,支持8、16、32外部总线;片内boot下载程序可以实现在系统编程(ISP)和在应用中编程(IAP)。由于该芯片的内置Flash速度很快,并且支持128位宽度接口/加速,应用程序存储并运行在片内Flash中可以获得较快的执行速度。
本文提供一种基于LPC2214的在应用编程方案,可以实现应用程序方便、可靠的升级,以及当地维护串口或远方GPRS方式的代码更新。更新过程中,通信中断、装置异常复位、装置停电等异常情况的发生,都不会导致因程序更新而造成的产品死机。
1 嵌入式产品应用程序启动方式
在嵌入式产品中,应用程序可以运行在RAM或Flash中。对于中高端产品,由于要求较高的执行速度和效率,一般采用Coldfire、x86、PowerPC、ARM9等CPU。此类CPU一般都有DRAM控制器,支持DRAM操作,为了获得较快的执行速度,将应用程序从代码Flash中复制到DRAM的代码空间后才开始执行。对于x86模式,应用程序以文件方式保存在硬盘或电子盘上。在不同的嵌入式操作系统上,应用程序在DRAM上的展开方式存在一定差异,例如VxWorks系统可以完成对压缩应用程序的展开,而早期的PSOS操作系统则是直接展开,但其基本过程类似。
对于低端产品,由于成本的严格控制,在满足产品功能需求的前提下一般采用性价比较高的CPU,如8位、16位、低端ARM等。此类CPU一般有内部RAM、内部Flash,由于采用内部高速总线,内部Flash具有较高的执行速度。在外部RAM中运行的产品,执行速度较快,但是由于启动过程较为复杂,导致时间较长(尤其是.x86系统,启动过程可能需要半分钟以上);而在Flash上直接运行的产品,即使CPU具有较高的主频,执行速度也会受到Flash速度的限制,但是此类产品启动较快,一般可以在几秒钟内完成启动。
嵌入式产品应用程序的启动方式决定了应用程序动态更新的方式。对于代码在外部RAM执行的情况,正常情况下更新Flash中的代码不会影响系统正常运行,实现起来较为简单。例如PC104模块,应用程序一般保存在电子盘上,以文件系统方式管理,应用程序的在线更新非常方便。对于代码在Flash上直接执行的情况,由于应用程序正常运行过程中会不断从Flash上读取指令,给在线更新程序带来一定困难,如果不借助一定手段或方法,很难保证应用程序的可靠升级。