一种基于CAN总线的程序调试技术研究
2008-12-08
作者:邹东升, 佘龙华
摘 要: 基于TI公司的DSP TMS320F2812,采用CAN总线,研究了一种多DSP的在线调试" title="在线调试">在线调试技术。计算机终端通过CAN总线下载程序到特定目标机,目标机通过内嵌的Flash烧写" title="烧写">烧写程序实现程序和数据的修改。该技术在磁悬浮列车中得到了应用,大大节省了控制器拆卸安装工作量,减少了调试时间。
关键词: CAN总线; 数字信号处理器; TMS320F2812; Flash
现代大型机电系统——磁悬浮列车一般需要有多个处理器协同工作,如果对一个个处理器进行调试既耗时又费力。在既不能拆卸,空间又狭小或者有毒物质等场合下,根本不允许单独或现场调试。即使能够拆卸,也要耗费大量的人力物力。参考文献[1]提供了一种磁悬浮控制器调试系统的设计方法,在实际试验过程中取得了良好的效果。但若需要修改算法,调整程序,仍然需要打开控制器,不能进行在线调试。因此,有必要研究利用现场总线进行集中在线调试的技术。
本文在保留参考文献[1]的优点和固化主程序的同时,利用子程序" title="子程序">子程序定位技术,通过CAN总线,实现了子程序的在线修改。
1 硬件平台
TMS320F2812是TI公司推出的主要用于电机控制、32位的DSP,其工作频率高达150MHz;采用哈佛总线结构,同时采用指令流水线技术,能够保证信号处理和控制的实时性。TMS320F2812片上资源包括:14KB的RAM,128K×16bit的Flash,16通道12位的ADC模块,16通道的PWM输出,56个可独立编程的GPIO, 3个定时器,3个可配置死区的比较器,4个捕获单元,同时还有多种串行接口,其中包括CAN总线。
TMS320F2812出厂时固化在芯片内的启动程序可支持六种启动方式:直接从Flash启动、利用SPI接口从外部串行EEPROM启动、利用SCIA启动、直接跳转到H0、直接跳转到OTP、从GPIOB口并行启动。实际应用中一般都是直接从Flash启动,其优点是不占用外部的资源,掉电仍然可以执行,Flash可重复烧写。
多DSP调试系统硬件结构如图1所示。图1(a)包含一个或一个以上的TMS320F2812处理器板,板子连接到CAN总线上,还包括一块连接到CAN总线上的CAN接口卡,此接口卡和DSP相连。CAN接口卡的主要功能就是把数据发送到总线上,并接收数据是否发送成功的回答。为了简化设计,可以直接把CAN接口卡用TMS320F2812处理器板来替换,如图1(b)所示。
2 目标板" title="目标板">目标板软件编程
目标板软件编程" title="软件编程">软件编程主程序流程如图2所示,其步骤如下:
(1)把关键控制任务简化为一个子程序,分配一段固定的地址,这是实现本文想法的前提。一般的电机控制、通讯等都可以用一个子程序的方式实现。用目标板软件编程时,如果要修改具体控制算法和通讯流程,则仅需要修改子程序,而并不需要修改整个项目的程序框架。
(2)编写主程序框架。
(3)编写Flash烧写子程序。该程序可以自己编写[2],也可以直接从TI的网站上下载库文件加进项目来编写。该程序可以直接调用,返回成功与否的标志。
(4)设计CAN通讯程序,同时调用Flash烧写程序。CAN接收数据采用中断方式。
(5)编译链接后烧写进DSP,目标板软件开发任务完成。
CAN通讯程序流程图如图3所示。
3 主机端软件及数据格式
主机端软件编写比较简单,只要能通过CAN总线发送数据,并根据收到的应答做相应的重发即可。
子程序执行数据格式,比较麻烦,其步骤如下:
(1)修改整个程序(并不修改程序框架),使得所需要修改的子程序达到目标要求。
(2)编译、链接成*.OUT文件。*.OUT文件是COFF格式的文件,但不是一个完完全全的可执行代码,其中包含有一些关于程序中各个段的起始地址、段的长度等辅助信息。
(3)对*.OUT文件进行提取,从中筛选出对最后装载有用的代码和地址信息。可以利用文件Coff_both.exe,该文件可以在TI的网站上免费下载,也可以根据参考文献[3]自己编写。
(4)由计算机终端把子程序数据发送出去。当收到目标程序发送的子程序烧写完毕的状态指示时,即工作完成。
(5)如果需要,复位目标板。
4 需要考虑的问题
(1)复位。可以利用TMS320F2812内部的看门狗进行复位,也可以设计专门的硬件监控电路进行复位,还可以断电复位,总之,根据需要灵活设计。
(2)子程序长度。是在框架程序编写时限定的,一定要注意不能超过设定的长度。实际过程中可以考虑给子程序一个足够的地址空间。
(3)子程序的执行。由于子程序烧写在原来所指定的子程序地址内,并没有改变子程序的地址,所以子程序仍会执行。若需要改变子程序的地址,只要注意把调用子程序所使用的跳转指令修改为跳转到新地址即可,但建议不这样使用,因为会使程序复杂化。
本文介绍了一种多DSP在线调试的方法,通过CAN总线把需要修改的程序下载到目标DSP板中,利用预先设计好的Flash烧写程序修改固定地址的目标程序,实现了DSP关键程序的在线调试和修改。该方法在产品的研发阶段起到至关重要的作用,大大缩短了产品研发的时间,节省了人力物力。
本目标机并不仅限于TMS320F2812,通讯总线也不仅限于CAN总线,读者可以根据自己的需要稍加修改即可应用到其他目标板中,其前提只是目标板能和主机进行双向通讯。
参考文献
[1] 王洪坡,李杰.基于CAN-BUS的控制器调试系统的设计.电子技术应用[J],2004,30(8):30-33.
[2] 崔迎炜,张晓林.利用DSP实现Flash的在线编程.遥测遥控[J],2002,(11):43-46.
[3] Extracting equivalent hex values from a COFF file.(literature number SPRA573). www.ti.com, 1999-07.
[4] Bootloading the TMS320VC5402 in HPI mode (literature number SPRA382). www.ti.com. 1999-07.