远程在线升级的两种方案实现和比较

2010-09-20 05:31石东新柴剑平
关键词:存储器中断嵌入式

石东新,柴剑平

(中国传媒大学信息工程学院,北京 100024)

1 引言

随着手机无线网络的迅速发展,在其数据通信网络上滋生了许多新的需求和应用,尤其是数据和图像的远程监测,涉及了电力、交通、航运、安防等众多行业领域,形成了一个具有相当规模的产业链。随着第二代 GSM到第三代数字手机网络的铺开,带宽进一步提升,这方面的需求和应用前景越来越广阔。

本文以 NXP公司的 ARM Cortex-M3型LPC17xx系列 MCU中的 LPC1754为核心处理器,采用GPRS传输模块,基于 uCOS开发了具有空中在线升级功能的嵌入式数据远程监控终端。本文着重论述在 NXP LPC17xx为核心处理器的应用系统中如何实现代码的在线升级,讨论了两种典型的实现方案并加以了比较。需要说明的是,本文阐述的两种远程在线升级的方法与本文例举系统所涉及的GPRS通信方式和 uCOS都无关,并且某些实现细节经过适当修改也适用于其它类型的 MCU。

2 远程在线升级的必要条件

实现远程在线升级的嵌入式应用系统应当具备以下两个基本功能。

一、系统需要有远程的通信信道。如数字电视的机顶盒通过有线电视网络进行升级,目前具有非常成熟的代码在线升级应用;又如本系统用到的GPRS传输方式,当然也可以是其它如 3G或者蓝牙提供的无线数据通信信道。

二、嵌入式系统的核心处理器具备 Flash存储器在应用的数据擦写功能。简单的处理器,如 51单片机的 C8051Fxx系列就具备 Flash的在应用擦写功能,如果满足条件,也可以胜任远程代码的在线升级。ARM系列提供了划分更加细致的 FLASH存储器数据擦写功能:JTAG,ISP(In System Programming:在系统编程)和 IAP(In Application Programming:在应用编程)三种方式。JTAG编程主要用于产品开发期的调试;ISP需要提供一定的硬件资源和中止应用软件的运行,适用于便携式设备的升级;IAP与ISP非常相似,主要区别是 IAP允许在应用程序正常运行的情况下,对 FLASH存储器中另外一段程序进行读/写操作,控制对某段、某页的读 /写操作。例如:在程序运行中产生 1k字节的数据表,为了避免占用 SRAM空间,可以使用 IAP技术将此表写入片内 Flash中。本文论述的在线升级涉及到 ARM的IAP功能。

3 远程在线升级的系统结构

图 1是两种远程在线升级方案系统的综合框图。方案一在硬件电路上比方案二多了一个虚线框标示的外部扩展 Flash存储器。

图1 两种方案的远程在线升级系统的综合框图

本文实现系统采用的MCU是 NXPLPC1754,它是目前基于 ARMv7的最新 ARMCortex M3系列 V2版处理器,面向低成本和低功耗应用,具有极高运算能力和中断响应能力。LPC1754为哈弗结构,CPU最高可达 100MHz,128KFlash存储器和 32K数据存储器,基本满足远程数据监测终端设备的一般需要。而且其性价比高,非常适于替代传统的 51MCU作为嵌入式系统的开发,是未来低成本嵌入式系统开发的趋势。无线模块我们采用了有方的 M590纯GPRS数据通信模块,另外方案一中的外扩 Flash使用了 SPI接口 1MB的 Flash存储器 MX25L8005。

4 远程终端的程序设计

远程终端要实现代码升级功能,在具备 IAP功能和远程传输通道后,需要合理设计代码的运行模块和升级模块,保证在现有系统运行时升级成功代码,下次开机能够运行升级后新的软件系统,当然还应当有代码升级失败的解决措施。

对于我们讨论的两种方案,给出如图 2所示的程序代码模块划分。

图2 两种方案的内部 Flash存储器划分方式

方案一 MCU内部 Flash划分如图 2(A)所示。内部 Flash分为下载区、跳转区和代码运行区APP1。代码运行区 APP1由一个工程独立完成。APP1是一个完整的嵌入式软件系统,只是代码的启动地址被指定到了内部 Flash高端,并且不含有 IAP功能代码,即 APP1不需要对 MCU内部 Flash进行擦写。升级代码的保存通过 GPRS以一定协议将接收到的升级代码保存到外部扩展的 Flash存储器中。下载区和代码跳转区可以由同一个工程实现,MCU上电运行,就立即判断扩展 Flash中是否有下载完毕的待升级代码。如果有,就将待升级代码用对应的 IAP功能函数搬移到设定的高端地址,如果没有则直接跳转到原有的 APP1处执行。若遇断电等因素,造成代码搬移失败,则下次重新启动后,必须保证代码重新搬移成功后代码才能跳转到新的APP1运行。

方案二 MCU内部 Flash划分如图 2(B)所示,内部 Flash分为跳转区、代码运行区 APP2A和APP2B。这三个区都由独立的工程实现。APP2A和 APP2B交替为当前运行代码和升级更新代码。代码跳转区只需判断当前应该执行的最新代码运行区是 APP2A还是 APP2B,并跳转过去即可。APP2A或 APP2B通过 GPRS获得的升级代码用 IAP功能函数写到另外一个代码运行区,当然这里数据中心发送的待升级代码一定要和远程终端待升级待更新的代码区域保持一致,否则会因为代码中的绝对地址不同而发生错误。

