我使用的是AM3359的板子,移植好uboot,运行起来停在---Hit any key to stop autoboot: 1---这个地方
串口输入没有反应,也不能自动加载uboot运行下去
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.
AM3359 的板子 DDR3的内存 ,内存你部分自己修改了一部分 ,但不知道是不是完全对的 主要修改了\arch\arm\include\asm\arch-ti81xx 里的ddr_defs.h 里寄存器
#define EMIF_READ_LATENCY 0x06 //RD = (CL + 2) -1
#define EMIF_TIM1 0x0888C4A4
#define EMIF_TIM2 0x3C427FE3
#define EMIF_TIM3 0x510F83FF
#define EMIF_SDCFG 0x61C04B32
#define EMIF_SDREF 0x0000093B
#define DDR2_DLL_LOCK_DIFF 0x0
#define DDR2_RD_DQS 0x12
#define DDR2_PHY_FIFO_WE 0x80
DDR3 需要做softwware leveling, 具体请参考 http://processors.wiki.ti.com/index.php/AM335x_EMIF_Configuration_tips http://processors.wiki.ti.com/index.php/AM335x_DDR_PHY_register_configuration_for_DDR3_using_Software_Leveling
关于DDR3的leveling,也可参考如下链接http://www.deyisupport.com/question_answer/f/25/t/17684.aspx
根据TI的文档 ,已经做了software leveling,
也得出了寄存器的值
***************************************************************
[CortxA8] DATA_PHY_RD_DQS_SLAVE_RATIO 0x072 | 0x004 | 0x03b | 0x06e
[CortxA8] DATA_PHY_FIFO_WE_SLAVE_RATIO 0x14b | 0x000 | 0x0a5 | 0x14b
[CortxA8] DATA_PHY_WR_DQS_SLAVE_RATIO 0x072 | 0x002 | 0x03a | 0x070
[CortxA8] DATA_PHY_WR_DATA_SLAVE_RATIO 0x0ae | 0x03e | 0x076 | 0x070
[CortxA8] ***************************************************************
[CortxA8] rd_dqs_range = 0
[CortxA8] fifo_we_range = 0
[CortxA8] wr_dqs_range = 2
[CortxA8] wr_data_range = 2
[CortxA8]
[CortxA8] Optimal values have been found!!
[CortxA8]
[CortxA8] ***************************************************************
[CortxA8] The Slave Ratio Search Program Values are...
[CortxA8] ***************************************************************
[CortxA8] PARAMETER MAX | MIN | OPTIMUM | RANGE
[CortxA8] ***************************************************************
[CortxA8] DATA_PHY_RD_DQS_SLAVE_RATIO 0x072 | 0x004 | 0x03b | 0x06e
[CortxA8] DATA_PHY_FIFO_WE_SLAVE_RATIO 0x14b | 0x000 | 0x0a5 | 0x14b
[CortxA8] DATA_PHY_WR_DQS_SLAVE_RATIO 0x072 | 0x002 | 0x03a | 0x070
[CortxA8] DATA_PHY_WR_DATA_SLAVE_RATIO 0x0ae | 0x03e | 0x076 | 0x070
[CortxA8] ***************************************************************
[CortxA8]
[CortxA8] ===== END OF TEST =====
修改以后的寄存器如下
#define EMIF_READ_LATENCY 0x06 //RD = (CL + 2) -1
#define EMIF_TIM1 0x0888A39B
#define EMIF_TIM2 0x3C427FDA
#define EMIF_TIM3 0x501F830F
#define EMIF_SDCFG 0x61C04AB2
#define EMIF_SDREF 0x0000093B
#define DDR2_DLL_LOCK_DIFF 0x4
#define DDR2_RD_DQS 0x3B
#define DDR2_PHY_FIFO_WE 0xA5
还是运行不下去啊,,, 还有哪些文件需要修改吗
1. 查下VTT供电和VREF供电的layout
2. 请问您选用的一片ddr还是两片ddr
3. 麻烦把ratio speed的那个excel发上来看看
谢谢!
查看了一下 DDR3的1.5V VTT 电源都在正常范围内 纹波也很小 DDR3我使用的是1片: 16bit ,256Mbytes
附件是我从ti的网站上下载的文件 ,
谢谢
附件是 计算寄存器值的 excel
另外,请教一下啊:board/ti/evm.c的文件中,配置DDR3的部分,是这部分函数吧
static void config_am335x_ddr3(void)
{
enable_ddr3_clocks();
config_vtp();
phy_config_cmd();
phy_config_data();
/* set IO control registers */
writel(DDR3_IOCTRL_VALUE, DDR_CMD0_IOCTRL);
writel(DDR3_IOCTRL_VALUE, DDR_CMD1_IOCTRL);
writel(DDR3_IOCTRL_VALUE, DDR_CMD2_IOCTRL);
writel(DDR3_IOCTRL_VALUE, DDR_DATA0_IOCTRL);
writel(DDR3_IOCTRL_VALUE, DDR_DATA1_IOCTRL);
/* IOs set for DDR3 */
writel(readl(DDR_IO_CTRL) & MDDR_SEL_DDR2, DDR_IO_CTRL);
/* CKE controlled by EMIF/DDR_PHY */
writel(readl(DDR_CKE_CTRL) | CKE_NORMAL_OP, DDR_CKE_CTRL);
config_emif_ddr3();
调用的是
enable_ddr3_clocks();
config_vtp();
phy_config_cmd();
phy_config_data();
config_emif_ddr3(); 这5个子函数
Static void Data_Macro_Config_ddr2(int dataMacroNum)这个函数是设置DDR2使用的吧,
可怎么看DDR3配置的补丁文件里,提到还是要修改这个函数的
#define CFG_REG 0x10
@@ -155,39 +161,121 @@ void dram_init_banksize (void)
#ifdef CONFIG_SPL_BUILD
static void Data_Macro_Config_ddr2(int dataMacroNum)
{
- u32 BaseAddrOffset = 0x00;;
-
- if (dataMacroNum == 1)
- BaseAddrOffset = 0xA4;
-
- writel(((DDR2_RD_DQS<<30)|(DDR2_RD_DQS<<20)
- |(DDR2_RD_DQS<<10)|(DDR2_RD_DQS<<0)),
- (DATA0_RD_DQS_SLAVE_RATIO_0 + BaseAddrOffset));
- writel(DDR2_RD_DQS>>2, (DATA0_RD_DQS_SLAVE_RATIO_1 + BaseAddrOffset));
- writel(((DDR2_WR_DQS<<30)|(DDR2_WR_DQS<<20)
- |(DDR2_WR_DQS<<10)|(DDR2_WR_DQS<<0)),
- (DATA0_WR_DQS_SLAVE_RATIO_0 + BaseAddrOffset));
- writel(DDR2_WR_DQS>>2, (DATA0_WR_DQS_SLAVE_RATIO_1 + BaseAddrOffset));
- writel(((DDR2_PHY_WRLVL<<30)|(DDR2_PHY_WRLVL<<20)
- |(DDR2_PHY_WRLVL<<10)|(DDR2_PHY_WRLVL<<0)),
- (DATA0_WRLVL_INIT_RATIO_0 + BaseAddrOffset));
- writel(DDR2_PHY_WRLVL>>2, (DATA0_WRLVL_INIT_RATIO_1 + BaseAddrOffset));
- writel(((DDR2_PHY_GATELVL<<30)|(DDR2_PHY_GATELVL<<20)
- |(DDR2_PHY_GATELVL<<10)|(DDR2_PHY_GATELVL<<0)),
- (DATA0_GATELVL_INIT_RATIO_0 + BaseAddrOffset));
- writel(DDR2_PHY_GATELVL>>2, (DATA0_GATELVL_INIT_RATIO_1 + BaseAddrOffset));
- writel(((DDR2_PHY_FIFO_WE<<30)|(DDR2_PHY_FIFO_WE<<20)
- |(DDR2_PHY_FIFO_WE<<10)|(DDR2_PHY_FIFO_WE<<0)),
- (DATA0_FIFO_WE_SLAVE_RATIO_0 + BaseAddrOffset));
- writel(DDR2_PHY_FIFO_WE>>2,
- (DATA0_FIFO_WE_SLAVE_RATIO_1 + BaseAddrOffset));
- writel(((DDR2_PHY_WR_DATA<<30)|(DDR2_PHY_WR_DATA<<20)
- |(DDR2_PHY_WR_DATA<<10)|(DDR2_PHY_WR_DATA<<0)),
- (DATA0_WR_DATA_SLAVE_RATIO_0 + BaseAddrOffset));
- writel(DDR2_PHY_WR_DATA>>2,
- (DATA0_WR_DATA_SLAVE_RATIO_1 + BaseAddrOffset));
- writel(DDR2_PHY_DLL_LOCK_DIFF,
- (DATA0_DLL_LOCK_DIFF_0 + BaseAddrOffset));
+ u32 BaseAddrOffset = 0x00;;
+
+ if (dataMacroNum == 1)
+ BaseAddrOffset = 0xA4;
+
+ writel(((DDR2_RD_DQS<<30)|(DDR2_RD_DQS<<20)
+ |(DDR2_RD_DQS<<10)|(DDR2_RD_DQS<<0)),
+ (DATA0_RD_DQS_SLAVE_RATIO_0 + BaseAddrOffset));
+ writel(DDR2_RD_DQS>>2, (DATA0_RD_DQS_SLAVE_RATIO_1 + BaseAddrOffset));
+ writel(((DDR2_WR_DQS<<30)|(DDR2_WR_DQS<<20)
+ |(DDR2_WR_DQS<<10)|(DDR2_WR_DQS<<0)),
+ (DATA0_WR_DQS_SLAVE_RATIO_0 + BaseAddrOffset));
+ writel(DDR2_WR_DQS>>2, (DATA0_WR_DQS_SLAVE_RATIO_1 + BaseAddrOffset));
+ writel(((DDR2_PHY_WRLVL<<30)|(DDR2_PHY_WRLVL<<20)
+ |(DDR2_PHY_WRLVL<<10)|(DDR2_PHY_WRLVL<<0)),
+ (DATA0_WRLVL_INIT_RATIO_0 + BaseAddrOffset));
+ writel(DDR2_PHY_WRLVL>>2, (DATA0_WRLVL_INIT_RATIO_1 + BaseAddrOffset));
+ writel(((DDR2_PHY_GATELVL<<30)|(DDR2_PHY_GATELVL<<20)
+ |(DDR2_PHY_GATELVL<<10)|(DDR2_PHY_GATELVL<<0)),
+ (DATA0_GATELVL_INIT_RATIO_0 + BaseAddrOffset));
+ writel(DDR2_PHY_GATELVL>>2,
+ (DATA0_GATELVL_INIT_RATIO_1 + BaseAddrOffset));
+ writel(((DDR2_PHY_FIFO_WE<<30)|(DDR2_PHY_FIFO_WE<<20)
+ |(DDR2_PHY_FIFO_WE<<10)|(DDR2_PHY_FIFO_WE<<0)),
+ (DATA0_FIFO_WE_SLAVE_RATIO_0 + BaseAddrOffset));
+ writel(DDR2_PHY_FIFO_WE>>2,
+ (DATA0_FIFO_WE_SLAVE_RATIO_1 + BaseAddrOffset));
+ writel(((DDR2_PHY_WR_DATA<<30)|(DDR2_PHY_WR_DATA<<20)
+ |(DDR2_PHY_WR_DATA<<10)|(DDR2_PHY_WR_DATA<<0)),
+ (DATA0_WR_DATA_SLAVE_RATIO_0 + BaseAddrOffset));
+ writel(DDR2_PHY_WR_DATA>>2,
+ (DATA0_WR_DATA_SLAVE_RATIO_1 + BaseAddrOffset));
+ writel(DDR2_PHY_DLL_LOCK_DIFF,
+ (DATA0_DLL_LOCK_DIFF_0 + BaseAddrOffset));
+}