Every hardware design engineer wants to be sure that the DDR3 memory interface is working correctly. Here are some real examples of DDR3 memory testing from our open source iMX6 Rex project.
Which of the memory tests?
There are a lot of memory tests available. For this project I used three:
– the standard ubuntu memtester
– stressapptest (according to the website “… It has been used at Google for some time …”)
– the Freescale memory test included in the i.MX6 DDR Stress Test Tool (the same tool which is used also for calibration)
I recommend the stressapptest.
What did I test?
I was curious, so I have done tests of “uncalibrated” and “calibrated” board. “Uncalibrated” board was using the unchanged settings of DDR3 memory registers (the same values as used on the reference board), “calibrated” board was using the proper register values which I have got after the DDR3 calibration.
Initially, I was running the “uncalibrated” board. The memtester software was running on this board for a week with no errors. When I used the stressapptest – the board always failed within one hour. This is how the failing looked:
“Uncalibrated DDR3” – Examples of failing memory test
After applying the correct DDR3 settings from the DDR3 calibration (adding the correct register settings into uBoot), the same board was running perfectly.
“Calibrated DDR3” – running perfectly over night (the same board was failing before)
Here is the command line I used for the basic testing:
If you would like to install the strassapptest on your own ARM board, check out here >>
Be aware, that you need to test more boards. I have tested couple of “uncalibrated” boards and not all of them failed the stressapptest. When you are happy with the results (all your boards must always pass the test), take couple of boards (at least 5) and run the same tests in an environmental chamber (from -40C up to the maximum temperature … 60/70/80C ..). All the “calibrated” boards must pass your testing.
Happy testing 🙂