DDR3 data inverted

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

DDR3 data inverted

985 Views
hailiu
Contributor IV

I am debugging DDR3 (micron M$41k512M16HT using dummy register write and read. When I write a number 0xFFFFFFFF, i got the number 0x00000000 in all the 8 dummy read registers. When I write a number 0x00550055, I get the number 0xAAAAAAAA,0xFFFFFFFF,0xAAAAAAAA,0xFFFFFFFF,0xAAAAAAAA,0xFFFFFFFF,0xAAAAAAAA,0xFFFFFFFF.

when I write a number 0xAAAAAAAA, i get the number 0x55555555 in all 8 dummy register. When I write a number 0xAB5DC432, I got the number 0xCDCDCDCD, 0x3B3B3B3B, 0xA2A2A2A2,0x54545454. It seems that erery dummy register hold one byte inverted of the write value. The ZQCL and write level calibration can be passed. somethings wrong with my settings?

 

I saw a line in the reference manual in the DQS gating calibration section :

atep 9: MMDC reset the read FIFO (to the inverted pre-defined/MPR value), what does this mean?

below is a piece of my test code:

CMD=(0x02<<4); //one refresh command send to DDR
HW_MMDC_MDSCR_WR(MMDC1_BASE,CON_REQ|CMD_CS|CMD); //DDR refresh
while(!((HW_MMDC_MDSCR_RD(MMDC1_BASE))&0x00004000))
{

}

CMD=(0x05<<4);
HW_MMDC_MDSCR_WR(MMDC1_BASE,CON_REQ|CMD|CMD_CS); //pre-charge all banks
while(!((HW_MMDC_MDSCR_RD(MMDC1_BASE))&0x00004000))
{

}
PDV2=(0xAC5D<<16);
PDV1=0xC432;
HW_MMDC_MPPDCMPR1_WR(MMDC1_BASE, PDV1|PDV2); //set pre-defined value which will be written to DDR device
SW_DUMMY_WR=1;
HW_MMDC_MPSWDAR0_WR(MMDC1_BASE,SW_DUMMY_WR); //write predefined value to DDR bank 0, row 0 col 0
while ((HW_MMDC_MPSWDAR0_RD(MMDC1_BASE)&0x00000001))
{

}
RST_RD_FIFO=(0x1<<31);
HW_MMDC_MPDGCTRL0_WR(MMDC1_BASE,RST_RD_FIFO);
while((HW_MMDC_MPDGCTRL0_RD(MMDC1_BASE)&0x80000000))
{

} //wait fifo reset
HW_MMDC_MPDGCTRL0_WR(MMDC1_BASE,RST_RD_FIFO); //reset rd fifo second times
while((HW_MMDC_MPDGCTRL0_RD(MMDC1_BASE)&0x80000000))
{

} //wait fifo reset

HW_MMDC_MPSWDAR0_WR(MMDC1_BASE,0x02); //read value from to DDR bank 0, row 0 col 0
while ((HW_MMDC_MPSWDAR0_RD(MMDC1_BASE)&0x00000002))
{

}
readValue8=HW_MMDC_MPSWDAR0_RD(MMDC1_BASE);
readValue=HW_MMDC_MPSWDRDR0_RD(MMDC1_BASE);
readValue1=HW_MMDC_MPSWDRDR1_RD(MMDC1_BASE);
readValue2=HW_MMDC_MPSWDRDR2_RD(MMDC1_BASE);
readValue3=HW_MMDC_MPSWDRDR3_RD(MMDC1_BASE);

0 Kudos
Reply
6 Replies

962 Views
hailiu
Contributor IV

thank you very much. I checked the reference manual again carefully, found that PDV2 and PDV1 is inverted. I guess that's is why I get an inverted value.

0 Kudos
Reply

976 Views
igorpadykov
NXP Employee
NXP Employee

Hi hailiu

 

what processor (full part number) used in the case. For i.MX6 series one can look at

below link, ddr test package has some sample scripts

https://community.nxp.com/t5/i-MX-Processors-Knowledge-Base/i-MX-6-7-DDR-Stress-Test-Tool/ta-p/11082...

 

Best regards
igor

947 Views
hailiu
Contributor IV

dear igorpadykov,

If i write the value 0xAACC3553 to DDR3 bank 0 row 0 col 0 using dummy software write (with register MPSWDAR0), what values should I get in the dummy read register0-7 when I doing a dummy software read(with register MPSWDAR0)?

 

thank you very much.

0 Kudos
Reply

943 Views
igorpadykov
NXP Employee
NXP Employee

I do not think that it is feasible to perform such "dummy" write/reads.

For simple ddr test one can refer to SDK example (ddr_test.c in 1.1.0_iMX6_Platform_SDK.zip)

available on

https://community.nxp.com/t5/i-MX-Processors/SMP-Enable-in-IMX6/m-p/542111

 

Best regards
igor

0 Kudos
Reply

936 Views
hailiu
Contributor IV

thank you very much. I am going to see these documents.

0 Kudos
Reply

957 Views
hailiu
Contributor IV

I use MCIMX6S5DVM10AD.

0 Kudos
Reply