我在TMS320C6678上采用PCIe boot模式加载的多核程序每个核可以正常运行,然后对DSP就行localReset,重新加载程序,发现只有core0可以正常运行新程序,其他core1-7并没有正常运行起来。连接仿真器查看各核的boot magic地址,发现在进行local reset之后,只有core0的boot magic地址的值为0,core3和core4的boot magic地址的值偶尔会是0,其他几个core的的boot magic地址的值都没变化,这是什么原因呢?
Shine:
请问有参考SDK里的pcieboot的例程吗?
C:\ti\mcsdk_2_01_02_06\tools\boot_loader\examples\pcie\
Docs folder: section 9.6 explainsHow DSP local reset example works
Linux code: \linux_host_loader\pciedemo.c#ifdef LOCAL_RESETplease check function dspLocalReset().
DSP code: pcieboot_localreset\src\pcieboot_localreset.c
Bess:
回复 Shine:
是的,就是参考这个例程的
Shine:
回复 Bess:
请问有对程序进行改动吗?
Bess:
回复 Shine:
没有改动
Shine:
回复 Bess:
板子是EVM板还是自己的板子?
Bess:
回复 Shine:
使用创龙的开发板
Shine:
回复 Bess:
请看一下不工作的核停在哪里?在Linux host side,pciedemo.c代码:
for (i = 0; i < 8; i++) {
pushData(localResetCode, i, &bootEntryAddr);
if (setBootAddrIpcgr(i, bootEntryAddr) == 0) {
printk("Core %d is not ready !!! \n", i);
}
}在boot失败后,用JTAG看一下每个L2 memory里是否有localresetcode?看一下PCIE有没有成功地把代码加载到每个核。然后看一下DSP_BOOT_ADDR (0x2620040+4*n),是否写了start address? 如果是的话,DSP应该会从那里开始执行(_c_int00)。
如果DSP核不能运行程序的话,PC指针指在哪里?可以通过查看map文件来检查跑到哪里了?
Bess:
回复 Shine:
DSP_BOOT_ADDR (0x2620040+4*n) 的值有些是在(_c_int00)的地址,有些是0x20B00001
Bess:
回复 Shine:
谢谢,问题解决了,要在写_c_int00地址的时候再读一下,就正常了,如果不读的话就不正常