《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > 基于CDMA网络的嵌入式设备远程升级系统
基于CDMA网络的嵌入式设备远程升级系统
来源:电子技术应用2014年第2期
朱伟斌1,张 涛2,顾海涛2,邓新欣2
1. 杭州电子科技大学 电子信息学院, 浙江 杭州310018; 2. 聚光科技(杭州)股份有限公司, 浙江 杭州310018
摘要: 针对利用仿真器更新程序繁琐的问题,提出了一种全新的基于CDMA网络的远程升级解决方案。通过特殊的“常量定位”方式,实现引导升级合一和内嵌到应用程序的目的。采用虚拟复位技术,简化了升级流程。上位机通过Internet和CDMA网络与终端通信,支持数据包的断点续传,通过查看数据窗口中解析的数据包,实时了解升级的进度。测试结果表明,该方案提高了固件升级的便捷性,降低了升级的成本,有一定的参考价值。
中图分类号: TN92
文献标识码: B
文章编号: 0258-7998(2014)02-0135-04
Embedded device remote upgrade system based on CDMA network
Zhu Weibin1, Zhang Tao2, Gu Haitao2, Deng Xinxin2
1. Department of Electrical Information, Hangzhou Electronic and Information University, Hangzhou 310018, China;2. Focused Photonics(Hangzhou), Inc., Hangzhou 310018, China
Abstract: In this paper, we propose an absolutely new remote upgrade solution for embedded device based on CDMA network in order to solve the problem of fussy process in using the emulator. The method can reach the goal of the combination of bootloader and upgrading program. At the same time, they can be embedded into application program by special“constant position” pattern. What’s more, we simplify the upgrading process by adopting virtual reset technology. The upper computer will communicate with terminal via Internet and CDMA network, support breakpoint resume and can achieve the updating schedule viewing parsed packets in data window. The experimental results prove that the solution is useful to improve the facility of firmware upgrade and can reduce the cost.
Key words : embedded device; remote upgrade; virtual reset; breakpoint resume ;CDMA

    近年来,随着计算机技术及集成电路技术的发展,嵌入式设备广泛应用于通信、网络、工控、医疗、电子等领域。随着用户需求的提升,设备的升级越来越频繁。然而有些设备安装在高空高压环境下,作业危险性很大。因此,需要一套行之有效的设备管理及升级方案,让操作人员可以通过无线的方式[1]进行产品的升级和维护。
    本文的软件升级方案以TI公司的MSP430F5438A[2]为例,通过片内Flash备份,引导升级合一,常量定位,虚拟复位等方式,避免了程序升级需要上电复位及设备意外掉电导致升级失败等风险,使终端设备实现了软件升级远程化,无需引导等待,掉电可恢复,数据包可断点续传,稳定可靠的目的。
1 基本原理
1.1远程升级系统介绍

    CDMA2000 1X是CDMA2000第三代无线通信系统的第一个阶段,完全兼容IS-95,采用码分和频分结合的多址技术。CDMA2000 1X的空中信道支持的调制方式在兼容CDMAOne的基础上进行了极大的增强,单个用于传输分组数据的空中信道的最大传输速率可以达到307.2 kb/s,是真正意义上的第三代移动通信系统[3]。如图1所示,本方案中上位机作为网络服务器,将升级代码借助Internet、CDMA网络发送到远程终端的CDMA模块中。MSP430读取模块中的缓存,存入到内部的Flash中,待远程终端接收完全部的升级代码并校验正确后开始升级。

