APP下载

TMS320C6000系列DSP程序固化的研究

2016-10-14黄震刘亚斌

电子设计工程 2016年12期
关键词:代码启动程序

黄震,刘亚斌

(北京航空航天大学北京100191)

TMS320C6000系列DSP程序固化的研究

黄震,刘亚斌

(北京航空航天大学北京100191)

针对TMS320C6000系列DSP程序固化困难的问题,从DSP的启动方式出发,阐述了TMD320C6000系列DSP 3种启动方式的基本原理,详细说明了EMIF boot方式的启动过程,分析了在EMIF boot启动方式下的程序固化方法,通过多种不同的固化程序的试验,研究了使用编程器烧写、使用CCS提供的FlashBurn工具烧写和在线烧写等方法在固化程序方面的优点与不足,得出了在线烧写简单易行、通用性强的结论,可作为TMS320C6000系列DSP程序代码固化设计的参考。

DSP;启动方式;EMIF引导;程序固化;在线烧写

近年来,数字信号处理器(DSP)发展迅速,在涉及到嵌入式领域和数字信号处理领域等方面的应用取得了很大的进展,其中TI公司推出的TMS320C6000系列DSP器件以其高实时性和高速大数据量数字信号处理运算的特点得以广泛的应用[1]。在TMS320C6000系列DSP的系统设计过程中,DSP器件的程序固化是较难解决的问题之一,为此,本文立足于实践,以TMS320C6416为例,详细阐述了DSP固化程序的几种实现方法。

1 DSP的启动方式

TMS320C6000系列DSP的启动方式包括无引导[No boot]、主机引导[Host boot]和EMIF引导[EMIF boot]3种。

无引导[No boot]:DSP上电复位后,先执行地址0x00000000处的指令,这种方式仅限于存储器0地址不是必须映射到Ram空间的器件,否则在Ram空间初始化之前CPU会读取无效的代码而导致错误,并且该方式只能用于仿真运行;主机引导[Host boot]:DSP上电复位后,CPU保持复位状态,外部主机通过主机接口将程序写到DSP内部存储器,并配置相应的寄存器,完成后设置DSPINT标志位,该标志位会清除DSP复位状态,然后DSP从地址0x00000000开始运行,该方式要求必须有一外部主机控制DSP的初始化,这将增加系统的成本和复杂度,实现难度较大;EMIF引导[EMIF boot]:DSP在外部Rom中固化了程序,复位后通过EMIF从CE1存储空间首地址拷贝一部分代码到内部Ram的零地址中,接着从零地址开始执行,DSP与外部Rom接口较为自由,但DSP内部的Bootloader工具自动加载的代码量有限(1 kB/64 kB)[2]。

DSP通过器件引脚配置的方式选择使用何种引导方式启动程序。当复位完成后,DSP通过读入外围的引脚配置信息,确定具体的引导启动方式。

本文中将主要研究EMIF boot启动方式下的程序固化方法。当前常用的程序固化方法主要有以下几种:使用编程器烧写、使用CCS提供的FlashBurn工具烧写、在线烧写。

2 EMIF boot方式的启动过程

实际应用中,DSP通常采用的是EMIF boot启动方式。通过编写二级Bootloader的方法,可以改善EMIF boot过程中片上Bootloader工具加载的代码量有限的弊端;并且该方式实现简单,通用性好,无需使用外部主机配合,简化了系统的结构,降低了系统的成本。因此,EMIF boot启动方式的应用场合更加的广泛。

DSP的EMIF boot启动过程分为两部分:一级加载和二级加载。一级加载是复位后,DSP通过EMIF将固化在CE1空间Rom中的代码搬入内部Ram零地址处,然后从内部零地址开始执行的过程;二级加载是在一级加载的基础上,通过一级加载的程序代码,实现将用户应用程序由外部Rom拷贝到内部运行地址的过程[3]。

对于C6416来说,片上的Bootloader工具只能将1 kB的代码搬入内部Ram。通常情况下,用户应用程序的大小都会超过这个限制。所以,需要在外部Rom的前1 kB范围内预先存放一小段程序,待片上Bootloader工具把此段代码搬入内部并开始执行后,由这段代码实现将外部Rom中剩余的应用程序加载到内部Ram。此段代码被称作二级Bootloader[4]。

