TI中文支持网
TI专业的中文技术问题搜集分享网站

C6678如何使用IBL NOR BOOT进行多核启动???

1.C6678 PG1.0,定制的板子,启动方式已经固定为从IBL进行NOR BOOT,现在的工作目标也是这种模式下进行8核的boot;

2.IBL经过修改以适用定制的板子,具体为:

C:\ti\tools\boot_loader\ibl\src\device\c66x\c66xinit.c  353行插入

bm_lo = 0x0B;
bm_hi = 0x08;

C:\ti\tools\boot_loader\ibl\src\util\iblConfig\src\device.c   738行处

ibl.pllConfig[ibl_DDR_PLL].mult = 20;
ibl.pllConfig[ibl_DDR_PLL].pllOutFreqMhz = 1333;

替换为

ibl.pllConfig[ibl_DDR_PLL].mult = 13;
ibl.pllConfig[ibl_DDR_PLL].pllOutFreqMhz = 1300;

3.程序进行8核仿真运行没有问题,共用工程,.CMD不同,所有SECTIONS全置于DDR3中,8核各自分配64M,共512M DDR3;

4.每个单核的ELF格式.out文件改成.bin使用官方工具norwriter可上电启动程序且运行正常;

5.根据找到的许多教程与例子,使用工具链将.out转化为.dat文件后,使用norwriter写入后断电重启无法启动程序,IBL启动后不停快速输出“IBL: Booting from NOR”;

6.尝试i2cConfig.gel中的

ibl.bootModes[0].u.norBoot.bootFormat = ibl_BOOT_FORMAT_ELF;

修改为

ibl.bootModes[0].u.norBoot.bootFormat = ibl_BOOT_FORMAT_BTBL;

使用i2cparam_0x51_c6678_le_0x500.out写入后,

再次上电启动后,串口输出以下信息后不在继续显示其他信息:

IBL version: 1.0.0.16
IBL: PLL and DDR Initialization Complete
IBL Result code 01
IBL: Booting from NOR

连接仿真器后手动PC跳转到_c_int00为空;

7.CCS5.5,mcsdk_2_01_02_06

使用的工具链为striker striker 帖子里下载的,.RMD里为

-a
-boot
-e _c_int00
-order L
-map SPIBOOT0.map
ROMS
{
ROM1: org = 0x0880, length = 0x2000000, memwidth = 32, romwidth = 32
files = { simple0.btbl }
}

请各位高手专家指教,已经折腾一周多了还没搞定

Allen35065:

IBL目前只支持小端的ELF文件格式启动,BTBL格式不能启动。

GuoFei Tang:

回复 Allen35065:

谢谢解答,现在自己用的板子已经修改成RBL  SPI NOR FLASH启动了,但是由于工程中除了.text和.stack都需要放在DDR3,所以一直跑不起来。

之前一直在开发板上进行实验,直接用的 striker提供的工具链,可以成功运行。

http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/8065.aspx?pi2132219853=1

里面增加了添加DDR table的步骤,现在在自己的板子上无法使用了,应该是DDR初始化失败了,请问该插入的DDR table该如何修改才能匹配自己板子。

按照帖子里提供的DDR table 计算常用工具:8713.ddr_cal_tool.zip

开发板上的芯片是K4B2G1646C (1333),自己板子上应该是K4B1G1646G (1333), striker提供的AddDDrTable工具插入的内容如下

#ifdef TMS320C6678const unsigned char ddrtable[120]={ 0x00, 0x00, 0x00, 0x70, 0x00, 0x87, 0x35, 0x00, 0x02, 0x42, 0x80, 0xF5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x02, 0x63, 0x06, 0x2A, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x50, 0x11, 0x13, 0x78, 0x3C, 0x30, 0x71, 0x7F, 0xE3, 0x55, 0x9F, 0x86, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x07, 0x32, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x05};#endif

请问该如何修改或者去该参考哪个相应的例程和文档。

Allen35065:

回复 GuoFei Tang:

初始化DDR3的思路,就是在Boot table里加入一段写DDR3寄存器的段,boot table的组织形式是这样的:

Cint00入口地址 4byte

第一段

长度 4byte   0xaabbccdd

地址 4byte   0xwwxxyyzz

数据 nbyte   0x….

………

第N段

长度 4byte   0xaabbccdd

地址 4byte   0xwwxxyyzz

数据 nbyte   0x….

结尾(实际是一个长度为0的段)

0x00000000

所以,需要写寄存器的时候,只需要在最前面加上需要写的寄存器的长度(4的倍数),起始地址,写的值,就可以了。

GuoFei Tang:

回复 Allen35065:

Allen Yin,

上面提到的AddDDRtable加入的部分是插入在第一段的地址后的,

Cint00入口地址 4byte

第一段

长度 4byte   0xaabbccdd

地址 4byte   0xwwxxyyzz

AddDDRtable[120]

数据 nbyte   0x….

请问你说的方法,是只需要在文件最前面写吗,例如我需要初始化0x80000000,长度0x20000000的DDR3, 能给个格式的例子吗?

Allen35065:

回复 GuoFei Tang:

0x80000000是DDR3的数据部分,初始化数据部分可以在main函数里做。

我说的是如果因为某些代码段需要放到DDR3里的话需要在main函数启动之前先启动DDR3控制器寄存器的操作。

GuoFei Tang:

回复 Allen35065:

嗯,现在明白了,其实上面那么多字段都是对DDR configuration寄存器的设置是吧,因为在开发板上工程已经可以正常运行了。现在我需要做的,就是根据自己板子的实际情况,更改DDR configuration寄存器的值,应该就能直接用了吧。工程在开发板上已经没其他问题了。

赞(0)
未经允许不得转载:TI中文支持网 » C6678如何使用IBL NOR BOOT进行多核启动???
分享到: 更多 (0)