嵌入式设备软件更新系统设计与实现

2013-09-12 04:24谢晓明
电子测试 2013年20期
关键词:镜像上位备份

关 峰, 谢晓明

(北京化工大学研究生院,北京,100029)

0 引言

目前,通常的嵌入式软件更新方法是在芯片上手工接跳线并使用专用仿真器,这种方法不仅繁琐,而且成本高。本文以恩智浦公司的lpc1768为开发平台,设计并实现了嵌入式设备软件更新系统。该系统避免了传统嵌入式系统升级需要更换芯片或主板等问题,节约了人力和资金等资源。通过加入二级bootloader程序,对系统升级与否进行引导;建立备份数据区解决了系统升级过程中掉电问题;引入的传输协议确保传输过程中无误码。此系统已在实际中应用,并得到了用户好评。

1 嵌入式设备软件更新系统总体设计

lpc1768以Cortex-M3为微控制器,器操作频率可达100MHz,外围组件包含高达512KB的Flash存储器、64KB的数据存储器,非常适合用于嵌入式开发。本文将以此平台为例,对嵌入式软件设备更新系统进行阐述,系统整体架构如图1所示。

此系统可以为4个主要模块:bootloader模块、系统更新模块、正常工作模块、上位机模块。正常工作模块是嵌入式设备主体功能部分,在不需要系统更新情况下,本系统不会对其产生影响。本系统在ARM设备原有的booloader基础上,实现一个简单的二级bootloader,其通过判断嵌入式设备是否与上位机相连,引导设备到正常启动状态或是更新模式。系统更新模块需要通过ARM提供的IAP接口,配合通信协议,完成对正常模式的更新。更新系统的上位机采用MFC实现,上位机需实现通信协议中上位机部分的功能,并且能同步显示更新过程。

2 系统下位机的软件实现

2.1 内存划分

传统的嵌入式设备内存划分如图2(a)所示。这种方式必须借用特定的仿真器,以跳线方式由专业人员完成程序更新。本文所述机制对Flash进行了重新的设计,如图2(b)所示。bootloader存储区后面设计四个镜像文件存储区。其中一个存储区用于存放更新模式镜像文件;另两个存储区存储工作文件,两个镜像文件交替使用,其中一个为另一个的备份镜像,在更新系统遇到断电等特殊情况下,启动备份镜像;最后一个是参数配置区,系统根据其中参数决定启动两个工作模式中的一个以及将新镜像更新到哪个工作区。

图1 嵌入式设备软件更新系统总体设计

图2(a) 传统Flash布局 (b) 嵌入式软件更新系统Flash布局

2.2 分散加载机制

可以采用分散加载机制实现上文所述的Flash分配方案,分散加载文件对嵌入式系统存取器进行分别描述,他直接对应目标硬件存储器的起始地址和范围。同时,它在应用程序链接时用于告诉连接器用户程序代码和数据的运行地址和加载地址,在链接时由链接器产生相应的加载地址和运行地址符号,包括代码和数据的加载起始地址、运行地址和长度等。

程序在链接时可以根据分散加载文件中指定的存储器分配方案,将可执行镜像文件分成指定的多个分区,并定位于指定的存储器物理地址。当嵌入式系统在重新上电或复位时,首先对处理器内部寄存器执行初始化,然后执行ROM存储器的自举代码,根据链接时的存储器分配方案,将相应代码和数据从加载地址复制到运行地址。这样,定位于RAM存储器中的代码和数据就在RAM中执行,而不再从ROM存储器中执行。

读书,能提升我们的视野和格局。当站在二楼观景时,我们看到的也许是街角的某处垃圾场,而在二十二楼时,你会将满城的风景,尽收眼底。那些年走过的路,遇到的人,读过的书,就是我们的格局和视野。这些决定了我们看问题的层次和对事物的判断。人生阅历越是丰厚,就越是需要通过读书去消化内心的褶皱和疤痕,和优秀的书籍对话,精神自然就往来于天地之间,曲曲折折、隐隐约约、层层叠叠的心境,也渐渐变得柳暗花明,人,就不至于走到山穷水尽的地步。

2.3 更新模块的实现

2.3.1 IAP原理

在应用编程(IAP)函数是固化在微处理器内部flash上的一些函数代码,最终的用户程序可以直接通过调用这些函数来对内部Flash进行擦除和编程操作。对于lpc1768来说,IAP命令是Thumb代码,位于地址0x7FFFFFF。IAP功能的具体使用方法下所示:

(1)定义IAP程序入口地址。由于IAP地址的第0位是1,因此当程序计数器转移到该地址时会引起Thumb指令集的变化。

#define IAP_ADD & 0x7FFFFF1

