基于多通信方式实现DSP 程序在线编程*
2013-12-22马喜强刘维亚郑喜凤
马喜强,刘维亚 ,郑喜凤
(1.中国科学院长春光学精密机械与物理研究所,长春130033;2.中国科学院研究生院,北京100039)
现代商业及工业嵌入式电力电子产品出于美观、安全和可维护性方面的考虑,对系统维护的时效性和便携性要求越来越高。基于DSP 开发的野外及外场数字设备程序维护困难,已安装的设备若用户提出新需求,需要对内部程序进行脱机更新[1]。
针对DSP 在线编程问题,张谦等提出的基于硬件标志位控制的方法,编写了文件转换工具,实现了DSP 在两套程序之间的选择加载,避免了对FLASH的反复烧写[2];王宏义等提出了基于PCI 总线使用单个FLASH 存储器同时实现DSP 引导加载和FPGA 配置的方法[3];刘铁提出的基于CAN 总线程序在线升级的方法,使DSP 代码的更新可以脱离仿真器,大大提高了DSP 系统程序升级的效率[4];沈军等提出了基于RS422 串行通信远程更新DSP 程序的方法,在系统不掉电的情况下实现了DSP 程序的远程更新与自启动[5];陶维青等提出了基于TMS320F2812 DSP的软件更新方法[6],但通过串口实现的4 kbyte/min的更新速度显然不能满足野外系统的要求。以上方法都具有一定的局限性:通信方式单一,不能满足野外数字设备复杂性及多变性的要求。
针对上述问题,本文提出了一种基于多通信方式的DSP 程序更新方法,介绍了方案的实现要点,本方法已经成功应用于某型数字测风经纬仪系统中。
1 实现原理
系统的MCU 选用的是TI 公司的TMS320C6747(以下简称C6747),C6747 是业界功耗最低的浮点DSP,C6747 自带USB、串口、网络和CAN 总线等接口,无需外扩芯片。第一次更新程序时,需要使用仿真器将目标程序更新至FLASH 分区1 中,此时系统即可运行。系统需要更新程序时,系统首先响应中断并读取多通信模块信息,然后等待用户按键选择需要更新的程序,接着从相应通信设备中读入目标程序及其大小数值,放到内部RAM 缓存中,然后系统判断当前程序的入口地址,如为FLASH 分区1,则把目标程序更新至FLASH 分区2 中,并把程序的入口地址设置为FLASH 分区2;反之则对FALSH 分区1 采取相同操作。系统通信设备的信息读取由多通信模块完成。这样就实现了程序更新并且保存了更新前的原程序。系统程序在线编程的软件流程图如图1 所示。
图1 系统程序在线编程的软件流程图
2 多通信方式模块设计
目前工业界通信协议具有复杂性和多样性的特点,传统的多种通信功能的实现仅仅致力于通信方式接口的开发与实现[7-10],可移植性差,并且远远不能满足复杂环境下的需求。本文多通信模块的设计思想:将数据收发的过程与数据内部表示的信息分离。数据收发由抽象的收发器接口表示,在硬件中具体实现,比如基本TCP/IP、无线网络接口、RS232,485 接口等。协议也具备可扩展性。协议的可扩展性由专门的协议管理层实现,管理层具有协议注册和匹配功能。协议层由一组平等的协议集合构成。当需要添加新协议时,在协议层实现协议并向协议管理层注册。
基于模块化设计方法,提出了可扩展多通信方式模块如图2 所示。本模块主要由五个部分组成,协议层、协议管理层、数据收发层、传输层和接口层,同时具备有线、无线多种通信能力,可以根据具体环境灵活选择。使用可扩展通信协议栈,支持对通信接口和通信协议的扩展。下面分别对各个层进行介绍。
图2 可扩展多通信方式模块图
接口层和传输层主要对应于硬件设备,每种接口对应于某类传输层,如RS232、RS422、RS485 均属于串口传输层。数据收发层主要负责底层设备的数据接收和发送,采用数据统一收发的协议方式,可以有效地实现应用程序与底层接口驱动的隔离。协议管理层主要负责协议的匹配,并对已收到和待发送的指令帧的指令类型、目的地址和包数据帧数进行解析。协议层主要负责数据帧和应答帧的分类处理和编制。软件流程图如图3 所示。
图3 通信模块软件流程图
3 基于DSP/BIOS 实现DSP 程序更新
DSP/BIOS 是一个用户可剪裁的实时操作系统,主要由三部分组成:多线程实时内核、实时分析工具、芯片支持库。利用DSP/BIOS,可以方便快速的开发复杂的DSP 程序[11]。多线程实时内核调度多线程的运行,将定制的系统算法作为一个嵌入系统线程。DSP/BIOS 以模块化方式提供给用户对线程、中断、定时器、内存资源、所有外设资源的管理能力都可以根据需要剪裁[12]。实际应用时把相应的算法作为一个线程插入DSP/BIOS 的调度队列,由DSP/BIOS 进行调度。本设计是基于DSP/BIOS RTFS(The DSP/BIOS Real-Time File System)开发实现的。
3.1 编译环境的搭建
为了能够使用RTFS API 函数,应首先向目标工程中加入环境变量,主要需要修改两部分内容:Project-Build 和Options-Compiler。修 改 方 法 参 见RTFS 相关文档。然后需要编写DSP/BIOS 配置文件,配置文件的关键配置程序为:bios.ECM.ENABLE=1;bios.GBL.C64PLUSMAR128to159=0x0000ffff。
3.2 AIS 文件及解析
CCS 编译生成的* .Out 需要通过AISgen 软件转化为* . AIS 文件才能为DSP 所识别,AISgen for D800K003 软件在产生AIS 文件时需要根据需要对时钟管理器、EMIFB 管理器、系统上电管理器以及引脚复用管理器进行配置,具体配置方法如图4 所示。
图4 AIS 文件生成配置图
AIS 文件生成后需要对其进行解析和修改以确定上电boot 后对加载程序分区定位,AIS 文件是一个二进制文件,其基本架构为:4 字节命令头+命令+……+结束跳转指令。对AIS 文件的修改主要包含对段连接命令地址内容和跳转结束命令地址内容的修改。段连接命令的作用是段入口点的指定,其形式为:0x58535901+段连接地址+段大小+段数据。在AIS 文件中找到0x58535901,修改其后面的段连接地址为程序在FLASH 中的存放地址。跳转结束命令的作用是AIS 文件结束的标志并跳转到用户应用程序(此处为已更新程序的地址),其形式为:0x58535906+跳转地址。修改其跳转地址为已更新程序的存放地址。至此AIS 文件修改完毕。
3.3 EDMA 方式实现程序更新
本设计程序更新方式在程序更新过程中采用双缓冲方式处理数据,在对程序数据进行搬移时,由EDMA方式控制时序,不占用CPU 资源,实现无开销地交换内外存数据,从而减轻了CPU 的运行负担,增加了程序的并行性,从而实现程序数据传输和FLASH 写入处理的同步进行,提高效率并且使系统可以处理流水式输入的目标程序数据。其具体实现流程如下:
(1)在内存中设置双缓冲区,分别为A 和B;
(2)将一帧目标程序数据(大小为1 kbyte)从通信模块中搬到缓冲区A;
(3)对缓冲区A 中的数据进行FLASH 写入的同时,将后续的一帧数据从通信模块中搬到缓冲区B;
(4)将缓冲区B 中的数据写入FLASH 的同时,将后续的一帧数据从通信模块中搬到缓冲区A。
如此循环进行,可以使数据的搬移与处理实现并行,极大地提高程序更新的执行效率。
4 应用实例
数字测风经纬仪系统主要由3 部分组成:数字测风经纬仪、计算机计算平台和手持计算器。在使用时,气象员通过经纬仪的光学望远镜跟踪测风气球,测风经纬仪使用光电码盘自动记录时间、仰角、方位角信息,然后把测风数据传送给计算机平台或手持计算器,计算机或手持计算器便计算出各种气象通报。测风经纬仪的某些参数会随时间而改变,高空风计算模型种类繁多,每种模型计算非常复杂,需要定时标定和验证,及时修改某些参数。升级程序时,用户借助计算机终端通过CAN 总线、485 总线或者网络远程向经纬仪发送代码数据(需要编写上位机在线升级模块),也可以现场直接使用U 盘更新程序,即可完成测风经纬仪的程序升级工作。该程序功能稳定可靠,对几种高空风计算模型的程序更新测试结果如表1 所示。
表1 3 种方法程序更新效率比较
5 结论
本文针对现有单通信方式程序更新的不足,提出了基于可扩展多通信方式的DSP 程序在线编程方法,该方法将数据收发的过程与数据内部表示的信息分离,同时具备有线、无线多种通信能力,可以根据具体环境灵活选择,并支持对通信接口和通信协议的扩展。本文还对DSP6747 可执行AIS 文件进行了深入的分析,提出了EDMA 方式实现程更新。实践表明,本方法具有更好的可扩展性和可维护性,使DSP 在线编程脱离仿真器,能够适用于更广泛的应用场合。
[1] 杨力波,潘志铂.用DSP 软件编程实现的引导装载系统[J].国外电子元器件,2003,15(5):15-19.
[2] 张谦,李世杰,李红波,等.TMS320C6000 系列DSP 可选择引导加载方式的设计与实现[J].电子测量技术,2009,32(7):81-84.
[3] 王宏义,董文娟,黄宗福,等. DSP 和FPGA 共用Flash 进行配置的方法[J].微计算机信息,2008,24(9):101-102.
[4] 刘铁.基于CAN 总线实现DSP 程序的在线升级[J]. 纺织机械,2010,5(1):8-11.
[5] 沈军,缪玲娟,张高安. 基于串行通信的DSP 程序远程更新[J].微计算机信息,2010,26(3):4-5.
[6] 陶维青,任谦.通过串口通讯实现TMS320F2812 的软件更新[J].合肥工业大学学报(自然科学版),2008,4(31):570-572.
[7] 朱景福,池俊亚,丁国超. 多种通信功能农田数据采集传输装置的研制[J].农机化研究,2009,3(3):83-85.
[8] 程雪,侯思祖,王彬. 具有多种通信功能的数据采集装置的实现[J].工业控制计算机,2006,19(12):16-19.
[9] 肖隽,丁艳军,吕震中.具有多种通信协议接口的通用数据采集装置[J].东南大学学报(自然科学版),2000,30(2):121-124.
[10] 白文保,马旭东,丁志稳. 支持多种通信模式的远程抄表系统采集终端设计[J].仪器仪表与分析监测,2010,1(1):6-8.
[11] 丁宜栋,华芸.基于DSP/BIOS 的软件系统设计[J].舰船电子工程,2001,5(1):52-55.
[12] 李方慧,王飞,何佩琨. TMS320C6000 系列DSPs 原理与应用[M].2 版.北京:电子工业出版社,2003:141-190.