问:现在做609的bootloader程序和应用程序的分区!上电时加载bootloader程序,通过bootloader来加载应用程序!主要问题:上电时加载bootloader程序,这个已经实现了,bootloader可以正常加载和运行! 1. 应用程序编译时要应该怎么配置编译后,放置到Flash的某个地方加载,才能够运行起来? 2. 编译后生产的 .ldr 和 dxe 有什么区别,怎么生成类似bin和hex的来放置到flash中!? 以上两个问题,希望专家解答下,有没有实例啊?!
答:1. 需要在bootloader程序里面加入rom_boot(Address, 0, 0, 0, 0x20210002,0),第一个参数为应用程序烧写在flash中的地址 2. ldr文件为烧写到flash中的文件格式,dxe为连接仿真器时声称的文件格式
问:谢谢回复,我将问题分段有几点不明白: 1. rom_boot应该为系统函数,实现函数跳转功能,将Address处的LDR文件加载到DSP中运行,加载后,DSP是不是类似重新配置了所有的初始化的东西? 2. 在生产应用程序的LDR文件时,是否需要特别设置(例如arm芯片需要设置中断向量表地址等设置)?这个LDR是不是类似bin文件,只要见LDR文件写入从Address开始的地址即可?
答:1. 是的,root_boot是将ADDRESS处的ldr加载运行,这要看具体需求,如果bootloader中已经做过了初始化的工作,自己的升级程序可以不再初始化,初始化的工作需要initialization file 2. ldr不需要特殊配置,中断向量表等都有默认配置值,也可以根据需要在程序中修改。只不过生成ldr时需要加入初始化外部ddr的dxe,和你的工程dxe一起组成ldr。是的,ldr是从你address指定的位置开始执行
问:双核跑的时候,怎么烧程序到spi flash呢?有没有双核跑时,bootloader 和 app应用程序双区分区,通过bootloder升级app程序的方法和实例?
答:对于双核工程使用elfloader把两个核的dxe合成为一个ldr,然后再使用cldp把ldr文件烧写到flash中。另外请确认你所用的nor flash是不是32bit的,-bcode 0x6适用于16bit flash,0xA适用于32bit flash。下面的例子以16bit nor flash(如为SPI flash请自行修改,参考elfloader -h帮助)为例。还要确认BF609的版本,revision要与BF609_init版本对应,以下以0.0为例 把两个dxe文件及BF609_init_v00.dxe拷到elfloader所在目录下 在cmd窗口中输入命令如下 elfloader.exe -proc ADSP-BF609 -si-revision 0.0 -b MEMORY -f binary -width 16 -init BF609_init_v00.dxe -bcode 0x6 Core0.dxe -NoFinalTag Core1.dxe -o core.ldr 烧写flash请使用cldp,如使用SPI flash请自行替换flash driver cldp -proc ADSP-BF609 -emu HPUSB -driver bf609_pc28f128p33_dpia.dxe -cmd prog -erase affected -offset 0 -format binary -file core.ldr driver文件在C:\Analog Devices\ADSP-BF609_Evaluation_Board-Rel1.0.3\BF609_EZ-Board\Blackfin\Examples\Device_Programmer\parallel
问:
非常感谢你的详细回复,有三大疑问:
1.你的回答:要确认BF609的版本,revision要与BF609_init版本对应,以下以0.0为例,把两个dxe文件及BF609_init_v00.dxe拷到elfloader所在目录下;这里的BF609的版本从哪里看出来,我好像没有管它,BF609_init_v00.dxe这个dxe是哪里来?
2. 你的命令:elfloader.exe -proc ADSP-BF609 -si-revision 0.0 -bMEMORY -f binary -width 16 -init BF609_init_v00.dxe-bcode 0x6 Core0.dxe -NoFinalTag Core1.dxe -ocore.ldr 相当于把两个Core0.dxe,Core1.dxe合并成Core.ldr,再将Core.ldr烧写到FLash中;若采用bootloader和应用程序双区分区时,应用程序是否也可以这样做,将两个核的dxe链接后生产新ldr文件,放置到flash的Address处,再按照你所说的在bootlaoder程序中加入rom_boot(Address, 0, 0, 0,0x20210002,0)来加载?
3. 我是这样烧单核的ldr文件bootlaoder.ldr的:cldp.exe -@-proc ADSP-BF609 -emu HPUSB -driver w25q32bv_dpia.dxe-cmd prog -erase affected -offset 0 -format hex -filebootlaoder.ldr 这种可以烧写成功并正常从SPIflash加载运行!试问:这种没有用到BF609_init_v00.dxe是否有其他风险?
答:1. 在C:\Analog Devices\CrossCore Embedded Studio 1.0.3\Blackfin\ldr\init_code\BF609_init,主要是用于初始化开发板上的ddr,如果客户更换了自己的ddr需要作出相应修改 2. 是的 3. BF609_init_v00.dxe主要是客户应用程序启动之前用于初始化ddr,如果客户程序比较大,需要有一些程序从ddr执行,只有初始化过ddr后,后续的程序才能加载到ddr上 |