首页 > 范文大全 > 正文

屏蔽门门控单元在线固件更新方法的研究

开篇:润墨网以专业的文秘视角,为您筛选了一篇屏蔽门门控单元在线固件更新方法的研究范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘 要:为了实现地铁屏蔽门门控单元在线固件更新,基于芯片本身的引导程序,采用将带FLASH库的预置程序通过CAN总线下载到芯片的随机存储器上,再利用预置程序将自行设计的引导程序固化到片内FLASH中,以实现在车站现场,远距离操作报警盘,并迅速对所有门控单元进行在线固件更新的目的。这样不但避免了为更新门控固件而拆装门控单元的麻烦,维护了程序的版权,也为地铁屏蔽门门控单元在线固件的更新提供了一种新方法

关键词:屏蔽门; 门控单元; 在线更新; 引导程序; CAN总线

中图分类号:TN919-34 文献标识码:A

文章编号:1004-373X(2011)20-0046-04

Method of Online Firmware Update for Door Control Unit in Shielded Door

WANG Xiao

(Ningbo CSR Times Transducer Technique Co., Ltd., Ningbo 315000, China)

Abstract:In order to realize the online firmware update of DCU (door control unit) in metro PSD (platform screen door), based on the boot program in chip, a method of downloading an initializing program with Flash Database through CAN (controller area network) bus to the random memory in chip is adopted, and the initializing program is used to solidify the self-designed boot program in the flash on chip by means of an initializing program to achieve the purpose that the PSA (panel of supervision and alarm) can update all DCU online. It can avoid the trouble of dismounting DCU because of the firmware update to safeguard the program copyright, but also providing a new method for online firmware update of DCU in metro PSD.

Keywords:PSD; DCU; online update; boot program; CAN bus

0 引 言

随着城市地铁产业的迅猛发展,对地铁屏蔽门的需求也越来越大。屏蔽门是一项集建筑、机械、材料、电子、通讯、软件设计等学科于一体的高科技产品,使用于地铁站台[1]。屏蔽门的作用是将站台与列车运行区域隔开,通过控制系统控制其自动开启。在控制系统中,最为重要的就是门控单元(Door Control Unit,DCU),直接控制门体开启关闭等动作,直接影响系统安全[2]。因此对门控单元应用程序的安全可靠就有特别高的要求[3]。

在设计试验或实际运行时,会出现多种原因,如出现一些设计者考虑之外的状况或需要增加一些新的功能等,因而需要修改部分DCU的程序。通常采用的是直接拆卸门控单元,或是用仿真器(Emulator)插在门控单元上单个更新应用程序。这些方法不仅更新流程冗长,耗费大量的人力物力,而且还会使地铁站台长时间停止运行。基于TI(Texas Instruments)公司的TMS320F28335数字信号处理器(Digital Signal Processor,DSP)设计的DCU,采用控制器区域网 [4](Controller Area Network,CAN)作为通信总线与远方操作报警盘(PSA)挂接。本文在此通信架构的基础上,并鉴于片内引导程序(Boot Loader)的特点,提出一种更新固件的方法,即可以在较短的时间内完成对所有DCU固件的更新,可以对指定的DCU进行固件更新,而不必拆卸DCU,并可以有效地防止应用程序的泄密。

1 预置程序及其作用

FLASH的擦除和写入是比较复杂的过程,需要比较复杂的算法,所以需要加载FLASH库函数。DSP固化的Boot Loader不支持烧写FLASH,因此需要先把加载了FLASH库的程序(即预置程序)通过CAN下载到DSP的顺序存取与随机存取存储器(Sequential Access and Random Access Memory,SARAM)中去,然后再通过预置程序,把自行设计的引导程序下载进片内FLASH。

1.1 预置程序设计

这段程序是基于DSP固化的Boot Loader[5],通过CAN下载到芯片的SARAM中的。要完成以下几个工作:

首先,完成初始化引导,包括堆栈初始化,选择芯片对象模式,选择地址模式,选择M0/M1映射模式,使用堆栈地址模式,初始化数据指针[6]。

然后,跳转到CAN_Boot函数,部分代码如图1所示。

图1 CAN_Boot函数部分代码

CopyData函数前面是一些模块的初始化和复制数据前的准备工作,这里最重要的是读取了FLASH程序段的入口地址,并把它写入到FLASH中去,这是Boot Loader启动的关键。

大部分复制数据到FLASH的工作都是在CopyData函数中实现的,部分代码如图2所示。 GetWordData函数的功能是通过CAN总线读取2个字节的数据,由于TI工具编译生成的8比特二进制程序文件,是按LSB(Least Significant Byte,最低有效位)存放的,所以在函数内也做了相当转换。GetLongData函数是GetWordData的扩展,调用二次GetWordData并返回一个32比特无符号整数。

图2 CopyData函数部分代码

