Hello,
I am trying to bring up the Zephyr on imxrt1060 with Murata module but on configuring sdio speed to SDR50 SDIO enumeration Fails by stating SD tunning failed.
Below is the error log:
[00:00:02.819,000] <dbg> usdhc: imx_usdhc_set_io: SDHC I/O: bus width 4, clock 400000Hz, card power ON, voltage 1.8V
[00:00:02.819,000] <err> sd: Raised card bus width to 4 bits
[00:00:02.819,000] <err> sd: Select and set bus speed
[00:00:02.835,000] <dbg> sd: sdio_set_bus_speed: Setting bus clock to: 100000000
[00:00:02.835,000] <dbg> usdhc: imx_usdhc_set_io: SDHC I/O: bus width 4, clock 100000000Hz, card power ON, voltage 1.8V
[00:00:02.836,000] <dbg> usdhc: imx_usdhc_set_io: BUS CLOCK: 99000000
[00:00:02.864,000] <err> usdhc: imx_usdhc_transfer USDHC_TransferNonBlocking kStatus_USDHC_ReTuningRequest error :6505
[00:00:02.864,000] <err> usdhc: imx_usdhc_execute_tuning imx_usdhc_transfer ret :-11
[00:00:02.864,000] <err> sd: SD tuning failed: -11
on further debug found that USDHC_TransferNonBlocking is failing by returns kStatus_USDHC_ReTuningRequest
Can please help in solving this issue.
NOTE: I don't see any issue on configuring SDR12 and SDR25
as of now I am downgrading the speed to SDR25 with this firmware is loading but sometimes(1 out of 10 times) notice usdhc_transfer Failure with reason TRANSFER_CMD_FAILED at the multiple places(sdio_read_cccr, sdio_read_cis and sdio_set_bus_speed). – this issue is seen across SDR50,SDR25 & SDR12 modes.
Can you please help me in resolving this issue.
I am using 2EA Murata module.
I am configuring to SDR50 by adding the below line in the function :sdio_set_bus_speed() before the switch case
card->card_speed = SD_TIMING_SDR50;
I am using murata 2EA module..
Hi @Jack007,
I apologize but I don't quite understand where you are doing the modifications that you mention. I am currently looking at the SD driver "fsl_usdhc" for "sdio_set_bus_speed()" and don't see the function or the switch case you are referring to.
BR,
Edwin.
I am modifying the SDIO speed in the file: zephyr/subsys/sd/sdio.c
Function : sdio_set_bus_speed(struct sd_card *card)
Below is the function call sequence
sdio_set_bus_speed() -- sdhc_set_io() -- imx_usdhc_set_io() -- USDHC_SetSdClock()
Finally USDHC_SetSdClock will get the parameter from the sdio_set_bus_speed
Hi @Jack007,
Could you please specify which Murata module you are currently using as well as the process you are using to set speed to SDR50 on it?
BR,
Edwin.
In the Function sdio_set_bus_speed() i am doing below change to configure to SDR50
card->card_speed = SD_TIMING_SDR50;