(2)定义数据结构或指针,将IAP命令表和结果表传递给IAP函数

unsigned long opt[5];

unsigned long ret [2];

用来传递函数调用时的参数,参数不同决定了不同的功能,比如写入或擦除。

(3)定义函数类型指针

typedef void (*IAP)(unsigned * int, unsigned *int);

IAP iap_in;

(4)设置函数类型指针

iap_in = (IAP)IAP_ADD;

(5)调用IAP

iap_entrance(opt, ret);

在应用IAP接口实现工作镜像更新时,要顺次执行以下步骤:准备操作扇区,删除扇区,准备操作扇区,写扇区。如果写扇区前没有进行准备上述操作,整个操作将失败。

2.3.2 更新系统抗误码性设计

可以通过现有的Internet、RS232或者其他任何通信方式将新的程序镜像传输到嵌入式设备中。在进行升级的过程中,难免会出现传输误码的情况。由于程序升级过程中传输的数据是要运行的代码,所以很小的传输错误都会造成升级后的系统瘫痪。因此要处理传输过程中的误码情况,本系统参考XMODEM协议处理传输误码情况,实现一个抗误码的通信协议。本系统将要传输的镜像分成若干信息包传输,信息包包含一个标题开始字符,一个单字节包序号,128字节数据字节和一个双字节的CRC16校验位。信息包格式如表2.1所示

表1 通信协议包格式

整个传输过程描述如下:传输由接收方启动,方法是向发送方发送开始信号,当接受方发送开始信号到达发送方,发送方认为可以发送第一个数据包,传输已经启动。发送方以每次128字节加上包头,包序号,末尾加上校验和,打包成数据包格式传送。发送方发了第一包后就等待接受方发送的确认字节,如果收到接收方传来的正确确认,就认为数据包被接收方正确接收,发送方继续发送下一数据包;如果发送方接收到接收方传来的否定确认字节,则表示接收方请求重发刚才的数据包;如果发送方接收到接收方传来的停止字节,则表示接收方请求无条件停止传输。

2.3.3 更新系统抗掉电性设计

对于升级过程中突然掉电情况,可以如图2(b)所示,通过在外存中规划备份镜像来保证系统再次加电的正常运行。在参数镜像中设置两个参数,一个表示启动镜像号,另一个表示备份镜像号。在系统正常启动时,引导区会读取参数镜像中的启动镜像号,将程序引导到启动镜像号标志的代码段。在软件更新情况下,由引导区引导程序进入更新模式中,读取备份镜像号以更新镜像,如果没有发生系统掉电等意外终止,更新完成后系统将交换备份镜像号与启动镜像号。因此,下次启动时将启动新镜像,而原镜像则成为备份镜像。如果更新过程中发生意外,由于启动镜像没有遭到破坏,启动镜像号没有改变,因此下次启动时系统还是会回到未进行软件更新的状态,达到正常启动的目的。

3 MFC上位机软件实现

为了配合整个更新系统实现,需要一个上位机软件将要更新的镜像传输到嵌入式设备中。本系统选用MFC来实现上位机。本文将重点阐述上位机软件与下位机软件通信部分的具体实现。 上位机首先读取要更新的镜像文件,计算要发送的数据包个数。然后根据表1构造数据包发送给下位机。之后通过嵌入式设备的返回信号做相应的处理,如果发生异常,上位机重新发送刚才的数据包,最大尝试10次。如果上位机正常传输完全部数据,则发送结束字节通知嵌入式设备。

4 结语

本文提出并实现了嵌入式设备软件更新的解决方案。通过设置备份存储区,解决了传输过程中掉电的问题。通过在传输数据中加入传输协议,保证传输过程的无差错性。由于需要更多的存储空间,该方案略微增加了硬件成本,但该方案有操作便捷、不需要对硬件改造、可靠性高等优点,这个代价是值得的。

[1]黄一平,农丽萍,苏检德,罗晓曙.ARM微控制器代码非法复制技术研究与应用[J].计算机工程与科学.2011(33)

[2]NXP Semiconductors.LPC17xx user manual Rev.2[Z].2010

[3]夏爽.ARM处理器的分散加载及特殊应用研究[J].单片机与嵌入式系统应用, 2009(4)

[4]洪占勇.基于XMODEM协议的在版文件下载软件设计[J].微计算机信息,2008(5)

猜你喜欢
镜像上位备份
“备份”25年:邓清明圆梦
VSAT卫星通信备份技术研究
镜像
创建vSphere 备份任务
镜像
特斯拉 风云之老阿姨上位
“三扶”齐上位 决战必打赢
基于ZigBee和VC上位机的教室智能监测管理系统
旧瓶装新酒天宫二号从备份变实验室
以新思路促推现代农业上位