TMS320VC55x系列DSP在线烧写方法研究
扫描二维码
随时随地手机看文章
随着数字信号处理技术的快速发展,DSP越来越广泛地应用于各种数字信号处理系统中。由于TMS320VC55x系列DSP的内部存储器没有可供用户使用的Flash,而最终开发的系统要想脱离仿真器运行。必须将程序代码存储在非易失性存储器中,所以要对DSP外接存储器。Flash存储器以其大容量和可在线编程等特点已成为DSP系统的一个基本配置。如何将程序烧写入Flash,并在上电时加载到DSP内部的RAM,是Flash在DSP系统中应用的两个基本技术问题。
以基于TI公司的TMS320VC5502和SST公司的SST39VF200开发的系统为背景,详细介绍了系统引导相关的硬件设计,烧写软件设计以及自举引导等实现方法。
2 TMS320VC5502的自举引导
2.1 TMS320VC5502的存储区以及Boofloader
TMS320VC5502的存储区是统一分配地址,即对程序和数据的访问在相同的物理空间。TMS320VC5502的存储区共分为4个区,即CE0,CEl,CE2,CE3,其字节地址分别为000000h-3FFFFFh,400000h~7FFFFFh,800000h~BFFFFFh.C00000h~FFFFFFh。片内存储器共48 K字节,可分为32 K的16位字的RAM和16 K的16位字的ROM,片内RAM的字节地址为000000h~00FFFFh,位于CEl区;片内ROM的字节地址为FF8000h~FFFF00h。
片内ROM从FF8000h开始的区域包含Bootloader,该程序在系统上电或复位后可以将用户代码自动搬移到片内RAM运行。
2.2 自举加载模式选择
TMS320VC5502的引导模式选择是通过3个模式选择引脚BOOTM[0:2]配置完成的。BOOTM[0:2]引脚分别与GPl00,GPl01,GPl02相连。自举加载模式选择如表1所示。
TMS320VC5502每次上电复位后,在执行完一系列初始化工作后,根据预先配置的自举模式,通过固化在ROM内的Bootloader程序进行程序引导。系统设计中,采用EMIF(外部存储接口)并行引导模式(16位数据宽度),只需将BOOTM[2:0]设置成011即可。
2.3 TMS320VC5502的引导表
Bootloader允许应用代码存放在慢速非易失性的外部存储器中,然后再将代码搬移到高速的片内存储器执行。应用代码以一种Bootloader能够理解的特殊格式编码,这种格式就是自举加载表。Boofloader在引导程序时,程序代码是以自举加载表形式加载。自举加载表包含了将要搬移的代码段、程序段,以及这些段将要被搬移到的地址和加载完成后程序要执行的地址(即程序入口地址)和其他一些配置信息。
TMS320VC55x系列DSP的自举加载表结构如表2所示。
其中,程序入口地址是自举加载表加载结束后用户程序开始执行的地址;寄存器配置数目决定了后面有多少个寄存器需要配置:只有当延时标志为0xFFFF时,延时才被执行;延时长度决定了在寄存器配置后延时多少个CPU周期才进行下一个动作;段长度、段起始地址和数据则为用户程序中定义的各个段的内容,并且可以重复添加;最后以0x00000000(32个01作为引导表的结束标志。
若要生成引导表,可用CCS最终编译生成的.out文件通过CCS自带的hex55.exe转换程序得到。将hex55.exe文件、.out文件、.cmd文件放在同一个文件夹中,通过DOS命令调用hex55.exe和.cmd文件,即可完成.out文件到.hex格式的引导表文件的转化。.cmd文件用于提供引导表的相关配置信息,以下为一个.cmd文件实例。
一boot:表示生成一个自举加栽表
一v5510:2:生成C55x格式的自举加载表
一parallell6:加载模式是16位外部异步存储器
一a :要求的输出格式是ASCII格式
一o mvbso.hex:指明输出文件名
bso.out:指明输入文件名
经hex55.exe文件转化后的.hex格式的自举加载表文件是不能直接导入CCS中,CCS只支持将特别规定的DAT格式文件通过LDADDATA导入内存。所以在导入之前必须先将自举加载表转化成DAT格式文件,这个工作可以用VC编写简单的C语言转化程序实现。
2.4 TMS320VC5502和Flash的连接
EMIF为外部存储接口,通过EMIF接口可灵活地和各种同步或异步存储器件无缝连接。通过EMIF接口可以将TMS320VC5502的存储空间扩展到128 Mbit。存储空间被分为CE0~CE3四个区.每区占用不同的地址。在EMIF的并行引导模式下,ROM固化的Bootloader程序是以字地址0x200000为首地址开始加载程序。Ox200000即为CEl空间的首地址,所以Flash必须接在DSP的CEl空间上。
TMS320VC5502的EMIF有内部和外部两种地址总线。内部地址总线为A[2l:2],外部地址总线为A[19:0]。EMIF根据所用的存储器数据线大小自动将内部地址总线移位,以便与外部地址总线连接。外存储器的地址总线应该总是连接在EMIF、的以A2开始的地址线上。例如一个8,16或32位的异步存储器的地址总线A[n:0](其中n表示外存储器的地址线个数)应该连接EMIF的地址线A[n+2:2]。图1给出TMS320VC5502和Flash的连接实例。表3为TMS320VC5502的内部总线和外部地址总线的映象关系。
3 并行Flash的烧写
3.1 数据烧写程序设计
Flash的数据可直接读取,但对Flash的编程和擦除操作则需要通过一系列命令才能进行。SST39VF200的写操作只能将1变成0,而O变成l必须通过擦除操作进行。所以每次写Flash之前必须进行片擦除,使存储单元值变成0xFFFF才能进行编程。擦除命令需要6个周期,编程命令需要4个周期,操作命令如表4所示H。
编程和擦除操作都需要一定周期的时间(SST39VF200的单字编程时间是14μs,整片擦除时间是70 ms)。用户可以通过查询标志数据线DQ6和DQ7确定编程或擦除是否完毕。当器件正处于编程或擦除状态时,连续读任意单元的值,D06的值将一直在O、l之间交替变化。当编程或擦除结束时,读DQ6则得到一个恒定值。这里即通过此方法判断操作是否结束。
根据Flash的编程和擦除命令,编写了相应的C语言程序,其中在TMS320VC55x系列1)SP中,对外接存储器的访问要调用库函数far_poke()和far_peek()。这2个函数包含在<extaddr.h>头文件中,并且寻址的地址为字地址。以下给出擦除程序,写操作与此类似。表5为对外接存储器读写的库函数。
3.2 程序的烧写实现
系统在CCS仿真环境下对Flash进行在线编程。先建立一个Flash的烧写工程,并在工程中将要烧写进Flash的自举加载表文件通过CCS的LOADDATA功能直接加载进DSP的内存。根据加载的首地址和数据长度,在仿真环境下烧进Flash中。当然也可以直接在程序中定义一个数组,将DAT文件中的数据赋值给该数组的元素,然后将该数组的每个元素写入Flash。在运行烧写程序之前,要先对EMIF进行设置,因为EMIF默认的是接8位异步存储器,可以通过调用GEL菜单中Init_CE0_Async_16命令完成。
4 结语
阐述了一种针对TMS320VC55x系列DSP简单有效的Flash烧写方法,并提出了程序自举加载的实现方法。讨论的加载方法包括硬件设计及相关程序,已在笔者实际开发的高精度数据采集项目中使用并成功运行。