We are currently using the omap3530 in a device. For this device we require the boot reliability to be very high. As such we have a test that powers down the device, waits, then powers the device back up. We then measure if the boot was successful. This test shows yields a few failures that mainly come from the omap booting from nand rather than the intended MMC.
Here is a printout of the boot in normal operation:
Texas Instruments X-Loader 1.5.0 (Apr 11 2011 - 09:47:56)
OMAP3530-GP ES3.1
Board revision: 0
Reading boot sector
Loading u-boot.bin from mmc
After a lot of investigation we have found the following:
The issue of nand booting is made worse by power fluctuations on boot. If we take the power cord and jiggle it rapidly then quickly plug it in it has a 75% chance of booting from nand rather than the MMC. This is not the normal operational scenario however it allows us to see the problem more frequently. Under the normal operational conditions nand boots occur 1%-5% of the boots.
After modifying the x-loader with print statements it was found that the MMC is not ready and fails so it x-loader proceeds to boot from nand. The MMC fails at these lines of code:
argument = mmc_card_cur->RCA << 16;
ret_val = mmc_send_cmd(MMC_CMD7_SELECT, argument, resp);
if (ret_val != 1)
return ret_val;
It seems to be power related. The card gets into a state where it cannot be booted from until it is power cycled again.
I have the following questions:
-
Is there a way to fix this in software? Can I reset the state machine on the card to a level that would make CMD7 pass? Or is that not possible except through a power cycle?
-
Would a new version of the U-Boot SPL help with this? If so could you point me to a repo for download?
-
I only want to boot from the MMC and not from nand. With this constraint can I modify the x-loader in any way to make it more reliable?
-
Is there some sort of hardware power constraint that I am not following that I could follow to increase the reliability of the MMC being ready and allowed to boot from?