I have a custom i.MX6ULL board (based on the EVK). The board will almost always hang at "Starting kernel ..." at the first boot after power-on, however if the board is reset after that then it works fine. Also, if going into u-boot and delaying there a while (e.g. loading kernel via TFTP) before proceeding with boot then it works fine. Additionally, holding the reset button for approximately 10s at power-on and then releasing it will result in the board booting fine.
I have done DDR setup using the Register Programming Aid spreadsheet, and also done calibration using the DDR Stress Tester Tool. I have run the DDR Stress Test for over 1,000 iterations with no problems. I have also run memtester with no problems.
Occasionally I will see other errors / crash dumps on first boot after power-on - in u-boot, or during Kernel boot - however usually it will just hang at "Starting kernel ...". I have occasionally seen "Error: unrecognized/unsupported processor variant (0x410fc075)." when earlyprintk is enabled.
The board is booting from microSD, and I have also set up a u-boot script which copies the Kernel image to two separate locations in RAM and then compares them, which results in zero differences, however the board still hangs at "Starting kernel ...".
I have added additional large decoupling capacitors on the power-supply however this made no difference.
Any ideas regarding what the problem might be, or how to debug this?
解決済! 解決策の投稿を見る。
Seems like I've managed to solve this by trial-and-error tinkering with the Drive Strength settings in the DDR calibration.
Advice to hardware designers: Take the DDR hardware requirements (length-matching, impedance-matching, etc) seriously!
That said, I can't seem to make sense of why the particular Drive Strength selected seems to have solved this - it has really just been a case of trial-and-error testing until it worked properly. The track impedances are 68R and the diff-pair impedance 96R (individual trace 57R), and the setting which has solved this has been R0/5 (48R); setting R0/4 (60R), which seems closest to the calculated impedances, does not work at all. The original setting, which worked the "next best", was R0/6 (40R). So I have no idea how to "calculate" the Drive Strength from the calculated impedances, it has just been a case of trial-and-error testing till it worked.
Any advice regarding how to "calculate" the Drive Strengths (or what I am missing) would be appreciated!
Seems like I've managed to solve this by trial-and-error tinkering with the Drive Strength settings in the DDR calibration.
Advice to hardware designers: Take the DDR hardware requirements (length-matching, impedance-matching, etc) seriously!