MSP430系列单片机软件在线升级设计与实现

2012-08-13 05:57刘芳伶
通信技术 2012年1期
关键词:串口嵌入式应用程序

唐 文, 刘芳伶

(中国电子科技集团第三十研究所,四川 成都610041)

0 引言

随着嵌入式软硬件技术的发展,大量的消费类电子产品开始使用该技术以实现各种复杂的功能。嵌入式终端设备随着功能的日益完善、终端数量的不断攀升,而且嵌入式软件技术的应用使系统实现新功能更加方便,这就需要提供一套有效的设备管理及升级方案,让终端维护人员可以通过多种方式进行升级维护:如串口、USB口、以太网口[1]、电话线等。

为了实现软件升级,嵌入式终端设备都会提供引导程序,用于检测应用程序的开始执行地址。对于远程维护工作,需要使用终端与系统提供的通信服务,可以将这部分的维护功能放在应用程序中实现。对于本地维护工作,即维护人员能够接触到终端设备进行维护,则有两种途径,可以在引导程序中和应用程序中实现。

方案以TI公司的MSP4302418单片机为例,通过片内闪存(FLASH)与片外FLASH相结合的方式,设计并验证了一种基于两阶段引导技术的软件升级维护方案。

1 两阶段引导技术

两阶段引导是指通过在单片机片内FLASH里固化一个引导程序,通过该程序来选择引导应用程序。每次上电执行时,单片机从引导程序开始执行,首先判断应用程序是否有效,若无效,则启动升级程序,通过该程序实现在外部存储空间选择合适的程序包,写入单片机片内FLASH的应用程序空间。当应用程序正常执行时,若收到升级命令,则由应用程序将升级数据包存储在片外FLASH中,再跳出执行升级程序。当应用程序不存在或错误时能直接进入升级程序,从而保证升级不成功可进行再次升级。

其实现原理是在目标芯片中放置3段代码:一段为引导程序;一段为应用程序;一段为本地升级程序。引导程序,升级程序为固定代码,利用FLASH替换程序擦除应用程序并写入新的代码。同时需要通过修改链接文件来指定各段代码的地址空间,具体操作方法参考文献[2],保证三者的地址段不重叠。

引导基本流程如图1所示,本地升级程序执行时,与外部通信,先接收擦除指令,擦除应用程序空间,再将外部 FLASH的新程序内容烧写至片内FLASH,跳到新应用程序入口。需要注意的是,在升级时,应该关闭所有中断,先擦除应用程序入口地址空间,最后写入应用程序入口地址,可以尽量保证不会进入不完整的程序。应用程序是否有效可以通过检测应用程序入口地址是否有效来判断:若入口地址为0xFFFF则无效。正常情况下,应用程序不会主动退出。

例如文献[3]基于数字信号处理器(DSP,Digital Signal Processor)的在线升级方案中,将FLASH划分为2个存储区,用于存放升级程序和应用程序。应用程序在执行过程中能够响应升级命令。当收到升级命令时,就自动跳转到升级程序,接收串口发来的应用程序数据并保存到内存(RAM,random access memory)中。升级数据接收完毕后,升级程序再利用TI提供的FLASH操作函数,将RAM中的程序拷贝到FLASH的应用程序地址空间,拷贝完成后,在接收到升级完成命令后跳转到新的应用程序地址开始执行。

2 FLASH升级技术

