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

C6670 多核Boot的问题

大家好,

环境:C6670, CCSv5.3, SYS/BIOSv6.33.6.50, XDCToolsv3.23.4.60

我在代码中添加如下代码,

void MulticoreBoot(UInt32 Core1_main_addr, UInt32 Core2_main_addr, UInt32 Core3_main_addr)
{int *pBootMagicAddCore0;int *IpcGr0;int i;int coreId = 0;int *bootMagicAddress;Uint32 c_int00_address = 0x0;coreId = DNUM;pBootMagicAddCore0 = (int *)0x108FFFFC;c_int00_address = (*pBootMagicAddCore0);

	if(coreId == 0)
	{
		bootMagicAddress = (int *)0x118FFFFC;
		*bootMagicAddress = Core1_main_addr;IpcGr0  = (int*)0x02620244;*(IpcGr0) = (*(IpcGr0)) | 0x00000001;
	}
	else if(coreId == 1)
	{
		bootMagicAddress = (int *)0x128FFFFC;
		*bootMagicAddress = Core2_main_addr;IpcGr0  = (int*)0x02620248;*(IpcGr0) = (*(IpcGr0)) | 0x00000001;
	}
	else if(coreId == 2)
	{
		bootMagicAddress = (int *)0x138FFFFC;
		*bootMagicAddress = Core3_main_addr;IpcGr0  = (int*)0x0262024C;*(IpcGr0) = (*(IpcGr0)) | 0x00000001;
	}
}

拟实现Core0写Core1的MagicAddress,再给Core1发IPC,从而启Core1;Core1启Core2;Core2启Core3。

遇到的问题是:

1. Core0从main函数开始执行,执行到这段代码后又跳到main函数开头从头执行;而不是向下执行,启动Core1。这是为什么呢?

2. 这段多核Boot代码在有的工程中正常,但是有个工程(Optimization Level改为3),添加这段代码后就出现了问题1。跟优化选项有关吗?优化level一般设为多少比较合适?还有这段Boot代码是放在一个Task中的,有影响吗?

Feng Lin6:

bootMagicAddress中应该写入_c_init00的值,而不是写入main函数的起始地址。

Feng Lin6:

你这个触发可以都放在core0来做

striker Qian:

核间同步最好采用别的方法,我觉得不应该在多核boot时假设时序。

Feng Jin:

回复 Feng Lin6:

你好!

pBootMagicAddCore0 = (int *)0x108FFFFC;c_int00_address = (*pBootMagicAddCore0);

这两句话其实没用,我后来注释了。

每个核的c_init地址从每个核工程的map文件中获的。

Feng Jin:

回复 Feng Lin6:

回头我试试在Core0上触发Core1~Core3,而不是现在这样Core0触发Core1,然后Core1触发Core2,最后Core2触发Core3.

Feng Jin:

回复 striker Qian:

你好!

其实这些代码我都是看了你的帖子后自己做一些修改的。感谢!!

我没有打算做核间同步,我只是想这样:Core0肯定还是上电自启的,然后Core0写Core1的MagicAddress,在发个中断(也叫IPC)给Core1,从而Core1启动;Core1启动后,再如此启动Core2;Core2启动Core3

不理解你说的“假设时序”是什么意思?

striker Qian:

回复 Feng Jin:

Feng jin,

我以为你打算用IPC来控制核的启动顺序。如果不是此目的的话,核0 kick off 其他核就ok了。

striker

Feng Jin:

回复 striker Qian:

我的问题已经定位:是我将代码段等放到了DDR3上导致的。

我在JTAG下,用官方EVM的GEL配置DDR3,代码段放到DDR3,跑程序没有问题。

但是在SPI Boot时,将DDR3配置参数放到bin文件中,代码段等Load到DDR3上,代码运行有问题。

现象就是程序跑几个小时就自动复位了(有测过运行9个小时后,DSP的Core3被复位,代码又从main执行)。

SPI Boot后我看DDR3 write leveling过了,且DDR3中有代码,我SRIO写DDR3数据都没问题,但是程序长时间运行就有问题了。

我将代码段等放到L2上就没有问题了。

目前怀疑是:RBL利用DDR3 parameter table配置DDR3有误,还在测试。

jun shao1:

回复 Feng Jin:

Feng Jin 

你好,请问你做SPI多核boot,是否使用了IBL引导,还是直接从SPI启动多核的?能否看一下相关的例程,目前我正在做这方面的工作,谢谢!

赞(0)
未经允许不得转载:TI中文支持网 » C6670 多核Boot的问题
分享到: 更多 (0)