3 使用通用编程器固化程序

通用编程器具有方便用户使用的菜单式界面,能够自动检测芯片插错、管脚接触不良及芯片内部短路等功能,能够自动识别存储器厂家和型号,可修改编程参数,可根据芯片的具体情况确定编程参数。但是,通用编程器只适用于未焊接到板卡上的外部Flash芯片,而且芯片的型号受到编程器的局限,通用性不好。

使用通用编程器固化程序,要配置好对应外部存储器芯片的烧写配置文件,并且由于通用编程器的输入文件主要是.hex和.bin类型的文件,用户需要将.out类型的目标工程文件转化成为.hex或.bin类型的文件,才能进行程序下载。

使用通用编程器将用户程序固化到Flash中的操作步骤:

1)将含有二级加载程序的Bootloader.asm文件加入到用户工程中,其地址空间分配为0x00~0x400;

2)编写分配程序地址空间的CMD文件;

3)使用Hex6x.exe工具,将.out类型的目标文件,转换成为.hex类型的二进制文件;

4)使用编程器将转化后的二进制文件写入到Flash中。

4 使用CCS提供的FlashBurn工具固化程序

FlashBurn是TI为DSP用户设计的Flash烧写工具,安装后可以作为CCS的一个插件使用。FlashBurn工具以CCS为基础,运行时需要先下载一个.out类型的镜像文件FBTC(FlashBurn Target Component)到DSP中,这个FBTC就是一个执行程序,通过运行FBTC,DSP可以与FlashBurn交互,接收FlashBurn的指令,用户可以通过FlashBurn提供的图形界面对Flash执行擦除、编程和查看内容等操作,简单方便的将程序固化到DSP中。

Flashburn的操作界面简洁,人机交互简单,使用户可以快速方便的烧写程序,并且可以通过修改FBTC工程文件的参数和函数来适应不同型号DSP的烧写需求;但是,TI公司提供的FBTC的源代码结构复杂,内容繁多,用户需要先去了解FBTC的运行机制及其与上位机的通信协议,才可能对Flash烧写函数进行正确的修改,这就给用户开发带来了不便。另外,由于FlashBurn和FBTC的定制特性使得它的应用只能局限在一些特定的场所。

使用CCS提供的FlashBurn工具将用户程序固化到Flash中的操作步骤:

1)将能够正常的仿真运行的程序进行编译,生成.out目标文件;

2)在已调试好的工程项目中加入包含二级加载程序的文件bootloader.asm,同时修改CMD文件,在CMD文件中添加一个名为boot的段,位置是0x000,长度为0x400,bootloader. asm文件中的二级加载程序储存在该段中。然后,重新编译工程,生成新的.out目标文件。

3)利用Hex6x.exe把编译生成的新.out目标文件转化为. hex文件,用于烧到Flash中。

4)连接CCS与DSP后,启动FlashBurn。在file菜单里面新建配置,分别选择好合适的Processor Type和FBTC program file,然后点击programdownload FBTC。

5)把FBTC下载到板子上以后,就可以对Flash进行擦除(erase flash)、查看(show memory)和编程(program flash)操作,这些功能在program菜单下。对Flash进行编程时,FlashBurn只支持.hex类型的文件。

5 在线烧写

以上两种方法,都需要对目标文件进行格式转化,过程比较麻烦且容易出错,而使用在线烧写的方法,可以直接将目标文件写入到Flash中。在线烧写即使用自己编写的烧写代码进行烧写。这种方法需要编写两个工程,一个是实现用户功能的目标工程,另一个是烧写工程。在线烧写时,首先要将目标工程的.out文件通过仿真器下载到DSP的内部Ram中,之后将烧写工程的.out文件也下载到DSP中,并且要保证这两个.out文件在DSP的Ram区中占有不同的区域,之后运行烧写工程,即可将目标工程的代码数据烧写到Flash中[5]。这种烧写方法的好处是烧写过程清晰明了,操作简单,目标工程和烧写工程单独编写,不易搞混;同时烧写工程具有很好的通用性,稍微修改后就可用于其他型号DSP的烧写。

使用在线烧写将用户程序固化到Flash中的操作步骤:

