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

SPI BOOT DDR table疑问

借用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个配置,不知道是否还有其他需要配置的地方?

Ruilian Z:

问题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。是否还有哪些参数需要注意?

Ruilian Z:

回复 Ruilian Z:

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

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

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

#ifdef TMS320C6670const 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

Allen35065:

回复 Ruilian Z:

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

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

Ruilian Z:

回复 Allen35065:

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

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

Allen35065:

回复 Ruilian Z:

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

Ruilian Z:

回复 Allen35065:

Allen,你好

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

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

Ruilian Z:

回复 Ruilian Z:

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

Allen35065:

回复 Ruilian Z:

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

user_haike:

回复 Allen35065:

你好, 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值?

Allen35065:

回复 user_haike:

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

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

赞(0)
未经允许不得转载:TI中文支持网 » SPI BOOT DDR table疑问
分享到: 更多 (0)