5 软件实现的关键技术

5.1 IAP功能函数

NXP LPC17xx的 IAP功能实现同 NXP之前的ARM系列,如 LPC21xx区别不大,具体的原理和技术分析可见文献[2]。在 NXPLPC17xx实现代码在线升级使用到 IAP功能时,需要注意以下几点:

(1)IAP程序会使用片内 RAM空间的顶部 32个字节,因此,在支持 IAP的场合,用户程序应该避免使用这部分空间。

(2)凡是在运行中对 MCU自身 Flash进行擦写的操作,必须在关闭中断的前提下进行。这样,在方案 2中,运行程序必须避免因 Flash擦写关闭中断带来的影响,如对串口接收的数据通过建立握手响应机制得以保证任务的协同工作。

(3)ARM Cortex-M3的运行原理、内核机制以及指令集有不同于以往的 ARM7TDMI,即 LPC17xx与 LPC21xx不完全一样。特别需要注意的是,LPC17xx的主函数的启动代码的位置不是从0x00000000开始。ARM Cortex-M3将 0x00000000~0x000000CB共 204个字节区域用来存放含有 16个异常入口地址和 35个外部中断入口地址的中断向量表。而实际跳转到主函数 4字节指令起始地址为 0x000000CC。因此,无论是方案一还是方案二,从代码跳转区要调到运行区 APP处,应该是实际放置 APP的首地址加上偏移量 0xCD。

(4)由上所述,NXP LPC17xx将中断向量表放置在代码的起始端,因此,搬移到高端运行的代码APP必须对中断向量表进行重映射,一般都将中断向量表重映射到 SRAM中,这样无论是方案一还是方案二,无论 APP被搬移到内部 Flash的任何位置,都可以正常响应中断。另外,尤其需要注意的是,中断向量表的重映射一定要在主程序一开始就进行。尤其是在使用像 uCOS这样的嵌入式操作系统时,OS很可能在中断重映射之前使用中断,易造成程序响应错误,程序跑飞。

5.2 分散加载描述文件

为了方便以及灵活的将工程目标代码放置在内部 Flash指定的任何位置,或者按需要将指定的代码加载到SRAM中运行,需要使用 Scatter(分散加载描述)文件来进行描述代码装载和运行的位置。本例程序中使用 MDK 3.8的 IED环境,在配置页面的“Linker”子页面中手动加载修改后的 Scatter文件,,并在“Misc controls”栏中输入“—entry main”。其中 “ main”完成了代码和数据的复制,并把 ZI数据区清零,这一步对于本应用非常重要。接着_main跳进堆和栈等的初始化函数,最后再跳进应用程序的入口 main()函数。scatter文件编写的对错,关系到应用程序的正确运行。顺便提一下,对于系统资源使用和地址分配的情况,可以查阅 map文件。

6 方案比较

方案一和方案二都能很好的实现远程代码升级,但是它们有如下区别:

(1)方案一需要外部扩展 Flash存储器,硬件成本有所增加。

(2)方案一只需建立 2个工程,一个是 Flash加载任务,另一个是系统应用。方案二需要建立 3个工程,一个是负责跳转至有效应用系统代码的启动程序,另外两个工程则分别是交替更新的系统应用程序。这个两个系统应用程序除了自身功能性的更新差别外,对程序员来说唯一的区别就在于 scatter文件的不同,即指定两个系统应用程序烧写在内部Flash不同的位置。

(3)方案一和方案二的 IAP功能分别在不同的程序内部实现。

从以上两个方案可以看出,方案一增加了硬件成本,但是带来了系统应用程序设计的简单,其内部不含有 IAP功能代码,无需考虑关闭中断后对其他任务的影响。方案二无需扩展外部 flash,但系统应用程序设计稍复杂,内含 IAP功能函数,必须考虑关闭中断带来的影响。而且更新的代码需要分两个工程交替生成,MCU内部 Flash存储器的使用率相对减小一半,对系统代码的容量有限制。可以看出,方案一和方案二各有优缺点,需要开发人员对本项目的需求、任务复杂度、开发进度和成本权衡考虑而定。

7 结论

本文以 ARM NXPLPC1754为核心的远程数据监控终端为例讨论了两种远程代码升级的方案。本文没有关注太多的实现细节,而是侧重于两个方案实现的原理以及方案的优缺点。希望本文对打算在嵌入式产品中引入远程在线升级功能以提升产品品质的开发人员有所帮助。

[1] 彭井花等.基于 GPRS的嵌入式系统软件的远程在线升级.现代电子技术[J].2009(4):47-52.

[2] 姜晓梅等.基于 ARM的 IAP在线及远程升级技术.计算机应用[J].2008,28(2):519-521.

[3] 韦文祥等.基于 ARM和 GPRS的嵌入式远程IAP在配变监控终端上的实现.电气应用[J].2006,25(9):88-92.

[4] LPC17xx User manual,Rev 00-07[EB/OL].http://www.nxp.com,2009,7.

猜你喜欢
存储器中断嵌入式
Focal&Naim同框发布1000系列嵌入式扬声器及全新Uniti Atmos流媒体一体机
静态随机存储器在轨自检算法
TS系列红外传感器在嵌入式控制系统中的应用
基于FPGA的中断控制器设计*
Linux中断线程化分析及中断延时测试
搭建基于Qt的嵌入式开发平台
跟踪导练(二)(5)
千里移防,卫勤保障不中断
任意2~k点存储器结构傅里叶处理器
存储器——安格尔(墨西哥)▲