首先,对正常仿真运行的目标工程做两个方面的修改:编写包含二级加载程序的文件bootloader.asm,并将该文件加入到目标工程中去,这个加载程序一般采用汇编语言实现;修改目标工程的CMD文件,将二级加载程序的代码指向片内RAM的首地址,长度是1 k,目标工程中其他的程序代码放在其后。修改完成后,将新工程编译生成的.out文件通过JTAG下载到DSP的内部Ram中,不要运行。新目标工程的CMD文件如下所示:

然后,将烧写工程的.out文件也加载到DSP的内部RAM中,运行烧写工程将目标工程的程序代码烧写进Flash中。

烧写工程完成的功能就是将刚下载到片内Ram的目标工程的代码写进Flash中。因为前面目标文件已经下载到片内Ram的开始位置,占用了片内Ram的一部分空间,因此修改烧写工程的CMD文件,将该工程在片内Ram的存储位置与前面已下载工程的存储位置分开,避免发生内存冲突。

用户可以打开前面下载的目标工程的Map文件查看其占用了多少空间,如下所示:

从Map文件中可以看出,BOOT用了0x2c8字节,而其他代码用了0x4aec字节。为了保险,把烧写工程的代码放在内部Ram中离目标工程较远的位置。这样烧写工程的.out文件下载之后就不会把前面下载的目标工程的.out文件覆盖[6]。烧写工程的CMD文件如下所示:

实质上,烧写程序的过程也就是将程序从Ram中拷贝到Flash中的过程。已经得知Bootloader程序的大小是0x2c8字节,目标工程的大小是0x4aec字节。所以,拷贝时先拷贝Bootloader程序的0x2c8字节数据,从Ram地址0x00000000拷贝到Flash地址0x64000000;然后再拷贝目标工程文件的0x4aec字节数据,从Ram地址0x00000400拷贝到Flash地址0x64000400。烧写工程的关键代码如下:

6 结束语

文中讨论了TI的C6000系列DSP的启动方式及程序固化方式,介绍了使用编程器烧写、使用CCS提供的FlashBurn工具烧写和在线烧写等3种程序固化方法,并重点说明了在线烧写固化程序的方法和步骤。该方法通用性强,可移植性好,实现简单,适用于TI的C6000系列中大部分型号DSP程序的固化,可作为该系列DSP程序代码固化设计的参考。

[1]段荣行,郑国兰.TMS320C6711的Flash引导装载系统研究与设计[J].电子设计工程,2004(12):55-58.

[2]夏爽.DSP的二级加载及Bootloader研究[J].电脑编程技巧与维护,2009(2):8-11.

[3]钟俊,吕盼稂,王欢,等.TMS320C672x DSP引导程序设计[J].计算机工程,2010,36(4):267-270.

[4]郎岩梅,唐文彦,赵军.基于DSP的嵌入式系统中BOOTLOADER程序的设计方法[J].电测与仪表,2003,40(438):35-37.

[5]孙照宇,张公礼.TI 6000系列DSP引导装载方式的研究[J].电子器件,2005,28(1):176-179.

[6]王硕果,肖强.TMS320C6701 DSP自动加载研究[J].现代电子技术,2009,32(19):72-75.

Study on the program download of TMS320C6000 DSP

HUANG Zhen,LIU Ya-bin
(Beihang University,Beijing 100191,China)

Aiming at the problem of the difficulty in TMS320C6000 series DSP program download,From the start mode of the DSP,this article explains the basic principle of three start modes of TMS320C6000 Series DSP,introduces start-up process of EMIF boot in detail,analyses the methods of downloading program in EMIF boot start mode,does a variety of different tests of downloading program,studies the advantages and disadvantages of using programmer,using the CCS FlashBurn tool and online writing in the downloading program,gets the conclusion that the online writing is simple and easy to operate.It can be used as the reference of code downloading of TMS320C6000 series DSP.

DSP;start mode;EMIF boot;program download;online download

TN47

A

1674-6236(2016)12-0026-03

2015-06-18稿件编号:201506191

黄震(1990—),男,山东烟台人,硕士。研究方向:控制工程与控制科学。

猜你喜欢

代码启动程序
试论我国未决羁押程序的立法完善
创世代码
创世代码
创世代码
创世代码
雾霾来袭 限产再次启动
“程序猿”的生活什么样
安发生物启动2017
英国与欧盟正式启动“离婚”程序程序
创卫暗访程序有待改进