打印

C6678 bootload过程

[复制链接]
1111|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Violin11|  楼主 | 2017-11-6 10:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6678 bootload过程


Q:我想知道C6678在上电的时候如何将8个核的.ou文件加载到每个核?
A:boot的时候默认core0是主核,其余是从核。
       Boot过程都是先启动主核,然后主核再一一将其余核的数据和代码加载,并启动从核。
       这在bootload手册上有详细的说明。请参考!

Q:8个核的的.out文件在烧写到flash前,是否会先合并成一个.out文件?如果是,core0 boot 时,是否会将合并成的.out文件全部一次性的加载到core0内,然后再将其他核的代码和数据分别分发给其他的核? 如果是,c6678的bootload.asm和其他单核型号的DSP(比如C6455)的bootload.asm是否是一样的?
A:这个与用户的具体实现相关。
       所有out文件可以一次性烧到flash里面,然后加载;也可也只加载core0的out文件,然后启动core0后再通过主机与core0交互(主机将其余out文件信息发送给core0)完成对其余核out文件的加载。
       bootload的代码应该基本是类似的,可能由于增加boot方式而增加了部分代码,但主体功能相同。

Q:我现在是想从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。
非常感谢!
A:问题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的手册中没有找到,我还在询问其他同事,等到确定后我再给您答复,很抱歉!
谢谢!

Q:单核boot table表的格式:c_int00地址,第一个段的大小,第一个段的地址;第二个段的大小,第二个段的地址。。。
       按照您的说法:由于多个table的物理地址不同,多增加核只是增加table中对其他core的地址的赋值。合并后的table 也就是将8个核的table分别存放到了不同的物理地址吗? 如果是,2级bootload程序最后跳转到的c_int00地址是哪个核的c_int00地址?
A:首先,各个核的内存应该是不重叠的,这样就能把所有table叠加在一起;
       其次,bootload都是在core0上执行的,所以跳转地址应该是core0的地址,然后通过core0将其余core触发。触发的方法就是可以是写其余core的MAGIC_ADDRESS,也可以通过IPC发送核间中断触发。

Q:bootload将所有核的程序数据加载到各自核内后,core0是先写其他核的MAGIC_ADDRESS地址,让其他核先执行,然后在跳转到C_int00;还是先跳转到c_int00,进入main函数,再写其他核的MAGIC_ADDRESS地址触发其他核执行?这两种方式会导致每个核不是同一时刻启动。
A:如果核0链接的是TI编译器的默认入口,就需要到main函数才可用起动别的核。
       也可用将编译器入口源码boot.asm加入工程,修改从入口开始的汇编代码提前启动别的核。

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

717

主题

1010

帖子

3

粉丝