DSP

flashburn使用

2019-07-13 14:44发布

这是我第一次写博客,暂时只是用来记录每天学习到的知识,以后可以随时查阅。
购买了一个magicVision公司的VMD642开发板,用于学习DM642,目的是用作数字图像处理。
刚开始,程序只能下载到ram中运行,掉电后就没有了,后来发现,需要烧写到flash中才可以永久保存,掉电后,程序不会消失。
使用的平台是CCS3.1,使用插件flashburn。flashburn插件需要自己安装,网上看到有些资料说,安装完成后,CCS中有选项可以直接启动flashburn,结果,我这里并不是这样的,CCS中没有出现此选项。刚开始以为安装未成功,所以连续安装了很多次,还是未出现选项,后来才发现,其实是安装成功了,可以到CCS安装目录下,binutilitiesflashburn中找到flashburn.exe,这样,可以直接使用。
首先,程序烧写到flash,上电后,DSP需要首先运行一段引导程序(DM642中是1K大小)引导程序将flash中的程序再加载到RAM中运行,称为二次加载。所以,在将普通程序烧写到FALSH中的时候,需要对程序做一定的修改。
1.在程序中添加boot.cmd文件:内容如下:
            .title  "Flash bootup utility for DM642 EVM"
            .option D,T
            .length 102
            .width  140


COPY_TABLE  .equ    0x90000400
EMIF_BASE   .equ    0x01800000


            .sect ".boot_load"
            .global _boot


_boot:      
;************************************************************************
;* Debug Loop -  Comment out B for Normal Operation
;************************************************************************


            zero B1
_myloop:  ; [!B1] B _myloop  
            nop  5
_myloopend: nop


;************************************************************************
;* Configure EMIF
;************************************************************************


        mvkl  emif_values, a3  ; load pointer to emif values
        mvkh  emif_values, a3
        
        mvkl  EMIF_BASE, a4    ; load EMIF base address
        mvkh  EMIF_BASE, a4


        mvkl  0x0009, b0       ; load number of registers to set
        mvkh  0x0000, b0


emif_loop:
        ldw   *a3++, b5        ; load register value
        sub   b0,1,b0          ; decrement counter
        nop   2
 [ b0]  b     emif_loop
        stw   b5, *a4++        ; store register value
        nop   4  


;****************************************************************************
;* Copy code sections
;****************************************************************************
        mvkl  COPY_TABLE, a3   ; load table pointer
        mvkh  COPY_TABLE, a3


        ldw   *a3++, b1        ; Load entry point


copy_section_top:
        ldw   *a3++, b0        ; byte count 
        ldw   *a3++, a4        ; ram start address
        nop   3


 [!b0]  b copy_done            ; have we copied all sections?
        nop   5


copy_loop:
        ldb   *a3++,b5
        sub   b0,1,b0          ; decrement counter
 [ b0]  b     copy_loop        ; setup branch if not done
 [!b0]  b     copy_section_top
        zero  a1
 [!b0]  and   3,a3,a1
        stb   b5,*a4++
 [!b0]  and   -4,a3,a5         ; round address up to next multiple of 4
 [ a1]  add   4,a5,a3          ; round address up to next multiple of 4


;****************************************************************************
;* Jump to entry point
;****************************************************************************
copy_done:
        b    .S2 b1
        nop   5


emif_values:
        .long 0x00052078      ; GBLCTL
        .long 0x73a28e01      ; CECTL1 (Flash/FPGA)
        .long 0xffffffd3      ; CECTL0 (SDRAM)
        .long 0x00000000      ; Reserved
        .long 0x22a28a22      ; CECTL2
        .long 0x22a28a22      ; CECTL3
        .long 0x57115000      ; SDCTL
        .long 0x0000081b      ; SDTIM (refresh period)
        .long 0x001faf4d      ; SDEXT


2.修改程序的cmd文件,在MEMORY中添加:boot: o = 00000000h l = 000400h (这就是因为引导程序是1kb)。然后重新编译整个工程,生成新的.out文件。
3.启动flashburn.exe发现需要添加一些文件,比如:
Conversion Cmd
File To Burn
FBTC Program File
将程序烧写到flash时,需要将原来的.out文件转化成.hex文件,所以,需要用到TI的hex_6x.exe(可以在ccs安装目录下找到)、一个用来转化的CMD文件。
第一个,Conversion Cmd,就是这个用来转化的cmd文件,文件名:boot_hex.cmd(可以自己取名字)内容如下:
VMD642_video_out1.out /*转化前的.out文件*/
-a 
-memwidth 8 
-boot 
-bootorg 0x90000400 
-bootsection .boot_load 0x90000000 /*flash首地址*/
 ROMS 
{
 FLASH: org = 0x90000000, len = 0x400000, romwidth = 8, files = {VMD642_video_out1.hex}/*转化后的.hex文件名*/
 }


“File To Burn”就是要填的转化后的.hex文件了。
现在讲讲具体怎么讲.out文件转化成.hex文件。
1).新建一个文件夹,比如,在C盘根目录下新建DSP_BURN文件夹;
2).将.out文件(VMD642_video_out1.ou),Conversion Cmd文件(boot.hex),hex_6x.exe都放在这个文件夹中。
3).点开windows命令处理程序(运行->cmd.exe)
4).输入:cd c:dsp_burn 回车
5).输入:hex_6x boot_hex.cmd 回车
这时候会发现,c:DSP_BURN中出现了一个文件:VMD642_video_out1.hex,这个就是转哈后的.hex文件。flashburn.exe中要求添加的“File To Burn”就是这个文件。


4.添加FBTC Program File。这个是那个1k的引导程序(个人理解)。是由专门的另外一个DSP工程生成的.out文件。一般开发板会提供这个工程,网上也有这个工程的讲解,这里不再多说。
配置完成后是这样的: DM642学习笔记(1)-- flashburn使用 - minispark - minispark
选Program->download FBTC,需要CCS连接到开发板,否则,失败。
选Program->Erase Flash,这个需要比较长时间,耐心等待,如果看到进度条到了末尾然后又从头开始,就表示前面的配置工作没做好(可能是转化文件时候出错)需要重来。
选Program->Program Flash,等待成功。(如果进度条到了末尾又从头开始,还是表示失败)