Hi all:
We encounter problems when initializing DDR3 RAM at higher temperatures. The device was in a 40 degres Celsius (104 degrees F) environment.
e.g. after initializing RAM with all 0 we read back
0000: 00000000 00001000 00000000 00000000 00000000 00000000 00000000 00000000
0020: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
0040: 00000000 00001000 00000000 00000000 00000000 00000000 00000000 00000000
0060: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
0080: 00000000 00001000 00000000 00000000 00000000 00000000 00000000 00000000
... and so on.
Writing and/or reading does not change the behavior, the result is stable. Only restarting the DDR3 init procedure will bring the RAM into a working state.
Once the RAM is working correctly after initialization it will continue to work correctly regardless of the temperature. So it is an initialization only problem.
We follow the steps described in sprabl2.pdf with the dummy delay loops replaced with TSC clock loops. We entered the characteristic values from our board into the spreadsheets and use the values computed there. We use sprz335e errata Advisory 9 workaround 1 (Partial Automatic Leveling)
We are using TMX320C6672ACYP #20-######## with four Micron MT41J128M16HA-15E CPU is running at 1000 MHz and RAM is operating at 666.666 MHz (DDR3-1333) SDRAM bus interface 64-bit, one chip select
Our questions:
1) Is there any recommended procedure to avoid these kind of RAM errors ?
2) Where can we see the result of the leveling ? Is it just the success bit in the STATUS register ? Or can we see the values derived ?
3) Is there a way to find out whether the DDR3 PLL has locked other than just waiting ?
We have tried to activate the incremental leveling but there are open questions.
4) The documentation of sprugv8c 4.20-4.22 seems to contradict with sprabl2 Examples 20 and 22:
- Incremental leveling should be started by setting RDWR_LVL_EN=1 and RDWRLVLFULL_START=0 and any of RDLVLINC_INT and/or RDLVLGATEINC_INT and/or WRLVLINC_INT Value to a value different from 0.
- The time for the incremental leveling is
64 x (RDWRLVLINC_PRE+1) * (RDLVLINC_INT+RDLVLGATEINC_INT+WRLVLINC_INT) * 7.8 us
Do we need to manually start a delay while no DDR3 RAM access is allowed ?
Or can we simply read the DDR3_STATUS register and this access will be delayed by memory controller ?
- If we leave RDWR_LVL_EN=1 will every SmartReflex event delay execution for 10 ms while RAM is being leveled ?
5) Is our understanding correct that RDWR_LVL_RMP_WIN and RDWR_LVL_RMP_CTRL are used only with SmartReflex ?
Please help us,
- Peter