请问一下,有谁做过sys/bios下的多核工程固化吗?我按照不带sys/bios下的多核固化流程做,发现程序无法启动。
Thomas Yang1:
不好意思,没太明白,您提到的多核工程固化是什么意思?是多核BOOT吗?或者多核image生成?
user4780440:
回复 Thomas Yang1:
工程师,您好。是多核BOOT。我在仿真器debug模式下工程都是正常运行的,然后按照非bios多核boot流程进行操作,却无法正常boot,不知道是什么原因造成的。
user4780440:
回复 Thomas Yang1:
您好,我在主核的BIOS_start()语句之前加了一个multicore_boot函数,这个主要就是用来初始化外设和触发除主核外其他核去boot。
我的思想如下:
核0所有字段都放在L2SRAM和MSMCSRAM中。保证核0boot时不出出现问题,从而可以执行multicore_boot函数,当初始化完外设后,再去触发其他核去boot。但是现在的情况为,切换成spi boot模式后,所有核都起不来。
multicore_boot函数详细情况如下:
void MulticoreBoot(){
int *pBootMagicAddCore0; int *IpcGr0; platform_init_flags sFlags; platform_init_config sConfig; int pform_status;/* * You can choose what to initialize on the platform by setting the following * flags. We will initialize everything. */ memset( (void *) &sFlags, 0, sizeof(platform_init_flags)); memset( (void *) &sConfig, 0, sizeof(platform_init_config));
//初始化外设 sFlags.pll = 1; /* PLLs for clocking */ sFlags.ddr = 1; /* External memory */ sFlags.tcsl = 1; /* Time stamp counter */ sFlags.phy = 0; /* Ethernet */ sFlags.ecc = 1; /* Memory ECC */
sConfig.pllm = 0; /* Use libraries default clock divisor */ pform_status = platform_init(&sFlags, &sConfig);
//初始化外设成功后触发其他核去boot if (pform_status == Platform_EOK) {
/*write Boot Magic add of other cores and send IPC interrupt*/ pBootMagicAddCore0 = (int*)0x1087FFFC;
*(pBootMagicAddCore0+ (0x01000000*1)/4 ) =0x0c0b4ae0 ;
*(pBootMagicAddCore0+ (0x01000000*2)/4 ) =0x0c0e0c80 ;
*(pBootMagicAddCore0+ (0x01000000*3)/4 ) =0x0c13fa40;
*(pBootMagicAddCore0+ (0x01000000*4)/4 ) =0x0c1a0520 ;
*(pBootMagicAddCore0+ (0x01000000*5)/4 ) =0x0c2004e0 ;
*(pBootMagicAddCore0+ (0x01000000*6)/4 ) =0x0c2cce40 ;
*(pBootMagicAddCore0+ (0x01000000*7)/4 ) =0x1785b2a0 ;
IpcGr0 = (int*)0x02620240; /*warning:when running on no-boot mode,core0~core7 must all be connected to the target*/ *(IpcGr0+1) = (*(IpcGr0+1)) | 0x00000001; *(IpcGr0+2) = (*(IpcGr0+2)) | 0x00000001; *(IpcGr0+3) = (*(IpcGr0+3)) | 0x00000001; *(IpcGr0+4) = (*(IpcGr0+4)) | 0x00000001; *(IpcGr0+5) = (*(IpcGr0+5)) | 0x00000001; *(IpcGr0+6) = (*(IpcGr0+6)) | 0x00000001; *(IpcGr0+7) = (*(IpcGr0+7)) | 0x00000001; }
}
Thomas Yang1:
回复 user4780440:
CORE0也没有正常启动?那要检查下BOOT PARAMETER配置了,看SPI接口是否正常