《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 业界动态 > TMS320C6x DSP的FLASH引导方法研究与实现

TMS320C6x DSP的FLASH引导方法研究与实现

2008-09-05
作者:樊 荣 石 岩 张天序

    摘 要: 介绍了TMS320C6x DSP的几种FLASH引导方法,比较了引导过程中基于软件流水的数据搬移方法和QDMA方式的数据搬移方法,并介绍了如何利用在系统编程(ISP)对上电" title="上电">上电引导程序" title="引导程序">引导程序进行FLASH编程。通过对实际的TMS32C6711 DSP电路调试实验,证明了以上方法简单易行。
    关键词: FLASH存储器  上电引导  COFF文件格式  DSP

 

    FLASH存储器是在EPROM和EEPROM的基础上发展起来的一种非易失性存储器,在掉电情况下仍能保证数据不丢失,并能够在不离开电路板或所在设备的情况下实施擦除和再编程操作。由于其具有结构简单、维护便利、存取速度快、对环境适应能力强、抗振性能好等优点十分适合于嵌入式系统的设计和开发,并且已成为目前流行的数字信号处理系统的一个基本配置。
    在许多DSP的应用中,系统上电后需要将用户程序从FLASH存储器引导到高速数据存储器中运行。这就需要给用JTAG接口调试通过的应用程序添加启动代码,将生成的目标文件进行格式转换使其能在线烧写" title="烧写">烧写,将转换过的文件利用FLASH烧写程序在线烧写到FLASH中。
    本文将介绍引导过程中数据搬移的几种方法,包括QDMA方式的数据搬移方法、CPU直接数据搬移方法以及基于软件流水的数据搬移方法。经过比较测试,证明了QDMA方式和基于软件流水的数据搬移方法具有优越性。并且,根据COFF文件格式,编写了比TI公司的HEX60更为直接的转换工具,从而简化了文件的转换步骤。
1 应用程序的FLASH ROM引导
    当DSP的应用程序从FLASH ROM引导时,目标板都有一个自动的引导程序。例如,对于TMS320C6x1x系列,目标板的自动引导程序会在系统上电时将FLASH ROM的前1K空间的内容复制到片内内存自0x00开始的地址空间,并从0x00地址处开始运行。因为需要搬到内存中运行的应用程序的向量表、初始化段等往往超过1K大小,为了能在系统上电时自动引导应用程序运行,就需要在引导的1K代码中包括自定义的引导代码,以将额外需要的初始化代码段和数据段复制到内存中运行。
    将FLASH ROM的数据复制到IRAM(内部RAM)中,有两种方式:一种是直接存储器访问(DMA),它是在没有CPU参与的情况下完成映射存储空间的数据搬移;另一种是利用CPU直接搬移数据。QDMA是快速的DMA,不需要CPU参与数据传输,只需根据要传递内容的信息设置QDMA的相应寄存器即可。用CPU直接搬移数据也有两种方式:一种是不用流水方式,另一种是采用软件流水方式。
    在C6000的汇编中,不同类型指令有不同数目的执行节拍。执行节拍在数量上等于该指令在执行级所需要的时钟周期。对于所用到的读取指令ldw和存储指令stw,分别完成从存储器到通用寄存器" title="通用寄存器">通用寄存器的数据搬移和从通用寄存器到存储器的数据搬移。读取指令ldw需要执行的步骤为?押计算地址、地址送内存、访问内存、数据送CPU、数据写寄存器,即执行节拍数为5;而存储指令stw,执行节拍数为3,需要执行的步骤为ldw的前三步。表1给出了软件流水前后数据搬移间隔编排的比较表。

 


    由表1可见,要将FLASH ROM中的一个数据搬移到IRAM中,需要从FLASH ROM中读取该数据到通用寄存器(指令ldw),再从通用寄存器中将其读到IRAM(指令stw)。在软件流水优化以前,需要至少8个指令周期。采用软件流水优化以后,根据指令的特点,第0到第4这5个指令周期可连续读5个数到通用寄存器,从第5到第9这5个指令周期再顺序地将读入通用寄存器的上述5个数读出到IRAM。于是,在10个指令周期内,可完成5个数据的搬移,从而使搬移周期下降到了两个指令周期,提高了CPU的运行效率。
