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.

AM3358使用DDR Software level tool的MLO遇到的问题

Other Parts Discussed in Thread: SYSCONFIG, TPS65217, AM3358

你好,我们的板是AM3358BZCZ80+MT41J256M16JT-125, 使用TI的用于DDR software level的MLO是,超级终端乱码.

我的主晶振是25MHz的,是否可以提供一个基于25MHz的MLO给我们进行DDR3 software level。

另外,使用25MHz晶振,是否之需要修改/include/configs/am335x_evm.h中的V_OSCK,我们现在出现的问题是修改这个参数后,uboot201605, 在SPL阶段死在GPMC_init中,用点LED的方式发现只要调用writel(0x00000008,&gpmc_cfg->sysconfig)就死掉。

  • 补充说明一下,使用DDR software level的MLO会乱码,使用我自己编译的MLO不会乱码,但是卡死在GPMC_init的写GPMC寄存器中。

  • 今天的调试发现,写gpmc寄存器时死掉了: writel(0x00000008,&gpmc_cfg->sysconfig)

    但是改成writel(0x00000008,0x50000010)时可以正常执行,不会死掉

    ????

  • 先看看启动配置有没有配对

  • hi, Denny, 你好.

    启动配置没有问题,我们的设置是: LCD[15:0]=1000000000010X11, X通过跳线选择MMC0或者NAND启动.

    另外我们通过从TI官网下载的3分excel文件对OSC, DDR3进行了配置:

    1, AM335x_DDR_register_calc_tool.xls

    2, RatioSeed_AM335x_boards.xls

    3, AM335x_DPLL_Settings_v3.xls

    我们的DDR3的部分是参考的BeagleBone Black的2014年4月9号的原理图设计的,只是将DDR3L换成了DDR3, 并且将TPS65217换成了TPS65910A3.

    目前的现象是:

    1, 使用TI的DDR software level tool的MLO时,超级终端乱码, TI的MLO是否以24M晶振为基础编译的,是否可以提供一份基于25M晶振的MLO给我.

    2, 我们自己编译的MLO已经修改成25M晶振, 超级终端不会乱码,但是SPL死在GPMC_init函数的writel(0x00000008,&gpmc_cfg->sysconfig)这一行.我在这一行之前增加以下的代码测试:

    writel(0x12345678,(unsigned int *)0x83000000);

    writel(0x87654321,(unsigned int *)0x83000010);

    myLed(11); //这个是点LED程序,通过writel函数写GPIO寄存器,点亮不同的LED

    putnum(readl((unsigned int *)0x83000000); //将指定地址的值转换成16进制ASCII发送到超级终端(函数中是调用puts) 

    putnum(readl((unsigned int *)0x83000010); //将指定地址的值转换成16进制ASCII发送到超级终端(函数中是调用puts) 

    运行的结果是, 第一个putnum显示的是随机数, 第二个putnum显示的始终是0.

    但是如果我用以下的例子:

    writel(0x12345678,(unsigned int *)0x83000000);

    putnum(readl((unsigned int *)0x83000000); //将指定地址的值转换成16进制ASCII发送到超级终端(函数中是调用puts) 

    超级终端就能够正确显示出:12345678

    从现象分析看,就好像AM3358没有对SDRAM进行刷新,导致SDRAM数据丢失了.

    SDRAM设置303M,400M都是过, 手工修改过SDRAM几个寄存器设定值,均是上述现象, 在设定DDR频率为400MHz时,几个SDRAM寄存器的设定是:

    #define EMIF_OCP_CONFIG_AM335X_EVM 0x00141414

    #define MT41J256M16JT125_EMIF_READ_LATENCY 0x07

    #define MT41J256M16JT125_EMIF_TIM1 0x0AAAD4EC
    #define MT41J256M16JT125_EMIF_TIM2 0x366B7FE3
    #define MT41J256M16JT125_EMIF_TIM3 0x501F867F
    #define MT41J256M16JT125_EMIF_SDCFG 0x61C05332
    #define MT41J256M16JT125_EMIF_SDREF 0x0C30
    #define MT41J256M16JT125_ZQ_CFG 0x50074BE4
    #define MT41J256M16JT125_RATIO 0x80
    #define MT41J256M16JT125_INVERT_CLKOUT 0x0
    #define MT41J256M16JT125_RD_DQS 0x38
    #define MT41J256M16JT125_WR_DQS 0x44
    #define MT41J256M16JT125_PHY_WR_DATA 0x76
    #define MT41J256M16JT125_PHY_FIFO_WE 0x94
    #define MT41J256M16JT125_IOCTRL_VALUE 0x18B

  • hi, Eggsy,

    谢谢你的支持.

    我们的板由于空间的问题,JTag没有引出来, 如果能够提供一份基于25MHz晶振的MLO给我们做software level会更好, 不过还是谢谢你提供的文件。

    目前DDR3不工作的问题,已经找到原因,是layout工程师将一个电容和一个电阻的丝印放反位置,导致VDDR_REF不正常,换回来后,现在DDR3跑400M已经可以正常工作了。