在许多嵌入式终端设备中,都将FLASH作为数据和程序文件的存储部件,提供快速可靠的数据管理方式。在嵌入式操作系统的支持下,嵌入式终端设备利用文件系统访问 FLASH,可以实现多文件、大容量存储功能[4]。在文献[5]中,FLASH上保存了用户程序和升级程序各两份,引导程序根据升级向量或引导向量来决定从FLASH的哪个地址加载用户程序或升级程序,当原始升级或用户程序校验失败时,自动选择从备份地址开始加载。文献[6]详细介绍了 FLASH的存储操作流程。在拷贝程序数据到FLASH时,由位于内存中的程序执行拷贝操作,提高FLASH写入的可靠性,并在位于FLASH中的引导程序的中断向量表区域设置跳转指令指向自定义的二级中断向量表,避免对原有中断向量地址区域进行擦除,提高了程序升级的可靠性与灵活性。文献[7]提供了2种访问嵌入式终端设备上的FLASH存储部件的方式:通过JTAG接口和UART接口访问,这2种方式相结合,实现了 windows下超级终端升级程序的功能。文献[8]根据无线通信的特点,在远程升级数据下载协议中引入校验,并提供文件断点续传功能,极大提高了移动通信网络环境下远程程序升级的可靠性与成功率。

在文献[9]中,将引导程序在外部FLASH中进行双备份和支持引导程序远程升级,利用处理器同时支持电可擦除编程只读存储器(EEPROM,Electrically Erasable Programmable Read-Only Memory)和FLASH引导的技术,在EEPROM引导阶段,启动引导定时器,等待引导成功。如果定时器超时,则在复杂可编程逻辑器件(CPLD,Complex Programmable Logic Device)逻辑中自动切换到FLASH的引导程序地址重新引导。

3 软件在线升级解决方案设计

3.1 基本方案介绍

在相关项目中,嵌入式系统由TI MSP430F2418单片机、现场可编程门阵列(FPGA,Field-Programmable Gate Array)、64 M片外FLASH、8M铁电存储器(FRAM)、串口等电路组成。片外FLASH支持最小4 K字节的擦除单位,可以保存数据量大、很少修改的数据如接收的程序文件、字库、声音数据。FRAM是一款非易失性存储芯片,可直接读写不需要擦除,用于保存数据量少、随时修改的配置信息如程序文件的升级配置信息。硬件连接示意图如图2所示。

根据文献[10],在MSP430F2418单片机内部地址空间里,分为3个部分,最低端的地址空间为RAM;其余一部分地址空间用于存放引导程序;另一部分空间用于存放应用程序,如图3所示。其中单片机中断向量地址空间固定为 0xffc0~0xffff,因此将引导程序空间规划到该空间附近,应用程序空间被分成2个地址空间。

当终端设备从串口或者远程通信连接中接收到程序文件下载数据包时,将数据保存在片外 FLASH中,待所有的程序文件数据接收完成并校验通过后,等待远程软件升级维护终端的程序替换指令。如果收到程序替换指令,则修改FRAM存储的升级配置信息,指示有新的应用程序文件,然后从应用程序空间返回到引导程序空间。引导程序按照上电的执行流程进行升级替换。

3.2 设备意外掉电风险避免措施

在远程升级过程中,设备意外掉电是导致升级失败的主要风险,为了避免在升级程序过程中设备掉电的影响,采取了以下3个措施:①在FRAM中规划一片地址空间用于存放升级进度的信息。当升级的应用程序正常运行时,修改升级进度为已完成状态。引导程序通过检测该升级进度的值,进一步判断应用程序空间的程序是否有效。为了保证FRAM中该部分数据的正确性,采用 16位循环冗余校验码(CRC16)校验。如果校验失败,则对该部分数据重新初始化,并且按正常方式引导应用程序;②中断向量地址空间规划到引导程序空间,不必在替换程序时擦除中断向量区。应用程序的中断服务程序地址到内存指定地址如0x200进行存放,在引导程序的中断服务程序入口检测内存该指定地址的值是否有效,有效则直接跳转到应用程序的中断服务程序,否则继续执行引导程序中的中断服务程序;③在片外FLASH中规划两片地址空间如图3所示,应用程序区 1和应用程序区 2,这两个区分别是升级区和备份区。从计算机端或远程通信连接下载得到的升级程序文件,首先存储在片外FLASH的升级区中。升级程序文件校验通过后,修改FRAM的升级标志,并主动退出应用程序回到引导程序。待引导程序完成升级文件的替换后,升级区变为备份区,原备份区变为升级区,等待下次程序升级文件的写入。通过这种存储、校验、替换的方式,可以避免传输错误导致升级失败的风险。

