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

am3358 u-boot 问题

我使用的是AM3359的板子,移植好uboot,运行起来停在—Hit any key to stop autoboot:  1—这个地方

串口输入没有反应,也不能自动加载uboot运行下去

Yaoming Qin:

请问您是自己做的板子么?内存部分移植过么

ethan han:

回复 Yaoming Qin:

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

Yaoming Qin:

回复 ethan han:

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

ethan han:

回复 Yaoming Qin:

谢谢了 

能不能给具体解释一下啊  我之前用GEL 文件测试过DDR3 , CCS测试是通过   ,上面寄存器的值也是和gel文件一致的 ,我对比过自己的硬件设计 ,也是对的

请具体说明一下吧  另外能留个联系方式吗 以后直接和你咨询下

 

 

Gary Wu:

回复 ethan han:

关于DDR3的leveling,也可参考如下链接http://www.deyisupport.com/question_answer/f/25/t/17684.aspx

 

ethan han:

回复 Gary Wu:

根据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

 

还是运行不下去啊,,,  还有哪些文件需要修改吗

Yaoming Qin:

回复 ethan han:

1. 查下VTT供电和VREF供电的layout

2. 请问您选用的一片ddr还是两片ddr

3. 麻烦把ratio speed的那个excel发上来看看

谢谢!

ethan han:

回复 Yaoming Qin:

查看了一下  DDR3的1.5V  VTT 电源都在正常范围内 纹波也很小 DDR3我使用的是1片: 16bit ,256Mbytes

附件是我从ti的网站上下载的文件  ,

 

谢谢 

Yaoming Qin:

回复 ethan han:

你能把根据你的板子设置的excel文件上传么

ethan han:

回复 Yaoming Qin:

附件是 计算寄存器值的 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));+}

赞(0)
未经允许不得转载:TI中文支持网 » am3358 u-boot 问题
分享到: 更多 (0)