在调用CopyData函数之前,先匹配特征码“0x08AA”,匹配通过之后,略去预留的16个空白字节(即0x00)。读取32位的Boot Loader程序入口地址,需要把这4个字节写入FLASH的入口(此芯片为0x337FF6)。因为在启动时,芯片的Boot Loader会先读这个地址上的值,再跳转到这个值所指向的地址去执行,然后就执行CopyData函数了。其中,BlockSize为程序段数据长度,占2 B;DestAddr为程序段存放地址,占4 B;WordData为具体的程序段数据。CopyData函数会不断地通过CAN总线,把接收到的程序段数据写进FLASH,直到读到下一个程序段的BlockSize为0。最后写入Boot Loader程序入口地址到FLASH的入口。

1.2 预置程序的作用

在DCU硬件生产制造焊接完毕之后,开始烧写程序。先通过跳线选择CAN启动方式,利用芯片本身的Boot Loader,上位机通过CAN总线把预置程序的二进制文件下载到芯片的SARAM中,CAN采用标准数据帧格式,每帧带2 B数据,波特率500 kHz,消息号0x01。芯片本身的Boot Loader会完成预置程序的下载工作。下载完成后,芯片本身的Boot Loader会启动预置程序,这时上位机开始下发自行设计Boot Loader的二进制文件。由于预置程序的CAN设置与芯片本身的Boot Loader一致,所以在芯片本身的Boot Loader跳转到预置程序时,上位机的CAN设置不需要另外更改。最后通过预置程序把自行设计的Boot Loader复制到对应的FLASH扇区上,通常是SECTORA(因为FLASH入口地址0x33FFF6在SECTORA上),然后取下跳线帽,完成烧写Boot Loader的工作。

整个过程不需要提供源码,不需要仿真器,操作简单,下载方便;防止代码泄密,保证代码的安全性。

2 Boot Loader程序设计

2.1 Boot Loader程序整体设计思想

自行设计的Boot Loader要完成的工作比较多[7],基本流程如图3所示。初始化过程和预置程序基本一致。在初始化完成之后需要读取FLASH中的更新固件标志位和应用程序标志位,以决定跳转到应用程序或更新DCU固件。在初装DCU时,固件合法标志不存在,DCU会进入更新应用程序流程,PSA通过CAN总线下发应用程序包,完成DCU上应用程序的初次写入;在站台DCU正常工作时,DCU上的应用程序收到PSA下发的更新应用程序指令后,置更新固件标志位,然后跳转到Boot Loader入口地址,Boot Loader启动[8]并与PSA通信,完成固件更新工作。

图3 Boot Loader程序整体流程

2.2 更新固件的设计思想

2.2.1 更新固件流程

更新固件大致分6步(如图4所示):配置CAN(包括CAN的中断);拷贝程序到SARAM;清除固件合法标志;擦除固件FLASH扇区;拷贝程序数据;写入固件合法标志。

图4 更新固件的流程

配置CAN时,波特率等参数最好与应用程序一致,这样在应用程序与Boot Loader切换时,PSA上的CAN不需要另外设置;根据CAN的仲裁机制,给每个DCU分配各自不同的消息号,使DCU只接收特定的CAN帧,实现PSA对指定DCU进行固件更新。最佳方案是Boot Loader程序与DCU应用程序使用同一套有关消息号的协议。

芯片上FLASH在擦除或写入时,不允许FLASH相关的操作代码在FLASH中执行,所以需要把相关函数拷贝到SARAM中[9],比如L0或L1(L0,L1是片内SARAM内存块)。相关代码如图5所示。

图5 拷贝FLASH相关操作代码到SARAM

在FLASH扇区分配时,为避免与应用程序段冲突,固件合法标志独占一个FLASH扇区。在更新固件前,先擦除此FLASH扇区,标志即被置为0xFFFF;在更新固件完成后,写入一个非0xFFFF的数以作标记。这样如果在拷贝程序段时,因为通信故障等原因终止了Boot Loader的运行,只需重启DCU,Boot Loader就会进入更新固件流程,有效地保证了DCU的安全性。

2.2.2 拷贝程序数据

PSA下发二进制应用程序文件的数据格式与FLASH Boot Loader程序文件一致。所以复制数据的函数,即CopyData函数与预置程序一致。但为了支持PSA一次下发多帧数据,以提高更新速率,DCU相关CAN接收程序需另行设计。

为了在接收CAN帧的同时能操作FLASH,采用乒乓缓冲区结构[10],以10个CAN邮箱为一组,将CAN邮箱分为两组,为缓冲区A和B。只设置最小编号邮箱(缓冲区A为MOBX0)的CAN接收中断,这样在缓冲区收满时才会进入相应的中断服务函数[11],并规定PSA一次下发80个字节数据(不够填0),以填满10个邮箱。图6是缓冲区的数据结构。

