介绍了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的前三步。表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流水方式