This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于I2C启动多核启动的问题



平台:C6678

板子:公司做的板子。

问题描述:

我们的ccs工程,将数据段和堆栈段放在L2中,使用I2C的方式启动CORE0,然后我再core0的L2中的内容拷贝到其他core的L2中,然后在其他core的magic_addr中写入_c_int0的地址,然后发送ipc给core1~core7。按照这个流程,core1~core7应该从magic_addr指定的入口开始运行,但是发现core1~core7还是在0x20B0000的地址里面运行,并没有进入_c_int0入口。

请问上述的流程是不是有什么问题?

我的代码是这样的:

void mdspMulticoreBoot()
{
unsigned int *IPCGr0;
int i;
int coreID = 0;
char hello_total[50];
int len = 0;

/* 获取core ID */
coreID = platform_get_coreid();

if(coreID == 0)
{
/* 写其他core的BootMagic地址 */
for(i = 1;i < CORE_NUM_6678;i++)
{
memcpy((void*)(0x10800000 + 0x01000000 * i),(const void*)0x800000,0x7FFFC);
*(unsigned int *)(0x1087FFFC + 0x01000000 * i) = (unsigned int)_c_int00;
}

IPCGr0 = (unsigned int *)0x02620240;

/* core0 向其他core发送IPC中断 */
for(i = 1;i < CORE_NUM_6678;i++)
{
*(IPCGr0 + i) = (*(IPCGr0 + i)) | 0x00000001;
}
}
}

查看每个core的L2的内容,已经magic_addr的内容,都是正确的。

  • 自己顶,没有让帮我回答吗?

    我现在实验,如果将所有的段放在MSMRAM中,多核便可以进行启动,但是这样一来系统的就会出现问题,因为每个核会公用堆栈段和数据段。

    硬件工程师将DDR的输入时钟由评估板的66.66Mhz改为100Mhz,和评估板的差异仅限于此。难道有影响吗?

  • 专家们,我在北京出差,要是这个问题解决不了,我不知道还要在北京呆多久。帮帮忙找一下问题。刚才写错误了,MSMRAM应该是MSMCSRAM,就是4M的共享空间。

  • 怎么没人回答呢…………我最近用的EVM6678也是这个问题,做法和你的一样,但是我的在上电启动时core0可以正常运行,别的core在收到IPC中断后跑飞了,在core0里打印出别的core的magic addr地址是_c_int00的地址没有错,并且nand flash启动方式启动后连接上仿真器强制把core1-core7的PC指向0x1n87FFFC里的地址是可以正常运行的。不知道哪里出了错,希望专家解答一下…………。

  • 你这个是用spi nor flash 多核启动的?

    你确认_c_int0 地址是对的么?这个每个核编译出来的可能都不一样,具体可以查看map文件。之前我又一个同事就出过这样的问题


    不过貌似回复有点晚了~~