1.2 升级实现原理介绍
    本方案将程序存储空间划分为Boot区、Code区、Temp区、Flag区和Vector区。Boot区存放基本的Flash读写、标志判断等代码(不含通信处理及基本操作);Code区存放完整的应用程序工程代码(含通信处理及基本操作);Temp区用于备份程序区的代码;Flag区是专门存放升级标志位的特殊区域;Vector区用于备份程序区的中断向量。其中Boot区代码使用特殊的“常量定位”方式添加到应用程序中,与Code区的应用程序一次编译完成,且Boot区提供UpdateAPI函数供Code区调用。
    MSP430F543A的Code Flash最多为256 KB,共128段,擦除的时候必须按段擦除,写入或者读出的时候按字或者字节进行操作。在Main Flash 中每段seg均为512 B,在Information Flash中每段为128 B。由于BankA分为0x40000-0x45bff和0x5c00-0xffff两部分,段擦除会将两部分都擦除,故在BankA中不使用0x40000-0x45bff(共23 KB),用户中断向量和备份中断向量各为512 B,占据1 KB,Boot区分配16 KB。由于要程序升级可恢复,故做成备份的模式,这样就达到了Temp区和Code区均为(256 KB-23KB-1 KB-16 KB)/2=108 KB的最佳效果。
    在应用程序中下载完代码并校验正确后置位升级进度,通过虚拟复位跳转到Boot区,读取升级标志位来选择相应的处理。如果置位的是下载完成标志,则按照分块交换的理念,逐个相对应地交换,待全部交换完成,则跳转到应用程序入口,开始执行交换后的新应用程序,如图2所示。

 

 

2 关键技术
2.1 常量定位技术

    一个函数的入口地址称为函数的指针。可以用一个指针变量指向函数,然后通过该指针变量调用此函数。而Const常量定位技术就是从此衍生出来的。
 在本方案中首先建立一个完整的工程,编写Boot区代码。开辟一段专门空间(0x5c00-0x5cff)来存储Boot区函数的入口地址,得到Boot区txt格式的文件,转换成16进制数据文件后,通过静态存储的方式定位到实际运行程序中在Boot区开辟的固定区间内(0x5c00-0x9bff),Code区通过Boot区提供的UpdateAPI函数入口地址,将其转换成Code区函数后供自己调用。
    为了防止误升级,在Boot区定义一个读取软件版本信息的函数int s_Boot_GetUpdateVersion( ),此函数在Boot区的入口地址是56 6d,把它存放在0x5c00-0x5c01的空间内。在Code区中加入转换后的Boot区代码后,再自定义函数int(*Boot_GetUpdateVersion)(),然后将存储在0x5c00-0x5c01处的s_Boot_GetUpdateVersion入口地址赋给该函数,接着调用Code区的(*Boot_GetUpdateVersion)()函数即可实现软件版本信息读取的功能。
   可见通过常量定位这种方式,可以将应用程序和Boot程序一次编译完成,Boot区提供UpdateAPI函数供Code区调用。
2.2 虚拟复位技术
    所谓的虚拟复位不是通过产生外部的复位信号来迫使单片机复位,而是通过改变PC指针实现程序的跳转。通常的方法是在C语言中内嵌汇编语言来实现。只要在需要复位的地方嵌入汇编语言[4] asm("mov &0xFFFE,PC")即可实现虚拟复位[3]。然而内嵌汇编总是存在诸多麻烦,因此,提出一种新的虚拟复位方法:
    ((void (*)(void))0x5d00)();
    由于0x5d00是复位地址,故把它强制转换成指向函数的指针,然后调用此函数,达到程序复位的目的。同时这种方法也解决了升级中存在的一个比较严重的问题:由于虚拟复位是通过内嵌的方式提供API函数供Code区函数调用的,而Code区的起始地址是0x9c00,则虚拟复位后的PC指针指向就是0x9c00,而不是Boot区的0x5d00。所以Code区的应用程序在执行虚拟复位时,无法跳转到Boot区,这样在Boot区要完成的代码交换也将无法进行。可见此种无需嵌入汇编的方法,简单方便且切实可行。
2.3 断点续传技术
    UDP协议被称为一种不可靠的传输协议,因为从发送方到接收方的传递过程中出现数据包的丢失,协议本身并不能做出任何检测和提示,但具有TCP所望尘莫及的速度优势。为了使远程升级系统既获得实时的性能,又获得相对可靠性,必须在上层应用程序中完成安全和排序等功能,并建立可靠传递机制。
    在本方案设计中,专门在Information Flash中开辟一段空间0x1800—0x187f,用来记录当前经过CRC16校验正确后的数据包数。为了保证Flash擦除的方便和稳定,规定数据包中数据的长度必须为128 B、256 B或者512 B,若所要传输的数据小于规定字节数,需在数据包中填充0xff方法以保证数据的一致性。当由于网络不稳定或者断电等突发情况下导致升级失败时,若再次启动升级,终端设备要首先读取当前数据包数,擦除Flash中空余的存储空间,然后发送含有当前数据包数的升级配置数据包给上位机,上位机在获得当前命令包后计算下一数据包在解析文件中的位置,并组包发送。从而避免了相同数据包的重复发送和Flash的全部擦除。
