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.
借用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中都能通过,所以配置参数的问题也不大。请帮忙看看如何定位。
你好, Allen Yin
我遇到与楼主同样的问题,其中有以下疑问请帮忙解答一下:
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?