2012年第01期,第45卷 通 信 技 术 Vol.45,No.01,2012 总第241期 Communications Technology No.241,Totally
MSP430系列单片机软件在线升级设计与实现
唐 文, 刘芳伶
(中国电子科技集团第三十研究所,四川 成都610041)
【摘 要】根据目前嵌入式终端设备程序升级技术及闪存技术,以MSP430系列单片机程序的在线升级方案为例,介绍了嵌入式终端设备在线升级中两阶段引导技术,采用片内FLASH与片外FLASH相结合的方式,设计并验证了一种基于两阶段引导技术的软件升级维护方案,突破了设备意外掉电导致升级失败的风险避免关键技术。方案在实际项目中得到大量应用,极大的提高了嵌入式终端设备软件升级的效率。
【关键词】单片机;嵌入式系统;引导程序;FLASH
【中图分类号】TP302.1 【文献标识码】B 【文章编号】1002-0802(2012)01-0144-03
Design and Implementation of Program Updating for MSP430
TANG Wen, LIU Fang-ling
(No.30 Institute of CETC, Chengdu Sichuan 610041, China)
【Abstract】According to online program updating of chip-in FLASH, the two-stage booting method of embedded system is described. Based on this method and in combination of chip-in FLASH and chip-out FLASH, a new program updating method is designed and implemented, and more attention is paid to the avoidance of updating risk due to the unexpected power failure. This design is now used in actual project, thus greatly raising online program updating efficiency of the device.
【Key words MCU;embedded system;boot loader;FLASH
0 引言
随着嵌入式软硬件技术的发展,大量的消费类电子产品开始使用该技术以实现各种复杂的功能。嵌入式终端设备随着功能的日益完善、终端数量的不断攀升,而且嵌入式软件技术的应用使系统实现新功能更加方便,这就需要提供一套有效的设备管理及升级方案,让终端维护人员可以通过多种方式进行升级维护:如串口、USB口、以太网口[1]、电话线等。
为了实现软件升级,嵌入式终端设备都会提供引导程序,用于检测应用程序的开始执行地址。对于远程维护工作,需要使用终端与系统提供的通信服务,可以将这部分的维护功能放在应用程序中实现。
对于本地维护工作,即维护人员能够接触到终端设备进行维护,则有两种途径,可以在引导程序中和应用程序中实现。
方案以TI公司的MSP4302418单片机为例,通过片内闪存(FLASH)与片外FLASH相结合的方式,设计并验证了一种基于两阶段引导技术的软件升级维护方案。
1 两阶段引导技术
两阶段引导是指通过在单片机片内FLASH里固化一个引导程序,通过该程序来选择引导应用程序。每次上电执行时,单片机从引导程序开始执行,首先判断应用程序是否有效,若无效,则启动升级程序,通过该程序实现在外部存储空间选择合适的程序包,写入单片机片内FLASH的应用程序空间。当应用程序正常执行时,若收到升级命令,则由应用程序将升级数据包存储在片外FLASH中,再跳出执行升级程序。当应用程序不存在或错误时能直接进入升级程序,从而保证升级不成功可进行再次升级。
其实现原理是在目标芯片中放置3段代码:一段为引导程序;一段为应用程序;一段为本地升级程序。引导程序,升级程序为固定代码,利用FLASH替换程
收稿日期:2011-11-08。
作者简介:唐 文(1977-),女,硕士研究生,工程师,主要研究方向VOIP,窄带数据通信;刘芳伶
(1981-),女,学士,工程师,主要研究方向
为WDM,窄带数据通信。
144
145
序擦除应用程序并写入新的代码。同时需要通过修改链接文件来指定各段代码的地址空间,具体操作方法参考文献[2],保证三者的地址段不重叠。
引导基本流程如图1所示,本地升级程序执行时,与外部通信,先接收擦除指令,擦除应用程序空间,再将外部FLASH 的新程序内容烧写至片内FLASH,跳到新应用程序入口。需要注意的是,在升级时,应该关闭所有中断,先擦除应用程序入口地址空间,最后写入应用程序入口地址,可以尽量保证不会进入不完整的程序。应用程序是否有效可以通过检测应用程序入口地址是否有效来判断:若入口地址为0xFFFF 则无效。正常情况下,应用程序不
会主动退出。
图1 两阶段引导流程
例如文献[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所示。
图2 硬件连接示意
根据文献[10],在MSP430F2418单片机内部地址空间里,分为3个部分,最低端的地址空间为RAM;其余一部分地址空间用于存放引导程序;另一部分空间用于存放应用程序,如图3所示。其中单片机中断向量地址空间固定为0xffc0~0xffff,因此将引导程序空间规划到该空间附近,应用程序空间被分成2个地址空间。
146
0x0000
0x3100
0xeaff 0xffff
0x6fffff 0x700000
0x71ffff 0x720000
0x73ffff 0x7fffff
0x740000
片内FLASH 地址规划
片外FLASH 地址规划
图3 存储空间分布
当终端设备从串口或者远程通信连接中接收到程序文件下载数据包时,将数据保存在片外FLASH 中,待所有的程序文件数据接收完成并校验通过后,等待远程软件升级维护终端的程序替换指令。如果收到程序替换指令,则修改FRAM 存储的升级配置信息,指示有新的应用程序文件,然后从应用程序空间返回到引导程序空间。引导程序按照上电的执行流程进行升级替换。
3.2 设备意外掉电风险避免措施
在远程升级过程中,设备意外掉电是导致升级失败的主要风险,为了避免在升级程序过程中设备掉电的影响,采取了以下3个措施:①在FRAM 中规划一片地址空间用于存放升级进度的信息。当升级的应用程序正常运行时,修改升级进度为已完成状态。引导程序通过检测该升级进度的值,进一步判断应用程序空间的程序是否有效。为了保证FRAM 中该部分数据的正确性,采用16位循环冗余校验码(CRC16)校验。如果校验失败,则对该部分数据重新初始化,并且按正常方式引导应用程序;②中断向量地址空间规划到引导程序空间,不必在替换程序时擦除中断向量区。应用程序的中断服务程序地址到内存指定地址如0x200进行存放,在引导程序的中断服务程序入口检测内存该指定地址的值是否有效,有效则直接跳转到应用程序的中断服务程序,否则继续执行引导程序中的中断服务程序;③在片外FLASH 中规划两片地址空间如图3所示,应用程序区1和应用程序区2,这两个区分别是升级区和备份区。从计算机端或远程通信连接下载得到的升级程序文件,首先存储在片外FLASH 的升级区中。升级程序文件校验通过后,修改FRAM 的升级标志,并主动退出应用程序回到引导程序。待引导程序完成升级文件的替换后,升级区变为备份区,原备份区变为升级区,等待下次程序升级文件的写入。通过这种存储、校验、替换的方式,可以避免传输错误导致升级失败的风险。
3.3 改进后的两阶段引导流程
如图4所示,当设备上电后,单片机从复位中断服务向量所指向的地址即引导程序的首地址开始执行。在引导程序里,首先关闭设备的看门狗和中断,初始化硬件,然后从FRAM 读取升级配置信息,做出
以下判断:①如果该升级配置信息指示在片外FLASH 有新的应用程序,则擦除片内应用程序地址区间,从片外FLASH 读出升级的应用程序文件数据,写入到片内的应用程序地址区间进行应用程序的升级替换;②如果指示升级的程序文件运行失败,需要恢复备份的应用程序,则擦除片内应用程序地址区间,从片外FLASH 读出备份的应用程序文件数据,写入到片内的应用程序地址区间进行恢复;③如果指示程序正常运行,则判断应用程序的入口地址是否有效,有效则跳转到入口执行应用程序,否则执行串口接收程序,等待串口程序下载;④设备维护人员在终端设备上电时刻可以人工干预引导流程,通过某种外部事件比如按键事件,暂时中断引导流程,让引导程序直接进入串口升级命令等待阶段,在一段时间内如果收到串口程序下载命令,则执行串口接收程序,等待串口程序下载。否则超时后,
继续引导。
图4 改进后的两阶段引导程序流程中国在线编程
4 结语
在嵌入式终端设备软件功能日益复杂的情况下,软件的升级维护成本不容忽视。本方案在单片机软件远程维护上,提供了一种可靠的升级方式,既支持本地串口下载,又支持远程下载的升级接口,并针
对升级过程中设备意外掉电的情况提供了解决方法。文中创新点:单片机片内FLASH 与片外FLASH 相结合的方式,升级过程中设备意外掉电,上电后可继续升级的解决方案,同时支持升级与备份恢复功能。
(下转第149页)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论