3 上位机软件设计
 上位机方案采用Visual C++中的MFC对话框编程,其中的关键是对升级文件TXT文件的处理。@为地址引导符,其后数据为地址,即接下来代码所存入的Flash地址起始位置。如果地址为0xFF80-0xFFFF,则为中断向量地址,特别@后面的FFFE是应用程序中断向量表中的复位地址。q为结束字符,表明文件结束。
    上位机完成对文件的解析后,通过数据包与终端进行交互。数据包定义如表1所示。

    其中命令码是用来区分数据包所要执行的具体操作。由于寻址范围超过了64 KB,故采用4 B来表示地址信息。
4 风险避免措施
    升级中不可避免地存在各种风险,本方案采取如下措施: (1)将Code区和Temp划分为若干块,每次完成块交换后,都将置备份标志,如果交换过程中有一块交换不成功则再次虚拟复位,通过升级标志位的判断进行恢复处理,将已经和Temp交换的部分再次交换回来保证原程序依然可用。(2)在下载代码的过程中,每一包数据在上位机都计算CRC16校验值,然后单片机接收数据后重新计算CRC16值,如果两者相等才认为这包数据正确,给出正确回应[5]。(3)遇到在应用程序中代码下载不完整或者代码下载时断电的情况,可通过读取升级进度标志,单片机重新复位后不会在Boot区中进行代码交换。(4)专门划分一个区域用于记录升级进度信息,通过修改进度信息来进行相应的处理[5]。(5)在等待升级完成的过程中,发送一定数目的升级完成确认包(地址信息为01 01 01 01,命令码为88),如果收到回应,则确认升级完成。(6)本方案并不擦除原来的程序,只是将Code区和Temp区互换,所以可以实现升级区变为备份区,备份区变为升级区,等待下次文件的写入,也可以按照需求还原程序。通过这种校验、存储、替换的方式,可以有效地降低由于传输错误导致升级失败的风险。
5 测试结果及总结
 为了保证通信的速率和稳定,本测试设置通信超时为5 s,重发次数为5次。即发送的数据包如果5 s内没有回应,则重发。重发次数最多为5次,否则提示升级失败。打开端口后,等待设备的登录,登录成功且升级文件解析正确后才可进行升级。点击“程序升级”按钮,上位机和终端开始交互。终端接收完正确数据后,虚拟复位完成Code区和Temp区的代码交换。运行新程序后终端重启CDMA模块仍然发送包含新IP地址和终端ID的通信连接数据包给上位机。若终端ID前后一致且对升级完成确认包的回应正确,则表明升级成功。测试结果如图3所示。

    本方案借助Internet、CDMA网络成功地实现了远程终端的软件升级。同时运用常量定位技术达到了升级无需引导等待的目的;虚拟复位、断点续传和升级进度标志的应用增加了升级程序抗风险的能力;采用片内Flash备份的方式,支持升级和备份恢复的功能。随着通信技术和自编程序技术的发展,本方案对嵌入式终端设备的软件更新具有极大的参考意义。
参考文献
[1] 唐文, 刘芳伶. MSP430系列单片机软件在线升级设计与实现[J].通信技术,2012,45(1):144-146.
[2] 美国德州仪器.MSP430 Flash SelfProgramming Technique[Z]. SLLAA103.2004.
[3] 张云. 第三代移动通信技术特点、后续演进及其全球竞争格局[J]. 中国集成电路, 2009(2):67-72.
[4] 孙亚萍, 张慧熙.一种新型DSP软件在线升级方法的研究与实现[J].微型机与应用,2010,29(5):72-74.
[5] 罗文, 王莉娜, 肖鲲.基于GPRS的嵌入式系统远程监控和升级[J].电子技术应用, 2010,36(5):159-162.

此内容为AET网站原创,未经授权禁止转载。