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 u-boot 问题

Other Parts Discussed in Thread: AM3359

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

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

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

  • 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

  • 谢谢了 

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

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

     

     

  • 根据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的网站上下载的文件  ,

     

    谢谢 

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

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

    AM335x_DDR_register_calc_tool.zip