APP下载

嵌入式设备远程在线升级技术的研究

2012-02-15黄绳雄张荣芬

电子设计工程 2012年9期
关键词:程序代码数据包代码

黄绳雄,张荣芬

(贵州大学 理学院,贵州 贵阳 550025)

随着电子技术、通信技术以及计算机技术的迅猛发展,嵌入式系统已经广泛应用于各领域,各种行业对嵌入式设备的系统功能、性能以及规模的要求都在日益提高,开发者必须能够针对客户的需求及时对系统进行维护和升级,以延长系统的使用周期,改善系统的性能。目前远程升级方式主要有:采用Boot加双Loader的结构式设计实现系统的完整升级、基于 TFTP(Trivial File Transfer Protocol)协议的 ARM 软件远程更新系统等。笔者对基于LM3S6965微控制器的嵌入式系统软件远程在线升级技术进行研究,并提出了一种已成功验证的在线升级实现方法,该方法对减少嵌入式设备的维护成本、提高设备的工作效率具有很重要的现实意义。

1 嵌入式系统功能及在线升级原理

1.1 嵌入式系统的功能

嵌入式系统的运行主要分为工作模式和升级模式,其中工作模式为默认模式,工作模式指设备正常工作状态,嵌入式系统按预定的程序完成相应的测控任务,并且通过internet、GPRS等方式向监控管理中心上报监测参数。升级模式是指嵌入式处于升级状态,包括接收服务器发送的程序代码,以及在flash区域固化程序代码等[1]。

1.2 远程在线升级原理

整个升级系统主要由服务器和远程终端组成,其中远程终端包括基于ARM内核的嵌入式控制芯片和Modem模块。二者之间通过RS232总线连接,服务器与远程终端通过Internet进行通信。系统结构如图1所示。

图1 系统结构图Fig.1 Structure of system

服务器作为软件升级任务的主动发起者,首先向嵌入式系统发送升级命令,嵌入式系统在硬件启动后,首先执行引导程序Bootloader进行一系列的初始化操作,同时选择执行升级控制程序,待服务器接收到嵌入式系统的确认升级回复后即开始发送升级程序代码,在发送升级程序代码前,服务器会将这些代码拆分成固定长度的多个数据单元,以每个数据单元为核心组成数据包 (数据包内容包含数据包头标志、命令头、包序列、数据单元、CRC校验码、数据包尾标志、总包数等)[2],嵌入式系统每接收到一个数据包,都将返回确认信息,若数据包校验无误,则在规定的FLASH区域进行旧程序的擦除以及新程序的复制,从而达到远程终端的嵌入式系统软件的在线升级目的。在线升级实现流程如图2所示。

2 嵌入式系统在线升级的设计

2.1 硬件平台

图2 在线升级实现流程Fig.2 Procedures of online update

笔者设计的嵌入式系统,其硬件结构主要包括一个片外EEPROM、微处理器LM3S6965及相应的接口电路。LM3S6965处理器是Luminary Micro公司生产的Stellaris系列微控制器,该芯片内部具有256 kB FLASH和64 kB SRAM,LM3S6965芯片能够提供高效的性能,广泛的集成功能,适用于各种关注成本并明确要求具有过程控制以及连接能力的应用方案,此微处理器是针对工业的应用方案而设计的,这些方案包括远程监控、测试和测量设备等。

2.2 嵌入式系统软件设计

2.2.1 Bootloader工作原理

Bootloader位于FLASH的起始处,主要是用来启动系统,并且装载用户程序执行,如果没有Bootloader,硬件启动成功后,将直接运行用户应用程序。反之,Bootloader的启动代码将先被执行,进行一系列的初始化操作后,根据预先设定的条件,选择执行用户应用程序或升级控制程序。

Bootloader包含两种不同的操作模式:“启动加载”模式和“下载”模式。启动加载模式:这种模式也称为“自主”模式。也就是Bootloader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。这种模式是Bootloader的正常工作模式。下载模式:在这种模式下,目标机上的Bootloader将通过串口连接或网络连接等通信手段从PC下载文件,比如:下载内核映像和根文件系统映像等。从主机下载的文件通常首先被Bootloader保存到目标机的RAM中,然后再被Bootloader写到目标机上的FLASH类固态存储设备中[3]。Bootloader工作原理流程图如图3所示。

图3 Bootloader工作原理流程Fig.3 Procedures of working principle for Bootloader

2.2.2 FLASH存储器编程及升级流程

远程终端的升级主要是对ARM芯片内部的FLASH存储器的原始数据进行擦除以及新数据的下载的过程。本研究采用IAP(In-Application Programming)技术进行FLASH编程,在应用编程IAP是从结构上将FLASH存储器映射为两个存储体,当运行一个存储体上的用户程序时,可对另一个存储体重新编程,之后将程序从一个存储体转向另一个;同时还可以在应用程序控制下,对程序某段存储空间进行读取、擦除和写入操作。IAP的实现极为灵活,可利用单片机的串行口接到计算机的RS232口,通过专门设计的固件程序来编程内部存储器,可以通过现有的Internet或其他通讯方式很方便地实现远程升级和维护[4]。

为了实现升级将ARM芯片内部的FLASH存储器划分为Bootloader区(程序启动区)、升级处理区、用户代码0区、用户代码1区。如图4所示。

