前言
DSP系统的引导装载是指在系统加电时,由DSP将一段存储在外部非易失性存储器中的代码移植到内部高速存储器单元并执行的过程。这种方式即可利用外部存储单元扩展DSP本身有限的ROM资源,又能充分发挥DSP内部资源的高速效能。因此,引导装载系统的性能直接关系到整个DSP系统的可靠性和处理速度,是DSP系统设计中必不可少的重要环节。在装载系统中,外部非易失性存储器和DSP的性能尤为重要。FLASH是一种高密度、非易失性的电可擦写存储器,而且单位存储比特的价格比传统EPROM要低。为此,本文介绍了TMS320C6713浮点DSP芯片和SST公司提供的SST39VF400A FLASH存储器的基本特点,给出了使用该FLASH存储器设计和实现完整的TMS320C6713 DSP引导装载系统的具体方法。
1 硬件设计
1.1 主要芯片介绍
DSP自动引导装载系统主要使用DSP芯片(TMS320C6713)和外扩存储器(SST39VF400A)两种芯片来实现。其中TMS320C6713是一款高性能的32位浮点DSP,适用于专业音频信号处理。该芯片的内部结构是在TMS320C62XX的基础上加以改进制成的,其内部集成了多个功能单元,并采用了先进的VLIW体系结构及流水线技术;它采用3.3 V的I/O电压和1.8 V的内核电压供电方式,并具有两级cache缓存结构。除此之外,它还有以下两个主要特点: 第一是运行速度快。德州仪器公司(TI)推出的这一款300 MHz的TMS320C6713数字信号处理器(DSP)的处理速度高达1800 MFLOPS。TMS320C6713可以使用的工作时钟和对应指令周期表如表1所列。
其次是精度高。TMS320C6713有三个因素影响着浮点格式的内在高精度。首先,浮点DSP的24位I/O字长在整数与实数值方面可实现比定点器件中常用的16位字长更高的精确度。第二.取幂大幅提高了应用可用的动态范围,较大的动态范围对处理极大数据集以及难以方便预计数据集范围的情况相当重要。第三,硬件内部的浮点数据表示法比定点器件更为精确,这就保证了最终结果的更高精确度。
SST39VF400A是SST公司推出的FLASH存储器。该器件十分适合用作外扩存储器,它的存储容量为4 MB,采用3.3 V单电源供电,因而无需额外提供高电压即可通过一些特殊的命令字序列来实现对各个子模块的读写和擦除。并可重复十万次以上,此外,还可通过DSP编程来实现对它的读写操作,十分适合于系统的调试和开发。
1.2 系统硬件接口设计
DSP访问片外存储器主要通过外部存储器接口(EMIF)完成。它不仅具有很强的接口能力(可以和各种存储器直接接口),而且具有很高的数据吞吐能力(高达1 200 MB/s)。TMS320C6713的EMIF能支持8位、16位和32位宽的所有存储器,当从这些窄位宽的存储空间读写数据时,EMIF会将多个数据打包成一个32位的值,而不必增加额外电路。TMS320C6713与SST39VF400的接口电路设计如图1所示。该电路主要通过DSP的相关输出管脚来控制FLASH的擦除和读写。其中,A0~A19为地址线,DQ0~DQ15为数据线,OE和WE分别为输出使能和写使能,CE1为片使能。由于TMS320C6713默认的引导模式是从外部CE1空间的16位FLASH来引导装载,所以,TMS320C6713的CE1和FLASH的片选CE相连。
2 软件设计
本引导装载系统主要由用户应用程序和FBTC (the FlashBurn Target Component)程序两部分构成,图2所示是基于CCS的Flash存储器烧写系统框图。其中,用户程序除了要完成用户设计要求外,还要对DSP板上的EMIF寄存器进行设置;FBTC程序则包括FLASH存储器烧写算法、初始化操作、地址映射等。
2.1 用户程序设计
用户可根据设计要求及实际算法编写用户主程序。除此之外,用户还要根据自己的目标板上存储器分配进行配置。TMS320C6713芯片上电后,若选择从EMIF引导程序,DSP则自动将位于地址空间CE1(0x90000000~0x9FFFFFFF)开头的1KB代码传输到地址空间0处。它的数据传输采用默认时序,用户可以选择外部程序存储器的宽度(8位/16位/32位),然后由EMIF自动将几次读人的数据合成为32位数据。传输由DSP中的ED-MA通道以单帧形式自动进行。传输完成后,程序从地址0处开始运行。因此,要在TMS320C6713中实现基于FLASH的自引导功能,必须将FLASH配置在DSP的CE1地址空间中。
在这里,用户要编写的EMIF配置文件是c6713 emif.s62,其程序设计代码如下:
事实上,除了要对EMIF进行配置外,用户还必须在链接文件中为某些段制定两个不同的地址:一个是导入地址,一个是运行地址。导入地址用来决定装载器把段的原始数据放在何处,而运行地址就是该段代码运行的地址。制定两个地址的目的是为了加快代码执行速度。它们的链接可由*.cmd文件来实现。对存储器的设置如下:
IRAM:origin=00000000h length="0000FA00h" (内部RAM)
FLASH_BOOT:origin=0x90000000 length="00000400h" (存储自举代码)
FLASH_REST:origin=0x90000400 length="0001fc00h" (存储主程序代码等)
在完成用户主程序、EMIF配置文件、链接命令文件后,就可利用TI公司的DSP集成开发环境CCS进行编译、调试及链接,以生成用户应用程序的目标文件*.out。
2.2 FBTC程序的设计
FBTC程序主要是针对DSP目标板上的FLASH存储器进行操作。即通过一定的编程命令序列来控制FLASH的工作方式。这些命令序列是一些特定字符的组合,只要向FLASH中的特定寄存器以特定的顺序输入这些字符,即可进入相应的编程模式。SST39VF400中的主要命令和写入地址如表2所列。FBTC程序主函数的状态图如图3所示。
图3中的信息处理函数可依据FlashBurn编程协议提供的信息格式来设计;命令处理函数主要包括FLASH的擦除、读取和烧写。同样的,FBTC程序设计完成后,也可利用TI公司的DSP集成开发环境CCS进行编译、调试及链接,从而生成FBTC程序的目标文件*.out。
3 FLASH的烧写
对FLASH存储器进行烧写一般有以下几种方法:一是通过编程器烧写;二是通过开发商提供的专门烧写软件工具进行烧写;三是自己编写烧写程序通过DSP烧写。本文是通过TI公司提供的FlashBurn软件来对FLASH存储器进行烧写。将FlashBurn与CCS、HEX文件转换工具以及FBTC配合使用,可以方便快捷地将用户数据与程序写入FLASH存储器。FlashBurn采用图形化界面,使用方便,用户只要简单配置几个操作参数,即可实现对FLASH存储器进行擦除、烧写和查看内存内容等多项功能操作。其具体步骤如下:
(1) 编写用户程序,通过CCS编译、链接生成目标文件user.out;
(2) 编写FBTC程序,通过CCS编译、链接以生成目标文件FBTC.out;
(3) 编写hex6x命令文件(*.cmd),并利用hex6x来执行这个文件,然后将用户目标文件user.out转换为十六进制格式user.hex。
hex6x命令文件如下:
(4) 打开FlashBurn软件,新建一个*.cdd文件并设置,其设置示意图如图4所示;
(5) 装载FBTC.out,然后再擦除和烧写FLASH;
(6) 去掉仿真器并复位DSP目标板,以使程序自动加载运行。
4 结束语
按照上述步骤
将用户应用程序成功下载到FLASH后,再将DSP目标板脱离仿真器并重新上电复位,其用户应用程序便可正常运行,而且FLASH擦除和烧写速度比较快。该方法成功解决DSP程序的脱机引导加载问题。事实上,根据不同的应用,也可以参考本设计中实现方法,以求简单、有效地解决FLASH存储器的自举问题。