2 QDMA方式和CPU直接数据搬移方式的比较
    由于前面已比较了CPU直接数据搬移的两种方式,下面着重对QDMA方式和基于软件流水的CPU直接数据搬移方式进行比较测试。这次测试是在TMS320C6711 DSP上进行的,采用的FLASH型号为SST29LE010。首先根据待烧写应用程序的.map文件找出需搬移的初始化代码段的大小,其中.text段为0x8c40 byte, .const段为0byte, .cinit段为0x24c byte,共需搬移0x23A3个32bit字。然后利用QDMA方式和CPU流水方式分别从FLASH中读取0x23A3个32bit字到片内内存中。测量所用时间结果如表2所示。

 


    由测试结果可以看出,不需要CPU直接参与数据搬移的QDMA方式比CPU流水搬移更具优越性,搬移速度快且设置简单。但CPU的流水搬移利用了TMS320C6000系列DSP汇编的特点,深入分析了指令的软件流水方式,很大程度地提高了CPU的利用率,拓宽了编程思路,也不失为一种好的选择。
3 利用ISP对上电引导程序进行FLASH编程
3.1 文件格式的转换

    完成了引导程序,包括.cmd文件中内存段的设置及连接设置后,用TI的编程工具CCS(Code Composer Studio)编译连接生成目标文件(.out文件)。但该.out文件格式是COFF文件格式,FLASH不支持这种格式,所以不能直接写入FLASH中,必须对该.out文件进行转换,提取出其中的数据部分,形成数据文件" title="数据文件">数据文件。最后利用烧写程序将已转换好的数据文件烧写到FLASH ROM中。
    有两种方式可将COFF格式文件转换成数据文件。一种是利用TI公司的HEX6x.exe工具,将生成的.out文件转化成.hex输出文件。由于该HEX6x.exe工具是提供给EPROM编程器的,用EPROM编程器可直接烧写.hex文件。但对于FLASH ROM的在系统编程来说,生成的.hex文件不能直接使用,必须再编写一段程序将.hex的文件头去掉?熏分离出数据文件,最后才能由FLASH的烧写程序将最终的数据文件烧写到FLASH ROM中。也可以不用TI公司的工具,而根据COFF文件格式直接提取出数据,生成一个数据文件,然后将其烧写到FLASH ROM中。
    COFF文件采用的是向量组织方式,可以很灵活地安排代码段和目标系统存储器。了解COFF文件的结构,不仅可以清楚.cmd文件的编写原理,而且可以认识初始化段和非初始化段的区别,同时还可以在转换文件时减少转换步骤。COFF文件的格式如表3所示。

 


    要提取的数据部分即初始化段是表3的Row data部分,也就是可执行代码和初始化代码部分。首先,根据文件头的信息(文件头描述了整个文件的全局信息)获得文件中段的数量,然后根据段的头(Section header)信息,判断该段是否为初始化段的头。因为非初始化段是在程序运行中才分配的,若为初始化段的头,则取得初始化段的位置,将这些段按地址由低到高的顺序复制到输出文件,便得到了可烧写的数据文件。其流程如图1所示。

 


3.2 利用ISP技术烧写FLASH
    烧写程序负责将前面所生成的数据文件写入FLASH ROM中,利用ISP技术,就不需要其它编程设备和附加编程电源,直接通过烧写程序烧写就可以了。烧写程序必须根据所用的FLASH的型号来编写。以SST29LE010为例,其软件数据保护和页面写、芯片擦除、芯片型号软件检测等都有不同的指令和时序,如表4所示,需要查阅该型号的芯片手册,根据手册完成烧写程序。

 


    在前面的两节中,结合TMS32C6x系列DSP的特点,介绍了几种上电引导过程中的数据搬移方法,特别推荐和比较了基于软件流水思想的CPU数据搬移方法及QDMA方式,还介绍了利用ISP技术对上电引导FLASH编程的基本步骤,及如何根据COFF文件格式将目标文件转换成数据文件,供FLASH的烧写程序烧写。
    从编写引导程序到将引导程序转换为可供烧写的数据文件,再到最终的FLASH ROM烧写,是比较繁琐的过程。本文所介绍的方法为编写引导程序拓宽了思路,并简化了文件转换的步骤。通过对实际的TMS32C6711 DSP电路调试实验,证明了以上的方法是简单易行的。
参考文献
1 TMS320C6000 Tools: Vector Table and Boot ROM Creation. TI,2002
2 Developing a DSP/BIOS Application for ROM on the TMS320C6000 Platform with CCS 1.2. TI,2001
3 TMS320C6000 Assembly Language Tools User’s Guide.TI,2001
4 TMS320C6000 CPU and Instruction Set Reference Guide.TI,2000
5 TMS320C6000 Programmer’s Guide. TI,2001

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。