图4 FLASH内部划分Fig.4 Internal division of FLASH

启动区主要用于存放系统初始化代码以及引导程序Bootloader,当CPU复位后,自动执行该段程序代码,该程序的主要功能是读取片外EEPROM中相关标志,判定嵌入式系统的运行模式,若是工作模式,则根据片外EEPROM中其他标志,跳转到规定的应用程序区的首地址;若是升级模式,则进入软件升级处理部分的首地址。

升级处理区主要是负责接收程序代码数据包、校验、固化程序代码等;当升级完毕后,将修改片外EEPROM中相关标志,指示CPU复位后的运行模式和复位后应运行的程序区。

用户代码0区和用户代码1区用于交替存放当前用户代码以及升级代码,若当前用户代码放在0区,则将接收到的升级代码存放在1区,此时用户代码1区便成为当前终端指向的用户程序,而用户代码0区则用于存放下次升级时的新代码。

远程终端上电后首先进入Bootloader区进行系统的初始化,接着终端从片外的EEPROM中读取升级配置,包括升级标志位,已收到的最后一个数据包的ID等,若终端处于升级状态,则发出向服务器索要升级数据的指令,此时指令中将包含终端上次已接收到的最后一个数据包的ID,这样可以避免服务器重复发送数据包,实现续传的功能。终端通过Internet接收数据包并对数据包进行校验判断以保证接收到正确的数据。由于FLASH中进行编程的最小单位是页,当接收到的数据达到一页后,通过IAP进行编程,编程结束后将最后一条数据包的ID保存在EEPROM中,所有升级数据发送结束并编程成功后,通过IAP指示CPU复位后应运行的应用程序区域[5]。具体的软件升级流程图如图5所示。

3 系统测试

本方案中的通信部分采用面向连接的TCP(Transport Control Protocol)通信协议进行数据的传输。TCP协议属于传输层协议,提供IP环境下的数据可靠传输,它提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复用。通过面向连接、端到端和可靠的数据包发送。通俗说,它是事先为所发送的数据开辟出连接好的通道,然后再进行数据发送,这样可以减少数据传输过程的出错率[6]。利用TCP协议实现数据传输的部分代码如下:

图5 软件升级流程图Fig.5 Procedures of software update

err_t APP_recv(void*arg,struct tcp_pcb*pcb,struct pbuf*p , err_t err)

{ char Date[3000];

struct pbuf*pcopy=p;

tAPPState*pState;

pState=arg;

pbuf_copy_partial(pcopy, Date,300,0);

if((err==ERR_OK) && (p!=NULL))

{

GPIOPinWrite (GPIO_PORTE_BASE, GPIO_PIN_1,GPIO_PIN_1);

Send_to_memorizer( );

GPIOPinWrite (GPIO_PORTE_BASE, GPIO_PIN_1,~ GPIO_PIN_1);

Lcd_display

while(pcopy) {

tcp_write (pcb,jin,pcopy ->len,TCP_WRITE_FLAG_COPY);

pcopy=pcopy->next;

}

pbuf_free(p);

pbuf_free(pcopy);

}

if((err==ERR_OK) && (p==NULL))

{

tcp_arg(pcb, NULL);

tcp_sent(pcb, NULL);

tcp_recv(pcb, NULL);

mem_free(pState);

tcp_close(pcb);

}

return ERR_OK;

}

根据以上程序,利用TCP&UDP测试工具对本方案进行测试,测试结果如图6及表1所示。

图6 测试结果Fig.6 Test results

表1 测试报告Tab.1 Test report

4 结 论

通过数百次的实验表明,本文提出的这种嵌入式远程升级的方案在利用TCP通信协议进行软件的远程升级时,具有较高的升级成功率,较快的升级速度,且代码容量的大小基本符合FLASH存储器的要求。

[1]王田苗.嵌入式系统设计与实例开发[M].北京:清华大学出版社,2002.

[2]马丰玺,杨斌,卫洪春.非易失存储器NANDFlash及其在嵌入式系统中的应用[J].计算机技术与发展,2007,17(1):203-206.MA Feng-xi,YANG Bin,WEI Hong-chun.The non-volatile memory NANDFlash and the application in the embedded system[J].Computer Technology and Development,2007,17(1):203-206.

[3]季昱,林俊超,宋飞.ARM嵌入式应用系统开发典型实例[M].北京:中国电力出版社,2005.

[4]韩山,郭云,付海艳.ARM微处理器应用开发[M].北京:清华大学出版社,2005.

[5]姜新.嵌入式控制系统软件平台的研究与实现 [D].武汉:华中科技大学,2003.

[6]赵榛,鲍飞,刘克钧.一个改进的TCP三路握手方案[J].华中科技大学学报:自然科学版,2004,32(4):77-79.ZHAO Zhen,BAO Fei,LIU Ke-jun.A scheme of three way handshake for TCP[J].Journal of Huazhong University of Science and Technology:Natural Science Edition,2004,32(4):77-79.

猜你喜欢

程序代码数据包代码
二维隐蔽时间信道构建的研究*
基于Jpcap的网络数据包的监听与分析
SmartSniff
创世代码
创世代码
创世代码
创世代码
计算机网络信息安全未来发展趋势
基于图元装接模式由程序流程图自动生成源代码
嵌入式系统中程序的优化策略