介绍了TMS320C6x DSP的几种FLASH引导方法,比较了引导过程中基于软件流水的数据搬移方法和QDMA方式的数据搬移方法,并介绍了如何利用在系统编程(ISP)对上电引导程序进行FLASH编程。通过对实际的TMS32C6711 DSP电路调试实验,证明了以上方法简单易行。
关键词:FLASH存储器 上电引导 COFF文件格式 DSP
FLASH存储器是在EPROM和EEPROM的基础上发展起来的一种非易失性存储器,在掉电情况下仍能保证数据不丢失,并能够在不离开电路板或据设备的情况下实施擦除和再编程操作。由于其具有结构简单、维护便利、存取速度快、对环境适应能力强、抗振性能好等优点十分适合于嵌入式系统的设计和开发,并且已成为目前流行的数字信号处理系统的一个基本配置。
在许多DSP的应用中,系统上电后需要将用户程序从FLASH存储器引导到高速数据存储器中运行。这就需要给用JTAG接口调试通过的应用程序添加启动代码,将生成的目标文件进行格式转换使其能在线烧写,将转换过的文件利用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,分别完成从存储到通用寄存器的数据搬移和从通用寄存器到存储器的数据搬移。读取指令ldw需要执行的步骤为:计算地址、地址送内存、访问内存、数据送CPU、数据写寄存器,即执行节拍数为5;而存储指令stw,执行节拍数为3,需要执行的步骤为ldw的前三步。
要将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字到片内内存中。测量所用时间结果如表1所示。
表1两种数据搬移方式的比较
搬移大小:SIZE=0小3A3 WORD
由测试结果可以看出,不需要CPU直接参与数据搬移的QDMA方式比CPU流水搬移更具优越性,搬移速度快且设置简单。但CPU的流水搬移利用了TMS320C6000系列DSP汇编的特点,深入分析了指令的软件流水方式,很大程度地提高了CPU的利用率,拓宽了编程思路,也不失为一种好的选择。
3 利用ISP对上电引导程序进行了FLASH编程
3.1 文件格式的转换
完成了引导程序,包括.cmd文件中内存段的设置及连接设置后,用TI的编程工具CCS(Code Composer Studio)编译连接生成目标文件(.out文件)。但该.out文件格式是COFF文件格式,FLASH不支持这种格式,所以不能直接写入FLASH中,必须对该.out文件进行转换,提取出其中的数据部分,形成数据文件。最后利用烧写程序将已转换好的数据文件烧写到FLASH ROM中。
在前面的两节点,结合TMS320C6x系列DSP的特点,介绍了几种上电引导过程中的数据搬移方法,特别推荐和比较了基于软件流水思想的CPU数据搬移方法及QDMA方式,还介绍了ISP技术对上电引导FLASH编程的基本步骤,及如何根据COFF文件格式将目标文件转换成数据文件,供FLASH的烧写程序烧写。
从编写引导程序到将引导程序转换为可供烧写的数据文件,再到最终的FLASH ROM烧写,是比较繁琐的过程。本文所介绍的方法为编写引导程序拓宽了思路,并简化了文件转换的步骤。通过对实际的TMS320C6711 DSP电路调试实验,证明了以上的方法是简单易行的。
有两种方式可将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所示,需要查阅该型号的芯片手册,根据手册完成烧写程序。
表4 SST29LE010内存指令表
在前面的两节点,结合TMS320C6x系列DSP的特点,介绍了几种上电引导过程中的数据搬移方法,特别推荐和比较了基于软件流水思想的CPU数据搬移方法及QDMA方式,还介绍了ISP技术对上电引导FLASH编程的基本步骤,及如何根据COFF文件格式将目标文件转换成数据文件,供FLASH的烧写程序烧写。
从编写引导程序到将引导程序转换为可供烧写的数据文件,再到最终的FLASH ROM烧写,是比较繁琐的过程。本文所介绍的方法为编写引导程序拓宽了思路,并简化了文件转换的步骤。通过对实际的TMS320C6711 DSP电路调试实验,证明了以上的方法是简单易行的。 |