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.
MLO(UART DDR3 Leveling)
Steven Liu1:
附上User Guide。能够执行software leveling算法的MLO在上楼中。
azhiking:
回复 Steven Liu1:
谢谢分享。
能不能顺便介绍一下software leveling算法的简介,原理以及有关DDR3为什么需要Software Leveling机制?
Steven Liu1:
回复 azhiking:
感谢您的关心!简而言之,为了保证DDR3的信号完整性,优化相关的读写时序参数,匹配不同板子因板材、layout走线、线宽等多种因素可能会造成的阻抗变化,所以要求,DDR3的设计,必须要进行Software Leveling,获得最适应于当前layout的DDR3 PHY读写参数。具体的介绍,您还可以参考:http://www.deyisupport.com/question_answer/dsp_arm/sitara_arm/f/25/t/17684.aspx
mark anglin:
Is the source code for this DDR3 leveling MLO available?
Yaoming Qin:
回复 mark anglin:
这个代码目前没有开放。
Jack Sue:
为何我运行的结果是全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) : 0aAAD4DBPlease input your DDR3_EMIF_SDRAM_TIM_2 conifguration (in Hex) : 266B7FDAPlease input your DDR3_EMIF_SDRAM_TIM_3 conifguration (in Hex) : 501F867FPlease input your DDR3_EMIF_SDRAM_CONFIG conifguration (in Hex) : 61C05332Your input EMIF Timing configuration — DDR3_EMIF_SDRAM_TIM_1 : 0xAAAD4DBDDR3_EMIF_SDRAM_TIM_2 : 0x266B7FDADDR3_EMIF_SDRAM_TIM_3 : 0x501F867FDDR3_EMIF_SDRAM_CONFIG : 0x61C05332
Please Enter the PHY_INVERT_CLKOUT value (0 or 1) from the spreadsheet : 0Please Enter the Seed RD_DQS_SLAVE_RATIO Value in Hex to search the RD DQS Ratio Window : 40Please Enter the Seed FIFO_WE_SLAVE_RATIO Value in Hex to search the RD DQS Gate Window : 6DPlease Enter the Seed WR_DQS_SLAVE_RATIO Write DQS Ratio Value in Hex to search the Write DQS Ratio Window : 1Please Enter the Seed PHY_CTRL_SLAVE_RATIO Value in Hex : 80The ratio seeds for the DDR3 Software Leveling : invert_clkout = 0x0RD_DQS_RATIO_VAL = 0x40FIFO_WE_SLAVE_RATIO = 0x6DWR_DQS_SLAVE_RATIO = 0x1PHY_CTRL_SLAVE_RATIO = 0x80
The Slave Ratio Search Program Values are… ***************************************************************DATA_PHY_RD_DQS_SLAVE_RATIO is :0x0DATA_PHY_FIFO_WE_SLAVE_RATIO is : 0x0DATA_PHY_WR_DQS_SLAVE_RATIO is : 0x0DATA_PHY_WR_DATA_SLAVE_RATIO is : 0x0***************************************************************rd_dqs_range = 0fifo_we_range = 0wr_dqs_range = 0wr_data_range = 0
Optimal values have been found!!
***************************************************************DATA_PHY_RD_DQS_SLAVE_RATIO is :0x0DATA_PHY_FIFO_WE_SLAVE_RATIO is : 0x0DATA_PHY_WR_DQS_SLAVE_RATIO is : 0x0DATA_PHY_WR_DATA_SLAVE_RATIO is : 0x0***************************************************************
===== END OF TEST =====DDR3 software leveling done!
盼复!
Steven Liu1:
回复 Jack Sue:
全0代表着你的software leveling运算失败了,软件上请检查一下EMIF和PHY的配置;再就是排查一下可能的硬件问题,review一下原理图,或者换一块板子排除一下当前板子可能的焊接问题。
Jack Sue:
回复 Steven Liu1:
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。
谢谢!盼复!
Steven Liu1:
回复 Jack Sue:
1.你的意思是说你使用的这个MLO中的默认配置进行的实验吗?这个默认的EMIF配置影响很大的!要看你使用的是DDR2、DDR3的型号,不同型号的配置是不一样的,不是通用的。这个代码中默认的配置是按照AM335x的StarterKit开发板进行的设置,DDR3型号:MT41J128M16JT-125
2.我觉得问题是你配置的EMIF和PHY的参数,是不是适用于你当前的板子的。一般来说,DDR的型号不同,就要检查EMIF的配置,layout的不同,就要用工具去计算DDR PHY的配置。
3. 这两个值是和DDR的datasheet有关的,是要算的,RZQ是确定值,但是终端匹配和ODT是你要根据手册来分给个合理的值。
yaofei song:
为什么我串口写选择“1”,居然给我返回“1”,写什么返回什么,死活不会执行“1”代表的选择啊,
TI中文支持网
