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 BOOT DDR table疑问

Other Parts Discussed in Thread: TMS320C6670

借用kloud的帖子,同样问题

修改AddDdrTable工具的配置。板子可以通过sdk测试,得出sdram config,sdram timing等寄存器值,并修改对应表中内容,生成新的工具并最终得到.dat文件。SPI引导后,BootMagic Address正确,但程序不能执行。

一些疑问:

1、ddrtable中

00 00 00 00 //pll Prediv 
00 00 00 1C //pll Mul 
00 00 00 02 //pll post div

这里对DDR PLL的配置我是否需要修改?DDR相关工程在线调试是可以的,用的gel文件是6678evm.gel,但是硬件上输入的DDR时钟我修改成50MHz,对应1066速率(66.67MHz的情形对应1333速率,DDR工作不正常,因此才选择降低输入频率)。此外,我通过这些PLL配置值,无法计算出1333/2=666.7的EVM默认时钟速率,不知道公式是什么?

2、目前就修改了sd ram config, sdram timing 1, sdram timing 2, sdram timing 3, sdram fresh cntrl 这5个配置,不知道是否还有其他需要配置的地方?

  • 问题1解决了,pll Mul = Pll_M+1,pll post div = 2*(1+PLL_D),PLL_M和PLL_D为DDR3PLLCTL0中定义值。

    问题2:

    现在测试板需要降频,原本输入50MHz,按照AddDdrTable等工具一系列配置,原始数据未更改00 00 00 1C //pll Mul     00 00 00 02 //pll post div,程序能boot起来,但是DDR时钟是错误的,跑到了1400。

    现在希望把频率降到1000,stk上验证了DDR3PLLCTL0、sd ram config, sdram timing 1, sdram timing 2, sdram timing 3, sdram fresh cntrl 等寄存器与stk上在线烧些值一致,但仍然无法boot。是否还有哪些参数需要注意?

  • 使用片子TCI6670,表里的参数对照成功运行工程的GEL文件进行了记录,之后再AddDdrTable中做了修改,代码依旧启动失败,此时用仿真器连接进入Memroy查看寄存器,可以看到值已修改。

    其余步骤都一模一样,仅更改了AddDdrTable工具程序就无法正常启动,参数是按照可在线运行程序修改的,以下部分参数文档中没有标明,请问是否漏了哪里?

    以下是AddDDrTable工具修改部分代码

    #ifdef TMS320C6670
    const unsigned char ddrtable[120]={
    0x00, 0x00, 0x00, 0x70,
    0x00, 0x8F, 0x35, 0x00,
    0x02, 0x42, 0x80, 0xF5, // config select
    0x00, 0x00, 0x00, 0x00, // pll Prediv
    0x00, 0x00, 0x00, 0x14, // pll Mul
    0x00, 0x00, 0x00, 0x02, // pll post div
    0x63, 0x06, 0x2A, 0x32, // sdram config
    0x00, 0x00, 0x00, 0x00, // sdram config2
    0x00, 0x00, 0x14, 0x50, // fresh cntrl
    0x11, 0x13, 0x78, 0x3C, // timing1
    0x30, 0x71, 0x7F, 0xE3, // timing2
    0x55, 0x9F, 0x86, 0xAF, // timing3
    0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00,
    0x00, 0x01, 0x00, 0x00, // perform count config
    0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00,
    0x70, 0x07, 0x32, 0x14, // sdRamoutImpedCalcfg
    0x00, 0x00, 0x00, 0x00,
    0x00, 0x10, 0x01, 0x0F, // ddr phy control1
    0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, // proClassSvce1Map
    0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, // ecc cntrl
    0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x03, 0x05 // rdWrtExcThresh
    };
    #endif

  • 启动失败的情况下,你可以连上JTAG,不要使用GEL,检查代码是否已经下载到内存中,需要对比boot table和内存里的内容。

    另外,检查PC指针在失败的情况下停留在何处。

  • 你好,内存读出boot table寄存器值与写入值一致。

    PC指向核0的代码初始位置(位于DDR3上),但是程序执行不了,说明DDR3启动不正常。可是参数都与可正常运行工程下的GEL文件一致。

  • 这很奇怪,如果DDR3上的代码段没有错误,PC又指向了入口地址,拿应该是能够正常执行的,你可以在仿真器下汇编单步往下走走,看是不是代码段有问题?

  • Allen,你好

    现在的情况是,同样的代码,同样的操作步骤,仅更改AddDdrTable的配置参数,DDR3处于1400时钟下正常,1300-1200程序可以短暂启动随后混乱,1100及其以下程序都无法启动。

    配置参数填入STK Memory测试例DDR3初始化中或者同一工程GEL中都能通过,所以配置参数的问题也不大。请帮忙看看如何定位。

  • 无法实现DDR3降频,工程实现需要,必须要进行DDR3降频

  • 从你的现象来看,似乎还是DDR3初始化有问题,所以读取的代码不正常。

  • 你好, 

    我遇到与楼主同样的问题,其中有以下疑问请帮忙解答一下:

    1. spi boot table中配置pll Mul = 0x1C,pll post div = 0x02,成功boot后,读出寄存器DDR3PLLCTL0(0x02620330)为0X0D0806C0,根据该寄存器的定义,

    读出PLLM为0X1B,即27,PLLD为0,那么根据Target Frequency (MHz) = input_clock (MHz) * [(PLL1_M + 1)]/ (2 * (PLL1_D + 1) ),输入时钟为66.67,如何得到1333MHz?

    2. spi boot mode时,DD?R boot table中并没有配置DDR leveling值,论坛上说会使用默认值并可能产生影响,但并没有说默认值在哪儿,请问默认值在哪里可以找到,并且DDR boot table中如何配置DDR leveling值?

  • 关于PLL参考http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/100597.aspx

    leveling无法再boot时候配置,所以一般要采用二次boot启动DDR之后再调回执行下一级boot。

  • 你好,有个着急的问题还请指教。我在6678评估板上测试edma3的代码。在使用edma3_drv_requestchannel(edma3handle,&channelid,&tccid,eventqid,&tcc_callback,NULL)函数时,如果,将&tcc_callback改为NULL参数时,所有edma3传输正确。但是当设置为&tcc_callback时,edma3传输结束后,总是无法跳转到改回调函数中。且程序一直处于运行状态。是不是我中断设置哪里缺少了什么?

  • 多谢回复,

    1. 关于PLL,我问的是DDR3 PLL值,计算DDR3时钟,你提供的参考是DSP主频配置,公式是相同的, Target Frequency (MHz) = input_clock (MHz) * [(PLL1_M + 1)]/ (2 * (PLL1_D + 1) ),

    问题是DDR3输入时钟为66.67,PLLM=0X1B,PLLD为0,得不到1333MHz?

    或者说,spi NOR BOOT下 ,DDR的输入时钟不是66.7MHz