您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> BF609的外接SPI flash的bootlaoder程序和应... 
本帖共有6355个阅读者
发表帖子 发表投票 回复主题
BF609的外接SPI flash的bootlaoder程序和应用程序分区问题!
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
BF609的外接SPI flash的bootlaoder程序和应用程序分区问题!

问题:


现在做609的bootloader程序和应用程序的分区!上电时加载bootloader程序,通过bootloader来加载应用程序!主要问题:上电时加载bootloader程序,这个已经实现了,bootloader可以正常加载和运行!

1.  应用程序编译时要应该怎么配置编译后,放置到Flash的某个地方加载,才能够运行起来?

2.  编译后生产的 .ldr 和 dxe 有什么区别,怎么生成类似bin和hex的来放置到flash中!?

    以上两个问题,希望专家解答下,有没有实例啊?!


我是OP...
等级:管理员 参考IP地址:*.*.*.*
2014/7/18 9:51:13
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
答:

1. 需要在bootloader程序里面加入rom_boot(Address, 0, 0, 0, 0x20210002,0),第一个参数为应用程序烧写在flash中的地址

2. ldr文件为烧写到flash中的文件格式,dxe为连接仿真器时声称的文件格式


我是OP...
等级:管理员 参考IP地址:*.*.*.*
2014/7/18 9:52:17
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
继续问:

谢谢回复,我将问题分段有几点不明白:

1. rom_boot应该为系统函数,实现函数跳转功能,将Address处的LDR文件加载到DSP中运行,加载后,DSP是不是类似重新配置了所有的初始化的东西?

2. 在生产应用程序的LDR文件时,是否需要特别设置(例如arm芯片需要设置中断向量表地址等设置)?这个LDR是不是类似bin文件,只要见LDR文件写入从Address开始的地址即可?


我是OP...
等级:管理员 参考IP地址:*.*.*.*
2014/7/18 9:53:11
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
继续答:

1. 是的,root_boot是将ADDRESS处的ldr加载运行,这要看具体需求,如果bootloader中已经做过了初始化的工作,自己的升级程序可以不再初始化,初始化的工作需要initialization file

2. ldr不需要特殊配置,中断向量表等都有默认配置值,也可以根据需要在程序中修改。只不过生成ldr时需要加入初始化外部ddr的dxe,和你的工程dxe一起组成ldr。是的,ldr是从你address指定的位置开始执行


我是OP...
等级:管理员 参考IP地址:*.*.*.*
2014/7/18 9:53:31
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
接着问:

双核跑的时候,怎么烧程序到spi flash呢?有没有双核跑时,bootloader 和 app应用程序双区分区,通过bootloder升级app程序的方法和实例?

我是OP...
等级:管理员 参考IP地址:*.*.*.*
2014/7/18 9:54:06
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
5信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
接着答:

对于双核工程使用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为例

  1. 把两个dxe文件及BF609_init_v00.dxe拷到elfloader所在目录下
  2. 在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


我是OP...
等级:管理员 参考IP地址:*.*.*.*
2014/7/18 9:54:27
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
6信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
最后问:

非常感谢你的详细回复,有三大疑问:

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是否有其他风险?



我是OP...
等级:管理员 参考IP地址:*.*.*.*
2014/7/18 9:55:25
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
7信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
最后答:

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上


我是OP...
等级:管理员 参考IP地址:*.*.*.*
2014/7/18 9:57:20
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
8信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
补充问:

谢谢回复,发现问题:(没有使用SDRAM)

1. 现在是想通过网络或串口将LDR文件对应的纯HEX格式文件写入到指定地址,再通过,rom_boot(Address,0, 0, 0, 0x20210002,0)来实现启动这个应用程序,是否可行。

2. 通过LdrViewer.EXE,可以将ldr文件保存为binary的格式,可以生成bin格式文件,试问:

  将此bin文件烧到flash的Address开始处,通过rom_boot是否可以启动这个应用程序?

3.rom_boot在那个文件中实现,或是要包含那个库文件?

4. 你的工程设置start address当我生成应用程序时(见附图打圈处),这个地址是否要设置成上面的Address?


上传的图片
  20147189583852.jpg [ 184.23 KB 1244×526 ] (缩略时请点击查看原图)

 


我是OP...
等级:管理员 参考IP地址:*.*.*.*
2014/7/18 9:58:41
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
9信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
补充答:

1. 可行。从网络或者串口将ldr存储在sdram然后再烧写到flash,通过rom boot启动

2. CCES可以直接生成bin格式的ldr,如你之前的截图中的boot format

3. #include <bfrom.h>

4. 不需要


我是OP...
等级:管理员 参考IP地址:*.*.*.*
2014/7/18 9:59:05
12
1
1/2
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.154042 Call, 1 Queries, Processed in 0.031250 second(s),