Other Parts Discussed in Thread: AM5718,
Dear All,
I do have a problem with EMIF and SDRAM memory configuration. The memory is built with 4 ICs - 256Mb x 8bit each (common CS, connected to EMIF1), AM57x8 uses 32 bits for data transfer (x32 memory config).
The ECC is disabled (for now).
I do encounter some errors on Most Significant Byte [MSB] of the read/written memory word:
1. When I write 0x00000000 to memory location by using JTAG debugging tool:
#0>mm 0x80000000 0x00000000 32
#0>md 0x80000000 40
80000000 : 0x94000000 -1811939328 ....
80000004 : 0x94000000 -1811939328 ....
80000008 : 0x00000000 0 ....
8000000c : 0x00000000 0 ....
80000010 : 0x00000000 0 ....
80000014 : 0x00000000 0 ....
80000018 : 0x00000000 0 ....
8000001c : 0x00000000 0 ....
80000020 : 0x16000000 369098752 ....
80000024 : 0x16000000 369098752 ....
80000028 : 0x00000000 0 ....
8000002c : 0x00000000 0 ....
80000030 : 0x00000000 0 ....
80000034 : 0x00000000 0 ....
80000038 : 0x00000000 0 ....
8000003c : 0x00000000 0 ....
80000040 : 0x30000000 805306368 ...0
80000044 : 0x30000000 805306368 ...0
80000048 : 0x00000000 0 ....
8000004c : 0x00000000 0 ....
80000050 : 0x00000000 0 ....
80000054 : 0x00000000 0 ....
80000058 : 0x00000000 0 ....
8000005c : 0x00000000 0 ....
80000060 : 0x83000000 -2097152000 ....
80000064 : 0x83000000 -2097152000 ....
80000068 : 0x00000000 0 ....
8000006c : 0x00000000 0 ....
80000070 : 0x00000000 0 ....
80000074 : 0x00000000 0 ....
80000078 : 0x00000000 0 ....
8000007c : 0x00000000 0 ....
2. When I do write 0xFF000000 I also see some wrong values:
#0>mm 0x80000000 0xFF000000 32
#0>md 0x80000000 40
80000000 : 0x94000000 -1811939328 ....
80000004 : 0x94000000 -1811939328 ....
80000008 : 0xff000000 - 16777216 ....
8000000c : 0xff000000 - 16777216 ....
80000010 : 0xff000000 - 16777216 ....
80000014 : 0xff000000 - 16777216 ....
80000018 : 0xff000000 - 16777216 ....
8000001c : 0xff000000 - 16777216 ....
80000020 : 0x16000000 369098752 ....
80000024 : 0x16000000 369098752 ....
80000028 : 0xff000000 - 16777216 ....
8000002c : 0xff000000 - 16777216 ....
80000030 : 0xff000000 - 16777216 ....
80000034 : 0xff000000 - 16777216 ....
80000038 : 0xff000000 - 16777216 ....
8000003c : 0xff000000 - 16777216 ....
80000040 : 0x30000000 805306368 ...0
80000044 : 0x30000000 805306368 ...0
80000048 : 0xff000000 - 16777216 ....
8000004c : 0xff000000 - 16777216 ....
80000050 : 0xff000000 - 16777216 ....
80000054 : 0xff000000 - 16777216 ....
80000058 : 0xff000000 - 16777216 ....
8000005c : 0xff000000 - 16777216 ....
80000060 : 0x83000000 -2097152000 ....
80000064 : 0x83000000 -2097152000 ....
80000068 : 0xff000000 - 16777216 ....
8000006c : 0xff000000 - 16777216 ....
80000070 : 0xff000000 - 16777216 ....
80000074 : 0xff000000 - 16777216 ....
80000078 : 0xff000000 - 16777216 ....
8000007c : 0xff000000 - 16777216 ....
EMIF1 is configured to work with DDR3-1333 @ 666MHz (CLKOUT shows that EMIF1_PHY_CLK has correct value).
Errors on MSB also pop up for slower DDR clock rates (up to DDR3-800 configuration).
The really strange thing is that when I switch memory to 16 bit width of data bus (x16) at sdram_config register the memory works correctly (board boots linux and works without hangs).
On the beginning I thought that impedance matching is wrong, but I've double check PART4A settings (ddr1_d[31:24]) and those are identical to ones for working data lines.
EMIF1 has been setup according to sprac36 app note (). All inserted values were correct according to DDR3 standards (green fields on the sheet).
Hints for further investigation are more than welcome :-)
Have anybody experienced similar issue?
Best regards,
Lukasz