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.

sys/bios下的多核工程固化

请问一下,有谁做过sys/bios下的多核工程固化吗?我按照不带sys/bios下的多核固化流程做,发现程序无法启动。

  • 不好意思,没太明白,您提到的多核工程固化是什么意思?是多核BOOT吗?或者多核image生成?

  • 工程师,您好。是多核BOOT。我在仿真器debug模式下工程都是正常运行的,然后按照非bios多核boot流程进行操作,却无法正常boot,不知道是什么原因造成的。

  • 您好,我在主核的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;
         }
    }
  • CORE0也没有正常启动?那要检查下BOOT PARAMETER配置了,看SPI接口是否正常

  • 工程师您好,发现BOOT PARAMETER正确配置了,SPI接口也是正常的。最后发现是_c_int00地址的问题。