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.

c6657多核加载启动



1、使用的是自己开发的板子,处理器是c6657,开发环境ccs5.3  ,实现EMIF16接口nand flash的多核程序启动加载。工具链使用的是在论坛上找到的nandwriter,烧写工程是nandwriter.out;

2、首先我试了单核的加载,上电后能够正确启动。查看工具链生成的烧写文件,发现文件的前面并没有boot参数表的内容,直接是_cint_00入口地址;没有boot参数表但是能够正确启动。

3、双核加载同样使用上面的工具链(nandwriter是一个单核镜像文件的工具链,修改成了双核工具链),上电后不能启动;文件依然没有参数表。

boot参数表是必须有的吗?如果是,但是为什么单核可以启动,双核不行?

boot参数表可以没有的话,镜像文件的格式应该是什么样的?

有可以提供的工具链或者烧写工程?

  • 双核加载的步骤

    1. 将两个boot table合并成一个,入口地址为核0的启动地址,核0和核1的boot table主体部分合并;

    2.将合并的table写入NAND;

    3. 启动,核0的流程里需要把核1的入口地址写入核1的MAGIC address(L2的最后一个word),然后给核1发一个IPC中断启动核1。

  • 多谢Allen Yin的回复!

    关于你的回答我有2个问题再请教你。

    1、你说的第2和第3步已操作过,我这里没有问题,就是你说的boot table是指boot parameter  table,还是两个核各自的镜像文件。如果你说的是指boot parameter  table,主体部分合并是不是指除过boot parameter  table外的部分合并。

    2、我之前的单核启动时的镜像文件是没有boot parameter  table的,但是能启动。我双核的镜像文件生成流程:先生成各自核的镜像文件(主核程序中开始时执行写入辅核的入口地址和IPC中断)——去掉辅核文件头的入口地址——将辅核文件复制到主核文件的后面——修改文件的长度参数,完成后将这个文件烧入flash,上电不能启动;还有个方法就是修改工具链,查看后发现生成的文件格式和手动操作的格式一样。上面我所生成的双核镜像文件试试没有boot parameter  table的,如果这个boot parameter  table是必须的,能否提供例子或者说明?

    谢谢!!!!

  • 1. 指的是boot table,不是parameter table

    2. 不需要boot parameter table,你需要去掉核0的最后的0x00000000结束符以及核1的入口地址,然后合并;如果还有问题,建议你连上JTAG看看PC指针在什么位置。

  •            谢谢你的回复,双核的烧写文件是去掉了核0的最后的0x00000000结束符以及核1的入口地址,然后合并的,并修改了文件长度参数。上电连上仿真器后,DEVSTAT 寄存器中的值是0x11807,状态是正常的,BOOTCOMPLETE寄存器的值是0x00000001,即核0已经正确加载了,PC指针指向的是0X00800000后的范围(LOCAL L2RAM),是不是把程序记载到了LOCAL L2RAM 而不是各自核的L2RAM?该怎么修改?


  • 一定要使用Global Address,你改一下两个核的cmd文件吧

  • 谢谢Allen Yin的回复!

    修改为Global Address是不是将核0 的中.cmd文件中L2RAM 

    MEMORY
    {
    L2SRAM (RWX) : org = 0x800000, len = 0x80000
    MSMCSRAM (RWX) : org = 0xc000000, len = 0x400000
    DDR3 : org = 0x80000000, len = 0x20000000
    }

    里面的L2SRAM:org = 0x800000修改为0x10800000,同样的方法修改核1为0x11800000。

    但是之前尝试直接修改linker.cmd文件,会出现内存分配错误,如果是按照上面的方法来修改为Global Address的话,怎么来修改.cmd文件的?求指教,不甚感激!

  • 你好,我将核0和核1的L2RAM 改为了全局地址0x10800000核 0x11800000,但是烧写进去后,上电还是不正常,只有核0的程序在正常运行。查看寄存器,还是只加载了核0,PC指针一直在核0的L2RAM。在核0的main程序开始时执行了写核1入口地址和给核1IPC中断的操作。请问哪里的问题呢?

    谢谢

  • 核1的段加载进去了吗,核1的入口地址是否是正确的全局地址?检查boot table核1的部分是否正确,如果已经加载到核1的内存里,则可能是入口地址或IPC中断不正确,也有可能核1已经跑了,但是跑飞了。这个需要调试。

  • du您好,

    我最近也在调boot,spi的,一直没成功,也一直没弄明白程序烧进flash重新上电后怎么再通过CCS看寄存器的值,可否赐教?

    谢谢

  • du您好,

    我最近也在调boot,spi的,一直没成功,也一直没弄明白程序烧进flash重新上电后怎么再通过CCS看寄存器的值,可否赐教?

    谢谢

  • 谢谢你,刚看了一下,核1的l2ram中有程序,应该是你说的其他问题了!但是上电后连上仿真器只能看到核0在运行,如果要调试核1,怎么切换到核1?

  • JTAG设置里面用6657,有两个dsp核,在debug窗口里连接核1就行了

  • 在连仿真器之前,要修改debug configuration里面的两个地方,打开debug configuration,在program选项中,勾选load symbol;在target选项中,左边第二个auto Run and launch Optin选项,在Auto Run Options下两个选项都不勾选。然后 debug,仿真器连上后,pc指针就会停在当前执行的指令处,然后就可以查看寄存器。如果要在线仿真,改回原来的设置就好。

  • 在连仿真器之前,要修改debug configuration里面的两个地方,打开debug configuration,在program选项中,勾选load symbol;在target选项中,左边第二个auto Run and launch Optin选项,在Auto Run Options下两个选项都不勾选。然后 debug,仿真器连上后,pc指针就会停在当前执行的指令处,然后就可以查看寄存器。如果要在线仿真,改回原来的设置就好。

  • 在连仿真器之前,要修改debug configuration里面的两个地方,打开debug configuration,在program选项中,勾选load symbol;在target选项中,左边第二个auto Run and launch Optin选项,在Auto Run Options下两个选项都不勾选。然后 debug,仿真器连上后,pc指针就会停在当前执行的指令处,然后就可以查看寄存器。如果要在线仿真,改回原来的设置就好。

  • 不好意思,我这里又出现一些奇怪的问题,现在核0的PC指向的是核0的L2,但是核1的PC指向了BOOT ROM ,辅核怎么跑去执行boot loader了?麻烦你了!

  • 不好意思,我这里又出现一些奇怪的问题,现在核0的PC指向的是核0的L2,但是核1的PC指向了BOOT ROM ,辅核怎么跑去执行boot loader了?麻烦你了!

  • 终于知道怎么看了,谢谢您!

  • Allen Yin

    你好,不好意思,我这里又出现一些奇怪的问题,查看后发现核1的L2中程序已经搬移进去了,现在核0的PC指向的是核0的L2,能正常跑起来,但是核1的PC指向了BOOT ROM ,辅核怎么跑去执行boot loader了?麻烦你了!

  • 两种可能,你需要实验排除一下

    1. 是magic address和IPC是否正确写入

    2. 是核1是否写入了错误代码,PC指针跑飞了

  • 谢谢你!

    核1的单步走时,发现PC一直在执行IDLE,如果修改核1PC指向核1入口地址后,断开仿真器,核1程序就能跑起来。说明问题就是入口地址或者IPC中断哪里错了。仔细查看后觉得我的magic address应该是没有错误的,只是IPC中断在写IPCGRx寄存器前还需要其他的操作吗,例如KICKx寄存器,或者相关的内部中断初始化核和主机中断初始化操作吗?不吝赐教!

  • 把你的main函数到发IPC的程序贴出来看看

  • 请问你用的什么工具链转换,可否告知!谢谢