3.3 改进后的两阶段引导流程

如图4所示,当设备上电后,单片机从复位中断服务向量所指向的地址即引导程序的首地址开始执行。在引导程序里,首先关闭设备的看门狗和中断,初始化硬件,然后从FRAM读取升级配置信息,做出以下判断:①如果该升级配置信息指示在片外FLASH有新的应用程序,则擦除片内应用程序地址区间,从片外FLASH读出升级的应用程序文件数据,写入到片内的应用程序地址区间进行应用程序的升级替换;②如果指示升级的程序文件运行失败,需要恢复备份的应用程序,则擦除片内应用程序地址区间,从片外FLASH读出备份的应用程序文件数据,写入到片内的应用程序地址区间进行恢复;③如果指示程序正常运行,则判断应用程序的入口地址是否有效,有效则跳转到入口执行应用程序,否则执行串口接收程序,等待串口程序下载;④设备维护人员在终端设备上电时刻可以人工干预引导流程,通过某种外部事件比如按键事件,暂时中断引导流程,让引导程序直接进入串口升级命令等待阶段,在一段时间内如果收到串口程序下载命令,则执行串口接收程序,等待串口程序下载。否则超时后,继续引导。

4 结语

在嵌入式终端设备软件功能日益复杂的情况下,软件的升级维护成本不容忽视。本方案在单片机软件远程维护上,提供了一种可靠的升级方式,既支持本地串口下载,又支持远程下载的升级接口,并针对升级过程中设备意外掉电的情况提供了解决方法。文中创新点:单片机片内FLASH与片外FLASH相结合的方式,升级过程中设备意外掉电,上电后可继续升级的解决方案,同时支持升级与备份恢复功能。

[1] 李俊,王金海.基于 TFTP 协议的 ARM 软件远程更新系统[J].工矿自动化,2010(07):22-25.

[2] 陶维青, 王付军.基于 GPRS 网络的 MSP430 单片机Flash远程更新方法[J].电测与仪表,2007(07):33-36.

[3] 梅亮,林辉.TMS320F2812 代码在线升级的研究与设计[J].电气传动,2006,36(07):62-64.

[4] 陈波,石旭刚,李栋.嵌入式设备软件自动升级技术[J].计算机时代,2008 (04): 54-55.

[5] 石乃轩,冯伟.基于 TMS320VC55x DSP在线升级的设计与实现[J].通信技术,2010,43(07):236-238.

[6] 蔡作英.基于 FLASH的嵌入式系统自动升级的实现[J].福建电脑,2005(06):73-74.

[7] 伍方辉,方安安,刘华珠.嵌入式系统中的 Flash设计与分析[J].微计算机信息(嵌入式与 SOC),2009,25(2-2):25-26.

[8] 陈林,林金朝.一种基于嵌入式系统的远程程序更新机制[J].微计算机信息(嵌入式与 SOC),2007,23(9-2):4-6.

[9] 邓娟,彭真明.基于嵌入式系统的远程在线升级双 BOOT设计[J].微计算机信息,2009,25(12-2):102-104.

[10] Texas Instruments.MSP430F2418[EB/OL].(2008-10-11)[2011-04-03].http://www.ti.com/product/msp430f2 418.

猜你喜欢
串口嵌入式应用程序
Focal&Naim同框发布1000系列嵌入式扬声器及全新Uniti Atmos流媒体一体机
浅谈AB PLC串口跟RFID传感器的通讯应用
删除Win10中自带的应用程序
TS系列红外传感器在嵌入式控制系统中的应用
谷歌禁止加密货币应用程序
搭建基于Qt的嵌入式开发平台
数字电源内部数据传输的串口通信方法实现
USB接口的多串口数据并行接收方法探索
串口技术的实物调试和虚拟仿真联合教学模式
倍福 CX8091嵌入式控制器