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.
AM335x的DDR3 software leveling可以通过SD卡运行啦!
在AM335x的设计中,如果使用的是DDR3、DDR3L,是必须要进行software leveling的。其目的在于根据板卡的实际布线情况,通过leveling算法优化当前的DDR3的参数配置。而针对这套算法,之前我们提供的方式使用仿真器连接到板卡的JTAG口,修改GEL脚本进行初始化后,通过CCS工具将.out程序加载到AM335x上,执行参数优化算法。
对于板子上没有预留JTAG的情况就杯具了。
现在,通过将该算法移植到了bootloader中,也就是说可以直接将本贴中的MLO拷贝到SD卡FAT32分区中,使用SD卡启动AM335x,即可通过串口进行参数的输入,得到优化的参数配置!这样一来,就可以避免仿真器、JTAG、CCS、改GEL脚本等一系列复杂的操作啦!
大家可以下载使用,体验一下,欢迎给出宝贵的反馈意见!
PS:目前,我们可以支持303MHz和400MHz两个频率,串口0作为调试串口,具体的使用方法可以参考User Guide。
先睹为快:
结果:
另外,将这个MLO的前4个字节去掉就可以通过UART boot.
附上User Guide。能够执行software leveling算法的MLO在上楼中。
感谢您的关心!简而言之,为了保证DDR3的信号完整性,优化相关的读写时序参数,匹配不同板子因板材、layout走线、线宽等多种因素可能会造成的阻抗变化,所以要求,DDR3的设计,必须要进行Software Leveling,获得最适应于当前layout的DDR3 PHY读写参数。具体的介绍,您还可以参考:http://www.deyisupport.com/question_answer/dsp_arm/sitara_arm/f/25/t/17684.aspx
为何我运行的结果是全0x0??
Please input the AM335x EMIF Timing Configuration:
-- AM335x Default EMIF Timing configuration (for StarterKit EVM) --
DDR3_EMIF_SDRAM_TIM_1 : 0x0888A39B
DDR3_EMIF_SDRAM_TIM_2 : 0x26337FDA
DDR3_EMIF_SDRAM_TIM_3 : 0x501F830F
DDR3_EMIF_SDRAM_CONFIG : 0x61C04AB2
Your choice: 1. Use the default one; 2. Input your own one.
Please Choose The DDR3 Frequency: 1. 303MHz; 2. 400MHz.
DDR3 Frequency is Set at 400MHz!
Please input your DDR3_EMIF_SDRAM_TIM_1 conifguration (in Hex) :
0aAAD4DB
Please input your DDR3_EMIF_SDRAM_TIM_2 conifguration (in Hex) :
266B7FDA
Please input your DDR3_EMIF_SDRAM_TIM_3 conifguration (in Hex) :
501F867F
Please input your DDR3_EMIF_SDRAM_CONFIG conifguration (in Hex) :
61C05332
Your input EMIF Timing configuration --
DDR3_EMIF_SDRAM_TIM_1 : 0xAAAD4DB
DDR3_EMIF_SDRAM_TIM_2 : 0x266B7FDA
DDR3_EMIF_SDRAM_TIM_3 : 0x501F867F
DDR3_EMIF_SDRAM_CONFIG : 0x61C05332
Please Enter the PHY_INVERT_CLKOUT value (0 or 1) from the spreadsheet :
0
Please Enter the Seed RD_DQS_SLAVE_RATIO Value in Hex to search the RD DQS Ratio Window :
40
Please Enter the Seed FIFO_WE_SLAVE_RATIO Value in Hex to search the RD DQS Gate Window :
6D
Please Enter the Seed WR_DQS_SLAVE_RATIO Write DQS Ratio Value in Hex to search the Write DQS Ratio Window :
1
Please Enter the Seed PHY_CTRL_SLAVE_RATIO Value in Hex :
80
The ratio seeds for the DDR3 Software Leveling :
invert_clkout = 0x0
RD_DQS_RATIO_VAL = 0x40
FIFO_WE_SLAVE_RATIO = 0x6D
WR_DQS_SLAVE_RATIO = 0x1
PHY_CTRL_SLAVE_RATIO = 0x80
The Slave Ratio Search Program Values are...
***************************************************************
DATA_PHY_RD_DQS_SLAVE_RATIO is :0x0
DATA_PHY_FIFO_WE_SLAVE_RATIO is : 0x0
DATA_PHY_WR_DQS_SLAVE_RATIO is : 0x0
DATA_PHY_WR_DATA_SLAVE_RATIO is : 0x0
***************************************************************
rd_dqs_range = 0
fifo_we_range = 0
wr_dqs_range = 0
wr_data_range = 0
Optimal values have been found!!
***************************************************************
DATA_PHY_RD_DQS_SLAVE_RATIO is :0x0
DATA_PHY_FIFO_WE_SLAVE_RATIO is : 0x0
DATA_PHY_WR_DQS_SLAVE_RATIO is : 0x0
DATA_PHY_WR_DATA_SLAVE_RATIO is : 0x0
***************************************************************
===== END OF TEST =====
DDR3 software leveling done!
盼复!
全0代表着你的software leveling运算失败了,软件上请检查一下EMIF和PHY的配置;再就是排查一下可能的硬件问题,review一下原理图,或者换一块板子排除一下当前板子可能的焊接问题。
1)我在英蓓特的dev8600上进行同一实验,也是得到全0结果!当然对于需要输入的几个ratio seeds,我直接用的代码里现成的,但这应该没影响吧?
2)测试的上一块板子,利用同样配置(除那4个ratio定义是参考以前的)是可以运行到将操作系统image文件下载到SDRAM的。只是在下载完成后,在每次加载内核时,都会停在不同位置上。因此,DDR3的电路连接上应该不存在问题,但参数配置有可能不对,导致运行不稳定。对于现在的全0结果,在成熟的开发板上都有发生,有点不能理解。希望TI能给与更多提示!
3)另外我想问问,在配置EMIF_SDRAM_CONFIG时,reg_ddr_term和reg_dyn_odt这两个域应该如何确定?memory datasheet上也没有给出明确值啊!用的内层颗粒是美光的MT41K256M16-125E。
谢谢!盼复!
1.你的意思是说你使用的这个MLO中的默认配置进行的实验吗?这个默认的EMIF配置影响很大的!要看你使用的是DDR2、DDR3的型号,不同型号的配置是不一样的,不是通用的。这个代码中默认的配置是按照AM335x的StarterKit开发板进行的设置,DDR3型号:MT41J128M16JT-125
2.我觉得问题是你配置的EMIF和PHY的参数,是不是适用于你当前的板子的。一般来说,DDR的型号不同,就要检查EMIF的配置,layout的不同,就要用工具去计算DDR PHY的配置。
3. 这两个值是和DDR的datasheet有关的,是要算的,RZQ是确定值,但是终端匹配和ODT是你要根据手册来分给个合理的值。
在使用AM335x_DDR_register_calc_tool.xls 计算IS43TR16256A的timing时, datasheet里只有DDR3-1066MT/s DDR3-1333MT/s DDR3-1600MT/s DDR3-1866MT/s
这4种条件下的时序, 没有400MT/s和303MT/s的, 怎么破?
800MT/S 换成赫兹是否就是 400Mhz /s?
附件就是IS43TR16256的datasheet
am3352
ddr:
4GB-AS4C256M16D
这个是不是也要调?
我用的最新版的uboot
u-boot-2016.05+gitAUTOINC+6c5519b6fc-g6c5519b6fc
在u-boot目录执行:make CROSS_COMPILE=arm-linux-gnueabihf- O=am335x_evm am335x_evm_config all
然后编出来的mlo u-boot.img加载上去,串口一点打印都没有
我们的平台用的是AM3352 DDR3为 MT41K256M16HA-125IT:E
模式SD卡启动模式为 SYSBOOT[4:0] =11000b
时钟 24MHz
我们定制的系统正常运行,硬件平台应该没问题。
但是做了TF卡的MLO无反应,COM1并没有打印信息输出;
请问如何才能让MLO正常运行起来?
更换了一张TF卡,MLO可以跑起来了,但是发现检验的值都是0如下:
AM335x DDR3 Software Leveling -- Version: Beta 3.0
-- Copyright: Texas Instruments China Local Team
*************************** Program Start********************************
Please input the AM335x EMIF Timing Configuration:
-- AM335x Default EMIF Timing configuration (for StarterKit EVM) --
DDR3_EMIF_SDRAM_TIM_1 : 0x0888A39B
DDR3_EMIF_SDRAM_TIM_2 : 0x26337FDA
DDR3_EMIF_SDRAM_TIM_3 : 0x501F830F
DDR3_EMIF_SDRAM_CONFIG : 0x61C04AB2
Your choice: 1. Use the default one; 2. Input your own one.
Please Choose The DDR3 Frequency: 1. 303MHz; 2. 400MHz.
DDR3 Frequency is Set at 303MHz!
Please input your DDR3_EMIF_SDRAM_TIM_1 conifguration (in Hex) :
aaad4db
Please input your DDR3_EMIF_SDRAM_TIM_2 conifguration (in Hex) :
266b7fda
Please input your DDR3_EMIF_SDRAM_TIM_3 conifguration (in Hex) :
501f867f
Please input your DDR3_EMIF_SDRAM_CONFIG conifguration (in Hex) :
c30
Your input EMIF Timing configuration --
DDR3_EMIF_SDRAM_TIM_1 : 0xAAAD4DB
DDR3_EMIF_SDRAM_TIM_2 : 0x266B7FDA
DDR3_EMIF_SDRAM_TIM_3 : 0x501F867F
DDR3_EMIF_SDRAM_CONFIG : 0xC30
Please Enter the PHY_INVERT_CLKOUT value (0 or 1) from the spreadsheet :
0
Please Enter the Seed RD_DQS_SLAVE_RATIO Value in Hex to search the RD DQS Ratio Window :
38
Please Enter the Seed FIFO_WE_SLAVE_RATIO Value in Hex to search the RD DQS Gate Window :
94
Please Enter the Seed WR_DQS_SLAVE_RATIO Write DQS Ratio Value in Hex to search the Write DQS Ratio Window :
7d
Please Enter the Seed PHY_CTRL_SLAVE_RATIO Value in Hex :
80
The ratio seeds for the DDR3 Software Leveling :
invert_clkout = 0x0
RD_DQS_RATIO_VAL = 0x38
FIFO_WE_SLAVE_RATIO = 0x94
WR_DQS_SLAVE_RATIO = 0x7D
PHY_CTRL_SLAVE_RATIO = 0x80
The Slave Ratio Search Program Values are...
***************************************************************
DATA_PHY_RD_DQS_SLAVE_RATIO is :0x0
DATA_PHY_FIFO_WE_SLAVE_RATIO is : 0x0
DATA_PHY_WR_DQS_SLAVE_RATIO is : 0x0
DATA_PHY_WR_DATA_SLAVE_RATIO is : 0x0
***************************************************************
rd_dqs_range = 0
fifo_we_range = 0
wr_dqs_range = 0
wr_data_range = 0
Optimal values have been found!!
***************************************************************
DATA_PHY_RD_DQS_SLAVE_RATIO is :0x0
DATA_PHY_FIFO_WE_SLAVE_RATIO is : 0x0
DATA_PHY_WR_DQS_SLAVE_RATIO is : 0x0
DATA_PHY_WR_DATA_SLAVE_RATIO is : 0x0
***************************************************************
===== END OF TEST =====
DDR3 software leveling done!
以上的参数设置是我们现有系统配置的参数。DDR3 datasheet 详见附件。
请问这是什么原因?
hi steven,
我们现在检验值可以获取正常如下:
AM335x DDR3 Software Leveling -- Version: Beta 3.0
-- Copyright: Texas Instruments China Local Team
*************************** Program Start********************************
Please input the AM335x EMIF Timing Configuration:
-- AM335x Default EMIF Timing configuration (for StarterKit EVM) --
DDR3_EMIF_SDRAM_TIM_1 : 0x0888A39B
DDR3_EMIF_SDRAM_TIM_2 : 0x26337FDA
DDR3_EMIF_SDRAM_TIM_3 : 0x501F830F
DDR3_EMIF_SDRAM_CONFIG : 0x61C04AB2
Your choice: 1. Use the default one; 2. Input your own one.
Please Choose The DDR3 Frequency: 1. 303MHz; 2. 400MHz.
DDR3 Frequency is Set at 400MHz!
Please input your DDR3_EMIF_SDRAM_TIM_1 conifguration (in Hex) :
0AAAD4DB
Please input your DDR3_EMIF_SDRAM_TIM_2 conifguration (in Hex) :
266B7FDA
Please input your DDR3_EMIF_SDRAM_TIM_3 conifguration (in Hex) :
501F867F
Please input your DDR3_EMIF_SDRAM_CONFIG conifguration (in Hex) :
61C05332
Your input EMIF Timing configuration --
DDR3_EMIF_SDRAM_TIM_1 : 0xAAAD4DB
DDR3_EMIF_SDRAM_TIM_2 : 0x266B7FDA
DDR3_EMIF_SDRAM_TIM_3 : 0x501F867F
DDR3_EMIF_SDRAM_CONFIG : 0x61C05332
Please Enter the PHY_INVERT_CLKOUT value (0 or 1) from the spreadsheet :
0
Please Enter the Seed RD_DQS_SLAVE_RATIO Value in Hex to search the RD DQS Ratio Window :
38
Please Enter the Seed FIFO_WE_SLAVE_RATIO Value in Hex to search the RD DQS Gate Window :
94
Please Enter the Seed WR_DQS_SLAVE_RATIO Write DQS Ratio Value in Hex to search the Write DQS Ratio Window :
44
Please Enter the Seed PHY_CTRL_SLAVE_RATIO Value in Hex :
80
The ratio seeds for the DDR3 Software Leveling :
invert_clkout = 0x0
RD_DQS_RATIO_VAL = 0x38
FIFO_WE_SLAVE_RATIO = 0x94
WR_DQS_SLAVE_RATIO = 0x44
PHY_CTRL_SLAVE_RATIO = 0x80
The Slave Ratio Search Program Values are...
***************************************************************
DATA_PHY_RD_DQS_SLAVE_RATIO is :0x3A
DATA_PHY_FIFO_WE_SLAVE_RATIO is : 0x9A
DATA_PHY_WR_DQS_SLAVE_RATIO is : 0x40
DATA_PHY_WR_DATA_SLAVE_RATIO is : 0x7E
***************************************************************
rd_dqs_range = 58
fifo_we_range = 154
wr_dqs_range = 64
wr_data_range = 126
Optimal values not reached, rerunning program with new values...
The Slave Ratio Search Program Values are...
***************************************************************
DATA_PHY_RD_DQS_SLAVE_RATIO is :0x3A
DATA_PHY_FIFO_WE_SLAVE_RATIO is : 0x9B
DATA_PHY_WR_DQS_SLAVE_RATIO is : 0x3F
DATA_PHY_WR_DATA_SLAVE_RATIO is : 0x7B
***************************************************************
rd_dqs_range = 0
fifo_we_range = 1
wr_dqs_range = 1
wr_data_range = 3
Optimal values have been found!!
***************************************************************
DATA_PHY_RD_DQS_SLAVE_RATIO is :0x3A
DATA_PHY_FIFO_WE_SLAVE_RATIO is : 0x9B
DATA_PHY_WR_DQS_SLAVE_RATIO is : 0x3F
DATA_PHY_WR_DATA_SLAVE_RATIO is : 0x7B
***************************************************************
===== END OF TEST =====
DDR3 software leveling done!
校验为何还要事先设定好值才可以运行?
检验出来的值跟实际设定值差别不多,需要更改过来吗?
是否有内存压力测试方面的软件?可以动态设定不同频率。
校验就是根据现有的值然后无限逼近最优的值,如果初始值乱设可能不一定收敛。
最好和改成计算出来的值。
内存压力测试这块需要自己改MLO来测试了,我们没有这部分代码。不要动态设置内存频率,这样不稳定,建议一个频率测完,重启,再测下一个。
Hi Denny ,
我们自己做的板子AM3352+DDR3(IS43TR16256),
自己编译出来的MLO,u-boot,kernel都可以正常运行,想在想做DDR3 Software Leveling,但是使用了 Steven Liu发的MLO以后,UART0没有任何数据的输出,请问是什么原因呢?
是不是这个MLO只能用于开发板上呢?
我的现象好像跟 zhouwen qiu遇到的一样。
盼复!
谢谢!
你好! 我用你给的这种方法得到的配置目前不能正常启动,串口没有输出,用之前官方提供的参数串口有输出不过就是不稳定!
下面是我的参数! 用的是400M的频率DDR3!DDR型号:
EMIF_SDCFG 的值为 0x61C05332
利用上面MLO计算出来的结果是
Optimal values have been found!!
***************************************************************
DATA_PHY_RD_DQS_SLAVE_RATIO is :0x3D
DATA_PHY_FIFO_WE_SLAVE_RATIO is : 0x64
DATA_PHY_WR_DQS_SLAVE_RATIO is : 0xC
DATA_PHY_WR_DATA_SLAVE_RATIO is : 0x4B
***************************************************************
===== END OF TEST =====
DDR3 software leveling done!
u-boot中修改的参数
log.txt是MLO计算时输出的log信息。