I got a i.MX28 ddr stress test from a Freescale FAE. Its file name is 201134_mx28_dram_stress_test.
Did somebody already have used this?
I am having some problems to boot a custom board and the FAE suggested this tool to check the memory, but now he is on vacations and we have no support to this at all and the package has the source code, but no documentation.
The package has a precompiled (ELF) version of the tool that I am trying to load and run, but I do not know exactly how to load it.
I tried to make an SB file and tried to load it using the "sb_loader.exe", but the code does not start and sometimes I get "Undefined Ins0x80508002" and sometimes I get "Pref0x80508002" on the debug uart.
The elftosb config file I used:
sources
{
image= "ddr-stress-test-mx28.elf";
}
constants
{
IVT_ADDR = 0x1F000;
}
section (0)
{
load image;
load ivt (entry = image:Reset_Handler) > IVT_ADDR;
call IVT_ADDR;
}
Does somebody have already had this kind of problem or has any tip or workaround for this?
1.
I think "ddr-stress-test-mx28.elf" is expected to run under JTAG in DRAM memory
after memory initialization.Another approach (not using JTAG) - include initialization snippet (ipl)
with the .elf .
2.
The enclosed is i.MX28 memory test intended to be loaded and run in i.MX28 internal memory OCRAM.
One can use it as base for further design. SB file may be loaded via USB; Debug UART should be connected
for logging.
Thank you for your support Yuri,
I managed to finally run the DDR test. I had to adapt the power initialization section of the test to make it work.
Best regards,
Fernando.
Hi Fernando,
Is it possible for you to share the DDR stress test from your FAE ? I also want to run it on my imx28-based platform but I do not have any sources...
Thank you,
Julien.
Hello Julien,
the DDR stress test is already available on this thread as posted by Yuri Muhin 2 posts before yours.
I had some trouble because of my power supplies. You probably will not have the same issues. In case you need to change you power source to the internal switched regulators instead of the linear ones, take a look at this post to get the changes I have done.
BR,
Fernando.
Hello Fernando,
Yeah I saw the ddr stress test after writting my message, sorry...Anyway, thank you for your advices !
BR,
Julien.
Probably attached example may help, it consists of two
parts: ipl (folder MX28_OBDS_IPL) which runs from iRAM
and initializes DDR and perform small test. Second part
(folder MX28_OBDS) is OBDS which is run from DDR.
Probably one can add DDR test (201134_mx28_dram_stress_test)
to ipl (after DDR2EmiController_EDE1116_200MHz function in
main.c in folder MX28_OBDS_IPL) and remove OBDS test.
Hi chipexpert!
Thank you for your help! I tried to load the MX_OBDS.sb in my board, but I couldn't do it. I get the error -13 when trying to load it, the processor prints "HTLLFFFLJ" in the DUART and the processor resets. This is the same error that sb_loader prints when I try to load the dram stress test SB file.
>sb_loader.exe /f MX28_OBDS.sb
Looking for a STMP HID device for 10 seconds...
Found USB#VID_15A2&PID_004F#5&18F54CB7&0&2.
Downloading MX28_OBDS.sb to device.
. Error(-13) during download.
Quitting.
I also tried to created an ipl.sb file with IPL only:
options {
driveTag = 0x00;
flags = 0x01;
}
sources
{
ipl="ipl";
}
constants
{
IVT_ADDR = 0x8000;
}
section (0) {
load ipl;
load ivt (entry=ipl:main) > IVT_ADDR;
hab call IVT_ADDR;
}
This SB file loads fine in my board, but it does not start execution. I get that message on the command prompt that says the file was successfully loaded:
>sb_loader.exe /f ipl.sb
Looking for a STMP HID device for 10 seconds...
Found USB#VID_15A2&PID_004F#5&18F54CB7&0&2.
Downloading ipl.sb to device.
.Done.
Waiting for Device Removal for 10 seconds...
But the processor freezes (It does not reset using the reset switch) and I get nothing on the DUART
Hi Fernando,
you are right about the recovery mode.
Do you generate the sb file under a 32 bit or a 64 bit environment?
In the OBDS there are 2 versions of elftosb. One for 32 bit and the other for 64 bit environment. Maybe that's the problem.
Hi Stefan,
I use the 32 bit elftosb on Windows XP 32 bit.
The 64 bit version would not run on my environment.
Any other idea is appreciated!
When I try to load my .sb file using the Mfg tool with the following ucl.xml file:
<UCL>
<CFG>
<STATE name="Recovery" dev="IMX28"/>
<STATE name="Updater" dev="Updater" />
<DEV name="IMX28" vid="15A2" pid="004F"/>
<DEV name="Updater" vid="066F" pid="37FF" />
</CFG>
<LIST name="IRAM" desc="Run from internal RAM">
<CMD type="boot" body="Recovery" file="ddr-stress-test-mx28.sb" timeout="60">Booting Update Firmware.</CMD>
</LIST>
</UCL>
I get the error 1167 (log dump):
Wednesday, January 22, 2014 10:17:30
1 - Panel A Start processing IRAM <LIST/>.
Panel A Start <CMD/> type="boot" body="Recovery" file="ddr-stress-test-mx28.sb" timeout="60" onError="" text="Booting Update Firmware.".
1 - Panel A DoBoot() - Failed to load ddr-stress-test-mx28.sb to Recovery mode device. (err=1167)
1 - Panel A Finished <CMD/> type="boot" body="Recovery" file="ddr-stress-test-mx28.sb" timeout="60" onError="" text="Booting Update Firmware." FAIL code=1167.
Panel A: failed to run command: type="boot" body="Recovery" file="ddr-stress-test-mx28.sb" timeout="60" onError="" text="Booting Update Firmware." ,The device is not connected.
, Error code:1167
2 - Panel A Finished processing IRAM <LIST/> : FAIL code=1167.
Panel A UtpUpdate Event: DeviceRemoval Msg: (null) DevState: Disconnected OpState: WAITING_FOR_DEVICE
2 - Panel A Start processing IRAM <LIST/>.
Panel A UtpUpdate Event: DeviceArrival Msg: (null) DevState: Recovery OpState: OP_UNKNOWN_STATE
Panel A Start <CMD/> type="boot" body="Recovery" file="ddr-stress-test-mx28.sb" timeout="60" onError="" text="Booting Update Firmware.".
2 - Panel A DoBoot() - Failed to load ddr-stress-test-mx28.sb to Recovery mode device. (err=1167)
2 - Panel A Finished <CMD/> type="boot" body="Recovery" file="ddr-stress-test-mx28.sb" timeout="60" onError="" text="Booting Update Firmware." FAIL code=1167.
Panel A: failed to run command: type="boot" body="Recovery" file="ddr-stress-test-mx28.sb" timeout="60" onError="" text="Booting Update Firmware." ,The device is not connected.
, Error code:1167
I forgot to mention that the sb_loader.exe gives me the following error while loading my image.:
>sb_loader.exe /f test.sb
Downloading test.sb to device.
...CStHidDevice::Download() Error(-13) during Write data 63.
Quitting.
Error(-13) during download.
Quitting.
Hi Fernando,
i've nearly the same problem with a custom version of the OBDS here https://community.freescale.com/thread/317996
Could you please post the content of the linker file (mx28.ld or something)?
By the way 0x80508002 stands for "Unable to find NCB".
BR Stefan
Hi Stefan, the error happens because the boot config pins are tied to boot from NAND and there is no boot image on the NAND flash yet.
I cannot distribute the content of the linker file because the header says it is property of Freescale and it is confidential.
Anyway, I read your post and I compared the OBDS linker file with the DDR stress test linker file and I can say that the differences are minimal.
Basically, the DDR memory is replaced by the IRAM in the memory region: "IRAM (rwx) : ORIGIN = 0x00000000, LENGTH = 128K"
And the reset section (on OBDS it is called .vectors) is placed on the IRAM, as Ram Ramasamy did with his code: " } >IRAM".
I think that the problem is with the SB configuration file (mx28evk_mmcsd.bd), because the binaries from this ddr stress should be fine (and so the linker file too), since they were built by Freescale folks.
Thank you.
As far i know, sb_loader only works if the board is in recovery mode (USB boot mode). If it isn't problem you could try the SB configuration file from the led example in my thread.
The section 12.13.4 of the i.MX28 Reference Manual, says that the USB recovery mode is used when there is no boot image on the device configured in the boot config pins: "The loader also automatically starts recovery mode if a non-recoverable error is detected from any boot mode other than USB."
Actually, I can load the LED example and it works using the following SB configuration script:
sources
{
image=extern(0);
}
constants
{
IVT_ADDR = 0x1FF80;
}
section (0)
{
load image;
load ivt (entry = image:ResetHandler) > IVT_ADDR;
hab call IVT_ADDR;
}
It seems that this last call must be a "HAB call". If it is just "call", the code does not run. I also couldn't change the load address of the "image", but I was able to change the IVT_ADDR.