I was following this tutorial for bringing up my custom board based on Cyclone V (Enclustra Mercury SA1).
Everything went fine, but there is one specific problem which I wasn’t able to google how to resolve.
When the board is off for longer period of time (e.g. over night), after first power-up I get the following from u-boot preloader:
U-Boot SPL 2013.01.01 (Nov 21 2016 - 16:21:11) BOARD : Altera SOCFPGA Cyclone V Board CLOCK: EOSC1 clock 50000 KHz CLOCK: EOSC2 clock 25000 KHz CLOCK: F2S_SDR_REF clock 0 KHz CLOCK: F2S_PER_REF clock 0 KHz CLOCK: MPU clock 800 MHz CLOCK: DDR clock 400 MHz CLOCK: UART clock 100000 KHz CLOCK: MMC clock 50000 KHz CLOCK: QSPI clock 100000 KHz RESET: COLD INFO : Watchdog enabled SDRAM: Initializing MMR registers SDRAM: Calibrating PHY SEQ.C: Preparing to start memory calibration SEQ.C: CALIBRATION PASSED SDRAM: 1024 MiB ALTERA DWMMC: 0 Card did not respond to voltage select! spl: mmc init failed: err - -17 ### ERROR ### Please RESET the board ###
Preloader does 3 “warm” resets, and fails. If I hard-reset the board, It boots normally, boots Linux, and continues to work.
Sometimes it happens that after 1h of being off, preloader fails, and after warm reset it boots normally.
What I have already tried:
- My original design had MMC clock on 25 000 kHz, I tried to increase the clock to 50 000 kHz
- I tried with two different SD cards, both microSD HC class 4, one is 4GB, second is 8GB
- I looked through source of preloader, which generates this error, it is in mmc.c file. This happens after timeout occurs, after preloader sends test command to SD card. At least for me, this was not helpful.
Weird thing is that preloader is also stored on SD card (raw binary partition, number 3, size 1 MB), which means that SD card works, if the preloader is loaded from it…
Does anyone have any idea what is wrong here?