基于PCI总线的DSP6713在线烧写方法研究
2017-07-19安景新赵昶宇
安景新,赵昶宇
(1.海军驻天津八三五七所军事代表室,天津 300308;2.天津津航计算技术研究所,天津 300308)
基于PCI总线的DSP6713在线烧写方法研究
安景新1,赵昶宇2
(1.海军驻天津八三五七所军事代表室,天津 300308;2.天津津航计算技术研究所,天津 300308)
基于DSP的应用程序的传统升级方法是将控制器拆卸下来,然后利用仿真器和JTAG完成程序的烧写工作,该方法既费时又费力。为了提高升级程序的效率,降低设备维护的成本,以DSP6713为例,提出了一种在线烧写应用程序的方法,阐述了在线烧写的原理,介绍了上位机端软件、DSP端软件和bootloader程序的设计思想,为DSP技术开发和维护人员提供了一种方便、快捷的升级程序方法。
PCI总线;DSP6713;在线烧写;bootloader
在线烧写技术,即在应用编程(IAP,In-Application Programming),是在系统运行的过程中的动态编程,从系统中获取新代码并对自身进行重新编程,用程序来改变程序的一种方法。该方法不需要借助外部手段,也不用进行任何机械操作,即可完成程序执行代码的动态修改。通常将芯片的内部存储区分为3个部分,即引导程序区、运行程序区和下载区。芯片接收到下载命令后,进入引导区运行引导程序,在引导程序下将用户应用程序代码内容下载到下载区,下载完毕并校验通过后再将下载区的内容复制到运程程序区,运行复位程序,完成Flash的在线烧写。
本文以TMS320C6713浮点DSP为例,提出一种基于PCI总线的DSP在线烧写的方法,避免了在升级程序时因拆卸控制器带来的各种问题,降低了设备的维护成本。
1 TMS320C6713在线烧写原理
TMS320C6713没有自带FLASH存储器,应用程序要烧写到外扩FLASH中,由外扩FLASH引导自启动。由于FLASH读取速度较RAM相对比较慢,因此,6713需要在上电复位后将FLASH中的应用程序代码引导到内部RAM中运行。
具体流程为: FLASH起始地址开始的1 Kbyte的内容存放6713的启动程序bootloader;上电复位后,6713会由DMA或EDMA自动将FLASH起始地址开始的1 Kbyte的内容搬移到内部RAM中,开始执行bootloader程序。bootloader程序的功能是完成FLASH中应用程序到6713内部RAM的复制工作。当复制工作完成后,6713会调用c_int00()复位中断去执行,开始执行应用程序,从而完成了6713的在线烧写和自启动工作。
2 在线烧写软件设计
TMS320C6713的在线烧写软件部分主要是由上位机端软件和DSP端软件构成。上位机端软件主要完成读取可执行代码文件,进行格式转换后将该文件通过PCI总线发送给DSP端,等待DSP端的响应;DSP端软件主要接收上位机端软件发送的可执行代码文件,并将该文件立即烧写到FLASH中,完成烧写过程。此外,DSP端还需实现bootloader程序的功能。
基于TMS320C6713开发的应用程序经过CCS编译生成的目标文件类型为.out文件,而TMS320C6713无法识别该文件类型,需要通过hex6x.exe工具将.out文件转换成TMS320C6713可以识别的十六进制文件类型.hex文件。
2.1 上位机端软件设计
上位机端软件首先读取.hex文件,通过解析hex文件内容,将其拆分为多条数据帧结构。上位机端软件与DSP端软件通过PCI总线进行通讯。
上位机端软件向DSP端软件发送的每帧数据都带有校验和,当DSP端程序接收到该帧数据后,通过校验和对接收数据进行确认。确认完毕后,DSP端软件将确认帧发送给上位机端软件,上位机端软件收到DSP端发送的确认帧后,再向DSP端软件发送下一帧数据;当上位机软件将全部数据都发送完毕后,上位机端软件向DSP端软件发送数据的总长度,DSP端软件将该总长度与接收到的数据长度进行比较,将结果发送给上位机端软件,完成整个数据的总校验。
2.2 DSP端软件设计
为了保证接收数据的准确性和完整性,DSP端软件在接收数据的过程中,不执行对RAM或FLASH操作的相关代码;同时,关闭其他的外部中断,仅响应PCI中断,保证了数据接收的实时性。此外,DSP端软件将接收到的数据存储在外扩的FLASH中,等到接收完全部数据后,再进行程序的烧写,防止在接收数据过程中出现意外,进而导致系统程序不能正常工作。
FLASH的烧写工作也是DSP端软件需要实现的重要功能。在擦除或读写FLASH之前,必须先执行相应的命令字序列,即在指定的FLASH地址处写入指定的指令代码。向FLASH的指定地址中写入数据,需要4个总线周期。前两个是解锁周期,第三个是建立编程命令,最后一个周期完成向编程地址中写入编程数据。
待写入的数据为.hex文件内容。
上位机端软件和DSP端软件的处理流程如图1所示。
图1 上位机端软件和DSP端软件的处理示意流程图
2.3 bootloader程序设计
bootloader程序的主要功能是将应用程序段从FLASH复制到DSP的内部RAM中,再跳转到程序的入口处开始执行主程序。DSP上电复位后,DMA/EDMA自动拷贝1 KB数据到地址0处,然后从0地址处开始执行引导代码指令。使用DMA/EDMA可以快速、灵活地实现DSP存储空间内数据的搬移。数据搬移的源/目的可以是片内存储器、片内外设或外部器件。
bootloader的示例程序如下:
main()
{
init();//初始化DSP
init_DMA();初始化DMA
*(int*)DMA_OPT=0x29300001;//开始拷贝
while(!((*(int*)DMACIPR)&0x00000001));
*(int*)DMACIPR|=0x00000001;
asm(“NOP 8”);
asm(“MVK.s2 0x00003820,B0”);//跳转到应用程序代码
asm(“B.s2 B0”);
asm(“NOP 6”);
}
上述代码中的0x00003820是DSP程序.map文件中的boot.obj地址。c_int00函数定义为程序代码入口,c_int00函数在系统复位后首先被执行,引导程序进入main主程序。c_int00函数包含在boot.obj中,boot.obj链接在rt s6700.lib运行支持库内。“MVK.s2 0x00003820,B0”可实现跳转到应用程序代码,开始执行应用程序。
3 6713在线烧写的步骤
6713在线烧写分为以下4个步骤:①利用CCS开发工具将要升级的应用程序编译生成.out文件,利用hex6x.exe工具将.out文件转换成.hex文件;②利用DSP仿真器将DSP端软件烧写完毕,此时DSP具有在PCI总线下烧写程序的功能;③利用上位机端软件将被烧写的应用程序发送到DSP中;④DSP重新上电,即可自动运行新更新的应用程序,完成DSP的在线程序烧写。
4 结束语
本文研究的基于PCI总线的DSP6713在线烧写方法和传统的烧写程序的方法相比,具有明显的优势,极大地降低了软件维护人员的工作量,提高了软件升级的质量和效率。该方法已成功应用到某型号DSP控制系统中,经过实际应用证明,软件烧写过程快速、稳定、可靠。
该技术的研究使DSP的程序的更新可以脱离仿真器,为程序的更新和程序的远程维护提供了方便,具有很强的实用性。
[1]刘德生,李杰.基于JTAG的DSP外部Flash在线编程与引导技术[J].电子技术应用,2005(03).
[2]李方慧.TMS320C6000系列DSPs芯片的原理与应用[M].北京:电子工业出版社,2000.
〔编辑:张思楠〕
TP368.1
A
10.15913/j.cnki.kjycx.2017.13.087
2095-6835(2017)13-0087-02