TI中文支持网
TI专业的中文技术问题搜集分享网站

PCIE boot代码成功后运行CSL函数失败,而用仿真器正常

       我在使用C6638 DSP,使用PCIE Boot方式加载代码,测试代码是很简单的RTSC工程。LOG显示Boot时八个核都正确的进入了main(),但是core4~core7却卡在了一个CSL函数,无法继续执行,而core0~core3可以正确执行。这个函数是CSL_chipReadReg (CSL_CHIP_DNUM),用于获取核号,如果使用仿真器则没有这个问题。如果相同代码不带BIOS(即纯CCS代码)也没有问题。

       各core使用独立的内存,用的是相对地址,代码段在DDR3,堆栈段在L2SRAM,如下:

core0:L2SRAM: 0x1080000,length:0x00010000 DDR3:0x60000000,length :0x00100000
core1:L2SRAM: 0x1180000,length:0x00010000 DDR3:0x60100000,length :0x00100000

core7:L2SRAM: 0x1780000,length:0x00010000 DDR3:0x60700000,length :0x00100000

现在找不到原因,特来请教,多谢指点

Allen35065:

BIOS的配置里也有内存分段的配置,你检查一下看有没有重叠的部分

user_haike:

回复 Allen35065:

你好,

BIOS的内存分段没有重叠,如下:

L1DSRAM 00600000 00008000 00000000 00008000 RW L1PSRAM 00700000 00008000 00000000 00008000 RW X L2SRAM_A 00800000 00010000 00000008 0000fff8 RW X DDR3_CODE0 60000000 00100000 000118d6 000ee72a RW X DDR3_CODE1 60100000 00100000 00000000 00100000 RW X DDR3_CODE2 60200000 00100000 00000000 00100000 RW X DDR3_CODE3 60300000 00100000 00000000 00100000 RW X DDR3_CODE4 60400000 00100000 00000000 00100000 RW X DDR3_CODE5 60500000 00100000 00000000 00100000 RW X DDR3_CODE6 60600000 00100000 00000000 00100000 RW X DDR3_CODE7 60700000 00100000 00000000 00100000 RW X

各core定义自己的L2SRAM空间,如下:

core0 :L2SRAM 10812000 00030000 

core1:L2SRAM 11812000 00030000 

core7:L2SRAM 17812000 00030000 

且各core使用各自的DDR空间,如下(以core0为例):

Program.sectMap[".text"] = "DDR3_CODE0";Program.sectMap[".cinit"] = "DDR3_CODE0";

Program.sectMap[".stack"] = "DDR3_CODE0";Program.sectMap[".switch"] = "L2SRAM";Program.sectMap[".bss"] = "L2SRAM";Program.sectMap[".neardata"] = "L2SRAM";Program.sectMap[".rodata"] = "L2SRAM";Program.sectMap[".cio"] = "L2SRAM";

Program.sectMap[".vecs"] = "L2SRAM";Program.sectMap[".csl_vect"] = "L2SRAM";Program.sectMap[".systemHeap"] = "L2SRAM";Program.sectMap[".bcpDesc"] = "L2SRAM";Program.sectMap[".fftcDesc"] = "L2SRAM";

Program.sectMap[".const"] = "DDR3_CODE0";Program.sectMap[".fardata"] = "L2SRAM";Program.sectMap[".far"] = "L2SRAM";

附件为core0和core4的map文件,请帮忙查看下。

Allen35065:

回复 user_haike:

.sysmem分配的地址是局部地址,如果是PCIE boot需要把这个地址分配到全局地址上,外部boot时局部地址不能出现在内存分配表里。

user_haike:

回复 Allen35065:

你好,

在各工程.cfg文件中添加语句“Program.sectMap[".sysmem"]       = "L2SRAM";”,将.sysmem段分配在各core独立的L2SRAM空间中。但是,现象相同,core4~core7卡在一个CSL函数,core0~core3正确执行。

附件是我们的测试工程,对应八核,由于Platform文件设置路径为“E:\test_load\packages”,所以工程需放至“E:\test_load”目录下。请帮忙分析下原因。

PS:有没有一个PCIE boot通过的工程供我们参考下。

多谢。

Allen35065:

回复 user_haike:

改完地址以后,JTAG下载运行8个核有没有问题?

PCIE boot如果不运行8个核,运行5个核,会不会有问题?

user_haike:

回复 Allen35065:

Hi,

1. 改完地址之后,JTAG下载运行8个核没有问题;

2. PCIE下运行5个核还是会有问题,core4卡在CSL函数,core0~core3运行正常;

3. 我们尝试过只加载core0以及core4~core7,问题现象相同。(core0触发其他核运行) 

4. 有没有一份PCIE BOOT模式通过的带BIOS的工程供我们参考下?

多谢。

Allen35065:

回复 user_haike:

没有这样的例子;

你的boot magic address是在哪里写进去的?

user_haike:

回复 Allen35065:

你好:

        我们是仿照MCSDK的例程,在PC端将BAR1的地址映射到L2,将_c_int00的地址写到各个核的。

Allen35065:

回复 user_haike:

你在boot失败以后把后面四个核PC指针的地址查看一下,也可以连上JTAG单步调试看看汇编有没有问题。

user_haike:

回复 Allen35065:

core4,core5,core7连不上仿真器,core6连上仿真器,加载symbols( “test_load6.out”)文件之后,查看PC指针,如附件图片所示。

单步调式,汇编指针在"ti_sysbios_family_c64p_Hwi_int0() "(地址0x16814800 ~ 0x1681481C)内循环,如附件图片所示。

PS: 关于连不上仿真器问题,每次现象不固定出现在core4~core7的哪个核。

赞(0)
未经允许不得转载:TI中文支持网 » PCIE boot代码成功后运行CSL函数失败,而用仿真器正常
分享到: 更多 (0)