首先介绍一下FlashBurn软件,它是TI的第三方软件公司为TI的DSP编写的Flash烧写软件,和CCS软件配合使用,通过DSP内部运行的FBTC实现Flash的读写和擦除。
在这里很有必要说一下DM6437从外部Flash启动的整个过程。首先,当系统加电或复位之后,DSP内核被锁住,暂停工作,EDMA自动的从外部Flash的首地址(基地址)搬运1KB的内容到内部cache的首地址,搬运完成之后,启动DSP内核,CPU运行这1KB的程序,这个程序的作用相当于一个bootloader的作用,完成二次启动,从外部Flash预先设定好的地址开始将真正要运行的程序搬运至DSP的cache中,搬运完毕后,运行_c_int00,进入到真正程序运行。这样就实现了DSP内核的启动。
然后说一下FlashBurn的工作过程:软件打开之后,链接CCS,进而连接到目标板上,实现软件和目标板的通信。然后下载FBTC到目标板上,在这里,FlashBurn软件和FBTC程序就相当于一个上位机软件和下位机软件的关系,软件和FBTC进行命令交互,完成如下几个功能:Flash读、写、擦除。如下图所示:
在工程中,CCS自动生成的是.out文件,而FlashBurn软件要求的是.hex文件,所以我们还要将目标out文件转换成hex文件。使用的转换工具有
(1)可以用HexAIS.exe,它的具体使用命令为(DOS环境),使用情况见《DM6437平台开发-----程序烧写1》
(2)也可以用hex6x.exe(是CCS自带的有,具体目录在C:/CCStudio_v3.3/C6000/cgtools/bin),它的具体使用命令也为(DOS环境),介绍如下
hex6x.exe OutToHexConvertParams.cmd
其中OutToHexConvertParams.cmd是hex6x.exe实现将out文件转换成hex文件的参数文件
其内容为:
video_black_white.out //将要转换的文件名
-a //生成的文件格式ASCII-Hex
-map video_black_white.map //生成hex文件的map文件
-memwidth 8 //Flash存储器的宽度
-boot //生成引导程序表
ROMS
{
FLASH: org = 42004000h, //二次引导的Flash地址
len = 02000000h, //Flash的最大容量(长度)
romwidth = 8, //Flash位宽
files = {video_black_white.hex}//将要生成的hex文件的文件名
}
在整个环节中,有两个个概念需要澄清,即Flash的基地址和二次搬移(引导地址),以及这两个地址是如何确定的:Flash的基地址就是你的目标板上Flash的物理地址,确定方法:由开发板的连接图可知,Flash被连接到CS2上,看其芯片资料可知CS2的物理地址范围为0x42000000到0x42FFFFFF,共16M的范围,所以Flash的基地址为0x42000000;而二次引导地址怎么确定呢,即从哪个地址开始引导的问题,前面提到DSP内核上电之后EDMA自动将低1KB的内容加载到cache中,所以这个地址的偏移地址最好要大于1KB(实际上只要大于开始引导程序的长度就可以,但是为了保险起见,一般都设置的大于1KB),在上面的cmd参数文件中,我们设定的二次引导地址为0x4200400h,为什么要设定成这个地址呢?这就牵涉到DSP引导程序中的Flash的二次搬运地址是如何设定的,这两个值一定要对应起来,也就是说,只有你引导程序是从hex文件烧写的起始地址开始搬运的,才能保证程序内容不会“丢失”。查看引导代码
由于引导程序的搬运起始地址设置的是0x42004000,所以我们的二次引导地址就设置成了0x42004000,其偏移量为4000H = 16KB > 1KB ,是可以接受的。
接下来就可以向目标板上烧写hex文件了,首先应擦除Flash,接着需要烧写两个hex文件,一个是引导程序的hex文件,另外一个是目标程序的hex文件,烧写完成之后重写启动就可以了。