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.

spi多核启动模式的DDR table如何配置

硬件平台:C6678

开发板:别的公司做的板子

情况说明:我们在评估板上使用SPI的方式可以完成多核的启动,别的公司板子无法启动。别的公司板子的gel文件只是在评估板的gel文件中对841行的PLLM_DDR进行了修改,将原来的19改为12。所以我们认为别的公司做的板子和评估板就只有这点差别。

我们在使用SPI启动评估板的多核时,的DDR table设置为:

00 00 00 70 //???
00 87 35 00 //where to load ddr table to L2
02 42 80 F5 //config select
00 00 00 00 //pll Prediv
00 00 00 1C //pll Mul
00 00 00 02 //pll post div
63 06 2A 32 //sd ram config
00 00 00 00 //sdram config 2
00 00 14 50 //sdram fresh cntrl
11 13 78 3C //sdram timing 1
30 71 7F E3 //sdram timing 2
55 9F 86 AF //sdram timing 3
00 00 00 00
00 00 00 00
00 00 00 00
00 01 00 00 //perform count config
00 00 00 00
00 00 00 00
00 00 00 00
70 07 32 14 //sdRamoutImpedCalcfg
00 00 00 00
00 10 01 0F //ddr phy control1
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
10 00 00 00 //ecc cntrl
00 00 00 00
00 00 00 00
00 00 03 05//rdWrtExcThresh


此DDR table可以完成ddr初始化,可以进行多核的启动。其中00 00 00 1C //pll Mul设置为1C,请问这个1C从何而来。如果我向启动别的公司做的板子,那么我此项应该如何更改?

  • 00 00 00 1C //pll Mul设置为1C 这个参数是根据DDR输入参考时钟来配置DDR工作频率的,DDR时钟的配置计算公式参考PLL user guide。

    DDR config table各字段参考如下结构体:

    typedef struct bootEmif4Tbl_s {

    UINT32 configSelect; /* Bit map defining which registers to set */

    UINT32 pllPrediv; /* Values of all 0s will disable the pll */
    UINT32 pllMult;
    UINT32 pllPostDiv;

    UINT32 sdRamConfig;
    UINT32 sdRamConfig2;
    UINT32 sdRamRefreshCtl;
    UINT32 sdRamTiming1;
    UINT32 sdRamTiming2;
    UINT32 sdRamTiming3;
    UINT32 lpDdrNvmTiming;
    UINT32 powerManageCtl;
    UINT32 iODFTTestLogic;
    UINT32 performCountCfg;
    UINT32 performCountMstRegSel;
    UINT32 readIdleCtl;
    UINT32 sysVbusmIntEnSet;
    UINT32 sdRamOutImpdedCalCfg;
    UINT32 tempAlterCfg;
    UINT32 ddrPhyCtl1;
    UINT32 ddrPhyCtl2;
    UINT32 priClassSvceMap;
    UINT32 mstId2ClsSvce1Map;
    UINT32 mstId2ClsSvce2Map;
    UINT32 eccCtl;
    UINT32 eccRange1;
    UINT32 eccRange2;
    UINT32 rdWrtExcThresh;

    } BOOT_EMIF4_TBL_T;

  • UINT32 pllPrediv; /* Values of all 0s will disable the pll */
    UINT32 pllMult;
    UINT32 pllPostDiv;

    这里的参数为什么是三个?协作单位的板子将c6678评估板的gel文件进行了修改,只是将ddr初始化的mult参数由19改为12,那我对应的这三个参数应该改为什么?谢谢。

  • 我这边要是将程序的代码断和数据段放在L2,8个核心就都可以启动,但是如果将数据段放在DDR中,一个都没有办法启动,这点应该可以确定,我ddr的这个表没有设置正确。我看关于频率的技术公式中,只有两个变量,plldiv和pllmult,但是在这里我就没有闹明白,div怎么就分了两个,这两个是如何组合的吗?

  • 现在也遇到这个问题,现在不用DDR参数表的情况下都是通过二次引导实现DDR初始化,如果参数表可以自行配置,一次引导就行了。还有一个问题,一次引导程序大小有没有什么限制,还望ANDY解答。