DSP外部FLASH烧写的两种方法
1.TMS320C54x系列DSP芯片程序烧写方法
TMS320C54x系列DSP程序存储于外部非易失存储器芯片中,在上电或复位时将存储在外部存储器芯片中的程序搬移到DSP片内或者片外的RAM中全速运行。这种搬移的过程称为“自举加载” ,由DSP内部程序自动实现,下文中进行详细介绍。TMS320C54x系列DSP芯片程序烧写方法可分为编程器烧写和在线烧写两种方法,编程器烧写较容易实现但只适用于非直接焊于电路板上的外部存储器芯片,而在线烧写需要编制及调试在线烧写程序但适用于任何封装的外部存储器芯片。
2.外部硬件连接
无论是编程器烧写还是在线烧写都需要在DSP与外部存储器芯片的连接,以选通外部存储器的使能以及读写信号,以AT29LV1024为例,给出TMS320C54x与其的硬件连接方法。
AT29LV1024的选通以及读写辑信号由CPLD提供,CPLD内部的控制语言如下:
AT_CE<=DSP_DS;
IF (DSP_MSTRB=‘0’ AND DSP_ =‘1’) THEN
AT_OE<=‘0’ //选通读信号
IF (DSP_MSTRB=‘0’ AND DSP_ =‘0’) THEN
AT_WE<=‘0’ //选通写信号
DSP进行读数据时,DSP_ =1,DSP_MSTRB=0,则AT_OE=0,AT_WE=1,即AT29LV1024的读信号有效,写信号无效;DSP进行写数据时,DSP_ =0,DSP_MSTRB=0,则AT_OE=1,AT_WE=0,即AT29LV1024的写信号有效,读信号无效。
3.在线烧写TMS320C54X系列DSP程序
在线烧写是利用编写的烧写程序将DSP内部存储器的程序段等内容写到外部存储器中,另外要根据Bootloader的内容在外部存储器的前端写入部分控制字节。硬件复位时,置MP/MC为低电平,则从片内ROM的FF80地址开始执行程序,该位置包含一个分支指令,用来启动自举加载器程序,此程序固化于ROM中。自举加载又可分为8位或16位并行自举加载、I/O自举加载、串行自举加载、HPI自举加载等方式,文中采用并行自举加载。为进行自举加载,数据必须按照Bootloader可以识别的格式进行构造。对于TMS320C5409,在并行模式下,自举表放在外部数据存储器的32K高端地址区间:8000H~FFFFH。自举表首地址放在数据空间的0FFFFH单元。加载时,Bootloader读取数据空间的0FFFFH单元中的内容,将其作为首地址,从该地址开始复制数据到内部的程序空间。复制完毕后,Bootloader便跳转到指定的程序入口地址,开始执行用户程序。Boot表结构如下:
表1. 外部存储器中的数据自举加载格式(即Boot表格式)
在线烧写程序只要按照表中的数据格式,将数据写入外部存储器即可实现程序的在线烧写。设计中采用的外部存储器芯片位AT29LV1024,是容量为1M的FLASH MEMORY,芯片要求数据以128字节为单位分区写入,其写入数据格式如下图所示
以下给出128字节写FLAH的子程序
Write_Flash(unsigned char *Ad_FLASH, unsigned char *Data,128)
{
unsigned char *Ad_Temp, data;//定义子程序局部变量
Ad_temp= (unsigned char*)(0x5555+0x8000);
* Ad_temp=0xAAAA; //在0x5555地址写数据0xAAAA
Ad_Temp=(uint *)(0x2AAA+0x8000);
*Ad_Temp=0x5555; //在地址0x2AAA写数据0x5555
Ad_Temp=(uint *)(0x5555+0x8000);
*Ad_Temp=0xA0A0; //在地址0x5555 写数据0xA0A0
/*――――以上按照AT29LV1024格式开始写入数据――――*/
for( i=0;i<128;i++ )
{ data=*(Data+i);
*Ad_FLASH=data;
Ad_ FLASH ++;
}
Ad_ FLASH --; //以128字节为单位将内部程序段内容写入外部FLASH
} //子程序结束外部FLASH地址从原地址增为(原地址+127)
这样,按照自举加载的数据格式,编程构造数据表,调用上述子程序即可编写烧写程序。程序编写完毕,首先load原程序,然后load烧写程序,执行烧写程序,关电,使电路板脱离DSP仿真器,置MP/MC为0,上电即可实现程序的自动加载。
4. 利用编程器烧写程序
利用编程器烧写程序相对比较简单,而且烧写配置文件基本通用于任何外部存储器芯片,但适用于非贴焊在板上的外部存储器芯片,而且受到编程器的局限。利用编程器烧写外部AT29LV1024的步骤如下:
a. 修改CCS软件配置,在Project/Build Options界面的Processor Version中填入v548
b. 编写烧写配置文件write.cmd,文件应与源程序路径相同,内容如下:
Sample.out //load源程序生成的.out文件
-map write.map //生成.map文件
-o write.hex //生成.hex文件
-i //输出文件格式为Intel Hex格式
-memwidth 8 //目标系统存储器位宽
-romwidth 8 //外部存储器位宽
-boot //生成加载表
-bootorg 0x10000 //加载表的起始位置
-e 80h //程序入口地址
这里需要指出的是虽然TMS320C54X系列DSP和外部存储器芯片AT29LV1024都是16位系统,但所用的烧写器默认的读写数据位数为8位,因此memwidth和romwidth都设为8。在数据宽度为16位的情况下,程序的入口地址为0x8000,在8位的情况下,程序的入口地址为0x8000×2=0x10000,因此bootorg 设为0x10000。
c.用hex500命令转换write.cmd文件为write.hex。hex500的路径为C:\ti\C5400\cgtools\bin,将hex500拷贝到源程序的同一目录下,进入DOS环境,运行hex500 write.cmd即可生成要烧写的文件write.hex
d.利用编程器烧录软件打开文件write.hex,在最后两个地址填入程序的入口地址,即1FFFE填入80,1FFFF填入00;另外由于由于DSP和外部存储器芯片AT29LV1024均为16位系统,应采用16位引导模式,因此将0x10000位置的数据改为10,即将Boot的最前端数据由08AA改为10AA,最后将文件高低字节交换。
e.利用自动编程或芯片编程命令将程序写入芯片中。
5.总结
本文以TMS320C5409外接AT29LV1024为例介绍了TMS320C54X系列DSP程序烧写的两种方法。在线烧写对利用编写的烧写程序和DSP内部固化的“自举加载” 实现程序的搬移;编程器烧写较为简单,但对芯片有所限制。文中给出了两种烧写方法的关键步骤,可以实现TMS320C54X系列DSP的程序烧写。
|