dm642的flash烧写flashburn心得

DM642有多种启动方式:PCIboot, HPI boot, EMIF boot, NO boot;可以设置BOOT开关来设置

而较为复杂的就是EMIF boot, 因此该文将描述如何实现从EMIF的8-bit flash启动。
该话题包含两方面的内容:
1 如何设计应用程序,使其能够从flash启动
2 如何把应用程序烧写到flash里面

 

配置应用程序
DM642如果是配置为从EMIF 8-BIT FLASH启动,当复位后, EDMA控制器自动从CE1位置的FLASH中复制1K字节内容到内部SRAM的0x00000000地址,并开始执行(bootloader)。如果用户的程序是小于1K字节,则这个复制过程是完全可以满足要求的;但是我们的应用程序往往会超过1K字节,此时我们就需要做一个辅助的bootloader(secondary bootloader),放在该1K代码里面,当EDMA把该bootloader复制到0地址并开始执行程序后, 该辅助bootloader开始执行,其把应用程序位于CE1空间的FLASH中拷贝到运行地址(内部SRAM, 或SDRAM),之后跳转到ENTRY POINT(如C代码的c_int00)点开始运行.

 

 

对于一个已经编译好,仿真通过的程序,如果要作为可从flash启动的代码,需要再做下面的工作:


1 添加boot.asm到工程里面(C:/CCStudio_v3.1/boards/evmdm642/flashburn/fpga_loader下);


2 在DSP/BIOS的Memory Section Manager里面,添加一个名为BOOT的section, 位置是0x000,长度为0x400,space设置为data(注意不能设置为code/data)。该section在启动时会被EDMA拷贝的1K代码覆盖,所以不能作为其它用途。

(如果不使用DSP/BIOS就手动在CMD添加BOOT段)并要在CMD中将将boot_load > BOOT中。


3 编译,生成.out格式的COFF文件,然后需要使用hex6x.exe应用程序转换为ascii文件格式,方便使用flashburn来烧flash;
其中hex6x.exe的参数如下
/*
* hex6x command file
* secondary bootloader demo
*/
debug/led.out /*输出的OUT文件,按需要修改*/
-map led_ahex.map /*hex6x产生的map文件名,可以不要该参数*/
-a /*生成ascii格式文件*/
-image /*生成image文件,去掉代码中的不连续部分,可以不要该参数*/
-zero /*将输出的ascii文件的起始地址清0*/
-memwidth 8
-boot /*用来产生copy table参数,详见spra999*/
-bootorg 0x90000400 /*用来产生copy table参数,详见spra999*/
-bootsection .boot_load 0x90000000 /*用来产生copy table参数,详见spra999*/
ROMS
{
FLASH: org = 0x90000000, len = 0x20000, romwidth = 8, files = {led_ahex.hex}
}

 


4 运行hex6x后,生成.hex格式文件,然后及可以用flashburn写flash了
Flashburn的使用
1 把CCS与DSP连接好后,启动flashburn

 

2在file菜单里面新建配置或打开以前的配置文件,Processor Type选择c64x,
FBTC program file 选择C:/CCStudio_v3.1/boards/evmdm642/flashburn/FBTC642/ FBTC642.out(该程序是一个代理程序,需要运行在DSP里面和flashburn通讯, flashburn才能对flash进行操作),然后点击program/download FBTC;该程序会检测flash大小,如果上面的flash大小和检测到的不一致,会弹出对话款提示。


3 把FBTC下载到板子上以后,我们就可以对flash进行擦除(erase flash)、查看(show memory)、编程(program flash)操作, 这些功能在program菜单下。


4 对flash进行编程时,flashburn只支持.hex文件。
在file to burn中选择要烧写的.hex文件,选中verify wirte,然后在program 菜单中点击program flash及可(写flash之前需要对flash进行擦除)。

 

下面是EVMDM642评估板的烧写方法:

 

Flash烧写使用flashburn 工具:

一,评估板dm642+fpga

1.      小程序烧写:

1.      修改bios段,照手册上增加BOOT段,长度为1024

2.       复制boot.asm

3.       修改cmd,即增加.bootload   >  BOOT

4.       主程序修改:EVMDM642_fpgaLoad(0x90040000)

5.       将三个文件复制进来,分别是:hex.6x   fpga_loader.cmd   out2hex.bat

编辑修改其中的内容,就是改一下几个文件的名字,最后运行批处理文件即可 

6.      打开flashburn工具,先擦写,后烧osd_fpga_rev4_ahex.hex后关flashburn,下载运行fpga_loader.out led亮(可不做),后再烧写自己的程序

 

 

2.      大程序烧写

1.       修改bios段,isram起始地址改为1024

2.       将三个文件复制进来,分别是:hex.6x   fpga_loader.cmd   out2hex.bat

修改cmd文件的内容:

例子如下:

out2hex.bat

hex6x h263loopback.cmd

@pause

h263loopback.cmd

h263loopback.out

-a

-memwidth  8

-boot

 

;这里删除了boot_load

 

-map  h263loopback.map

ROMS

{

    FLASH:  org = 0x90000000, len = 0x80000, romwidth = 8, files ={h263loopback.hex}

}

生成hex文件

 

 

3.先烧写fpga 配置程序,后关flashburn,下载运行fpga_loader.out led亮(一定要做,不然不能分页),再烧应用程序,注意逻辑地址改为0x100000,即从第二页烧起(其实第一页也是可用的),最后烧写二级引导程序load_userpro_ahex.hex

 

         使用cpld分页的flash烧写,可以按小程序也可按大程序烧写方法,注意修改分页地址一定要正确,不用烧写fpga的配置参数。

 

 

EVMDM642 FPGA数据问题

EVMDM642的FPGA配置数据存放在flash的0X40000地址处,长度为256K, 为了板子能够正常工作,flash擦除后,要先把FPGA的配置数据

(C:/CCStudio_v3.1/boards/evmdm642/flashburn/fpga_loader_ahex.hex)写进去,然后再烧自己写的程序,中间不能有flash擦除动作。

 

如果板子不是EVMDM642或硬件配置和EVMDM642不同,则需要按照具体的硬件配置,修改FBTC的代码,来达到使用flashburn烧写程序的目的。

你可能感兴趣的:(manager,cmd,File,Flash,table,hex)