用这种数据结构定义两个缓冲区:bufA和bufB。以bufA为例,初始化过程如图7所示。对地址数组进行了10次循环赋值,使之指向10个CAN邮箱中数据字段的地址[12]。在读取数据时,需要判断当前邮箱是否读完,如果读完就到下一个邮箱继续读取。使用地址数组读取数据可以有效地避免这种判断,从而提高代码执行效率。

图6 缓冲区的数据结构

图7 缓冲区A地址数组初始化

与预置程序一样,CopyData函数仍调用GetWordData函数读2字节数据,图8是GetWordData函数的部分代码。由于缓冲区地址数组的引入了,避免了在读跨邮箱数据时所需的判断,代码的执行效率得到了提高。

图8 GetWordData函数部分代码

这里,pread为读指针(指向读取数据的缓冲区),pready为预读指针(指向接收CAN数据的那个缓冲区)。初始化缓冲区指针如下:pread指向缓冲区A, A不接收CAN数据(关闭邮箱);pready指向缓冲区B,B接收CAN数据(使能邮箱),地址索引i_addr为40(开始时缓冲区A为空)。

开始时的状态如图9左图所示,但pread指向的缓冲区A为空(i_add初始化为40)。缓冲区B收到数据后,pread与pready相互交换,使能A的邮箱,关闭B的邮箱,利用pread开始从缓冲区B中读取数据,如┩9右图所示。B被读空后,等待A接收到数据,然后pread与pready再次交换,使能B的邮箱,关闭A的邮箱,利用pread开始从缓冲区A中读取数据…如此循环,直到固件更新完成。这种方式可以实现从缓冲区搬运数据到FLASH的过程与CAN邮箱接收数据的过程同时进行,大大加快了更新固件的速度。

3 结 语

本文提出的在线更新DCU固件方法,采用乒乓缓冲区的数据结构,使更新DCU固件的的速度大大加快,有效避免因更新DCU固件而造成站台短暂关闭;采用CAN总线通信并利用帧消息号,屏蔽发给其他DCU固件的更新数据帧,实现对指定DCU固件的更新,以满足站台的各种实际需要;采用应用程序与引导程序直接切换的方式,避免了DCU上跳线的使用和仿真器的挂接,省去技术人员拆卸门头上DCU的麻烦;在更新固件时,只需要向相关工作人员提供已编译的应用程序二进制文件而不需要相关源代码,有效地保护了固件的知识产权。本文论述的设计已在实际DCU项目测验中测试成功,正应用于某公司地铁屏蔽门产业,是解决地铁屏蔽门固件更新问题的有效途径之一。

图9 缓冲区交替示意图

参考文献

[1]北京城建设计研究总院.GB50157-2003地铁设计规范[S].北京:中国计划出版社,2003.

[2]中华人民共和国建设部.CJ/T236-2006城市轨道交通站台屏蔽门[S].北京:中国标准出版社,2006.

[3]张杰.地铁屏蔽门的可靠性设计\.现代电子技术,2009,32(23):189-193.

[4]cena Gianluca, valezano Adriano. Integrating the CAN and MUST access techniques in a single field bus \. IEEE, 2001: 231-239.

[5]Texas Instruments Incorporated. TMS320x2833x, 2823x boot ROM reference guide \. USA: Texas Instruments Incorporated ,2008.

[6]Texas Instruments Incorporated. TMS320C28x DSP CPU and instruction set reference guide \. USA: Texas Instruments Incorporated, 2003.

[7]吕晓明,段发阶.TMS320VC55x系列DSP的FLASH引导方法研究[J].国外电子元器件,2007(6):95-97.

[8]王青萍.嵌入式系统启动软件Boot Loader的设计[J].现代电子技术,2008,31(15):63-65.

[9]Texas Instruments Incorporated. Copying compiler sections from flash to RAM on the TMS320F28xxx DSCs \. USA: Texas Instruments Incorporated, 2008.

[10]严蔚敏,吴伟民.数据结构[M].北京:清华大学出版社,1997.

[11]Texas Instruments Incorporated. TMS320F2833x, 2823x enhanced controller area network (eCAN) reference guide \. USA: Texas Instruments Incorporated, 2009.

[12]谭浩强.C语言程序设计[M].2版.北京:清华大学出版社,2008.

[13]施先旺.基于DSP/BIOS实现发动机实时在线状态监测\.火箭推进,2010,36(5):54-58.

[14]于海磊,陈锋,郑勤生,等.低温推进剂液位监测系统设计\.火箭推进,2010,36(3):54-57.

[15]王朕,刘陵顺,鲁芳,等.基于TMS320LF2407A直流电机闭环调速控制系统的设计\.电子设计工程,2010(2):93-95.

作者简介: 王 啸 男,1984年出生,浙江宁波人,硕士研究生。研究方向为地铁屏蔽门。