Hello,
We have a custom board that uses a C6654 DSP and two K4B1G1646G DDR3 chips. The code is loaded over Ethernet and since it is too large to fit in L2 memory, we use the ROM boot loader to configure the DDR3 and then load the code. The majority of the boards work fine and we have no DDR3 issues, but about 5% of the boards do not initialize the DDR3 properly when we use the ROM boot loader. For the boards that show this problem, one of the DDR3 chips does not read or write (but the other DDR3 chip usually works, depends on the board). The DDR3 configuration registers are set to the correct values after the boot process on all boards. During debugging I noticed that if you write the SDCFG register with the same value as used during initialization (trigger another SDRAM initialization sequence) after the initial boot process the DDR3 starts working on the problem boards. This was confirmed to work by doing it through the debugger and also by sending another DDR3 configuration table that only sets SDCFG after the first table during the boot process.
On the boards that show the above problem, I discovered that setting INITREF_DIS in the SDRFC register to 1 before starting the configuration process and then setting it to 0 before writing SDCFG seemed to cause the issue (I tried it since that is what the RBL does). If INITREF_DIS is set to 0 at the beginning of the DDR3 configuration process (i.e. before writing SDTIM1/2/3, DDR_PHY_CTRL_1, etc.) the DDR3 comes up fine.
My questions are why does when INITREF_DIS is set to 0 seem to cause the above behavior and why does this only affect some boards/DSPs?
Thanks,
Mark