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.

请教C6678 以太加载前配置DDR3失败的问题

你好!

     

   这几天在测试DSP以太加载前配置DDR3,但是发现DDR3还是不能访问。

 

以太配置DDR3 方法:

0x00800000 入口地址

0x00000004 0xYYYYYYYY 0xZZZZZZZZ

0x00000004 0xYYYYYYYY 0xZZZZZZZZ

0x00000004 0xYYYYYYYY 0xZZZZZZZZ

。。。。

0x00000004 0xYYYYYYYY 0xZZZZZZZZ配置需要DDR EMIF的寄存器

            具体:

 

            使用仿真器把DDR3 EMIF接口寄存器值抓了出来,然后按此做到以太加载流程中,以太加载完成后,读取EMIF寄存器值确实写了进去,但是访问DDR3写进去的值和读出来的值不一致,说明

 

DDR3没有初始化成功。

 

            然后查找原因,发现TI提供的一些DDR3初始化函数代码中,在配置一些如PLL等寄存器过程中,是需要一套时序的,如对于同一个寄存器要先写什么,后写什么,然后还要等一些延时待完成。

 

这种情况挺复杂的,不知道该如何操作了,如何把这套时序加到以太加载流程中?

 

 

 

          以下是摘取了一段TI 提供的DDR3配置函数:
       

 

  这个函数在配置过程中有延时,类似的情况还有,不知在以太流程中如何模拟或规避它。

 

int KeyStone_DDR_full_leveling()

{

    Uint32 uwStatus;

   

    /*enable full leveling*/

    gpDDR_regs->RDWR_LVL_RMP_CTRL =

        (unsigned int)(1<<CSL_EMIF4F_RDWR_LVL_RMP_CTRL_REG_RDWRLVL_EN_SHIFT);

 

    /*start full leveling*/

    gpDDR_regs->RDWR_LVL_CTRL =

        (unsigned int)(1<<CSL_EMIF4F_RDWR_LVL_CTRL_REG_RDWRLVLFULL_START_SHIFT);

 

    /*Read back any of the DDR3 controller registers.

    This ensures full leveling is complete because this step is executed

    only after full leveling completes.*/

    uwStatus= gpDDR_regs->RDWR_LVL_RMP_CTRL;    //dummy read

 

    //Wait 3ms for leveling to complete

    TSC_delay_ms(3);   

 

    if(gpDDR_regs->STATUS&(CSL_EMIF4F_STATUS_REG_RDLVLGATETO_MASK

        |CSL_EMIF4F_STATUS_REG_RDLVLTO_MASK

        |CSL_EMIF4F_STATUS_REG_WRLVLTO_MASK))

    {

        printf("DDR3 leveling has failed, STATUS = 0x%x\n", gpDDR_regs->STATUS);

        uwStatus = 1;

        return uwStatus;

    }

    uwStatus = 0;

    return uwStatus;

}