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.

C6678 bootload过程

您好:

我想知道c6678在上电的时候如何将8个核的.ou文件加载到每个核?

谢谢

  • si cheng您好:

    boot的时候默认core0是主核,其余是从核。

    Boot过程都是先启动主核,然后主核再一一将其余核的数据和代码加载,并启动从核。

    这在bootload手册上有详细的说明。请参考!

  • 8个核的的.out文件在烧写到flash前,是否会先合并成一个.out文件?如果是,core0 boot 时,是否会将合并成的.out文件全部一次性的加载到core0内,然后再将其他核的代码和数据分别分发给其他的核? 如果是,c6678的bootload.asm和其他单核型号的DSP(比如C6455)的bootload.asm是否是一样的?

  • 这个与用户的具体实现相关。

    所有out文件可以一次性烧到flash里面,然后加载;也可也只加载core0的out文件,然后启动core0后再通过主机与core0交互(主机将其余out文件信息发送给core0)完成对其余核out文件的加载。

    bootload的代码应该基本是类似的,可能由于增加boot方式而增加了部分代码,但主体功能相同。

  • King Wang,您好:

    我现在是想从flash启动,有以下几个问题:

    1.您说的所有的out文件是指8个核的out文件合并后的out文件还是分别将每个核的out文件烧写到flash?

    2.合并后的out文件的table格式是原来的单核的那种格式还是将8个out文件的table格式合并成一个了?

    3.您说的只加载core0的out文件,然后启动core0后再通过主机与core0交互。您这里的主机是指什么?如果先加载core0,其他的核的启动信息存放在哪?

    4.二级加载时,C6678 启动的时候,DMA控制器会去flash的起始地址拷贝多少的启动程序?c6455是1KB。

    非常感谢!

  • 您好:

    好多天了,怎么还没人回复啊?

  • si cheng:

    您好,很抱歉这么久才回复。

    问题1和2是同一个问题:每一个out文件可以对应一个boot table,多核的多个boot table可以合成到一起(但是在cmd文件里面需要写物理地址)。这种合并的table还是一个table,你可以理解由于多个table的物理地址不同,多增加核只是增加table中对其他core的地址的赋值。

    问题3:主机是指可以跟DSP通信的东西,比如Ethernet boot,需要主机向DSP发送Ethernet packet,SRIO boot时也需要主机向DSP发送SRIO packet. 先加载Core0,其他信息可以保存在主机里面。等到core0起来之后,可以通过正常通信的方法加载。

    问题4:我在C6678的手册中没有找到,我还在询问其他同事,等到确定后我再给您答复,很抱歉!

    谢谢!

  • King Wang ,您好:

    单核boot table表的格式:c_int00地址,第一个段的大小,第一个段的地址;第二个段的大小,第二个段的地址。。。

    按照您的说法:由于多个table的物理地址不同,多增加核只是增加table中对其他core的地址的赋值。合并后的table 也就是将8个核的table分别存放到了不同的物理地址吗? 如果是,2级bootload程序最后跳转到的c_int00地址是哪个核的c_int00地址?

    谢谢!

  • si cheng:

    首先,各个核的内存应该是不重叠的,这样就能把所有table叠加在一起;

    其次,bootload都是在core0上执行的,所以跳转地址应该是core0的地址,然后通过core0将其余core触发。触发的方法就是可以是写其余core的MAGIC_ADDRESS,也可以通过IPC发送核间中断触发。

    谢谢!

  • King Wang ,您好:

    bootload将所有核的程序数据加载到各自核内后,core0是先写其他核的MAGIC_ADDRESS地址,让其他核先执行,然后在跳转到C_int00;还是先跳转到c_int00,进入main函数,再写其他核的MAGIC_ADDRESS地址触发其他核执行?这两种方式会导致每个核不是同一时刻启动。

    谢谢!

  • si cheng,

    如果核0链接的是TI编译器的默认入口,就需要到main函数才可用起动别的核。

    也可用将编译器入口源码boot.asm加入工程,修改从入口开始的汇编代码提前启动别的核。

    你的理解没有问题,两种方法起动其他核时间稍有不同。

  • 问下,c_int00地址和BOOT MAGIC ADDRESS有什么区别和联系?

  • 您好,

    C_int00是应用程序执行入口;BOOT_MAGIC_ADDRESS是存储c_int00地址值的地方,一旦程序加载完毕之后,需要向BOOT_MAGIC_ADDRESS写入c_int00的值,触发core从该地址开始执行。

  • 您好,boot_magic_address 中存储的是应用程序的地址。比如boot的过程中需要将程序加载在L2

     RAM中,请问,一般是从L2RAM开始的吗,如果不是,C6678_ROM_PG1代码中,在local reset过程中,开始执行应用程序的地址分别从L2RAM,MSMC和DDR3的首地址开始,这个如何解释,谢谢您。

  • 大家好,

    我最近在尝试C6678的多核多工程烧写(core0、core1各一个工程,core2-7一个工程),采用二次引导。这个过程有两个问题:

    1、多核烧写时,core1-7的程序由core0进行DMA搬移,目前是在各个核的L2上操作,即core0 boot后,将其他核的程序搬移到对应核的L2。这样一来,这些L2还能在应用程序里使用吗?目前至少需要用L2存放接收到的数据(基本用400KB左右),用于算法处理。尝试过,貌似不可以。

    2、Boot时,core1-7核的搬移在secondbootspi工程里做还是在Core0的应用程序里做好?当前在secondbootspi工程里做过小程序测试,能启动正常。

    另外,多工程的多核烧写,哪里有具体的资料不?目前感觉资料很乱啊。

    谢谢。