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烧写程序的目的。