SDHC issues - differences between NCS Zephyr and Downstream Zephyr?

Trying to get SDHC access working with a Laird MG100 (nrf52840) using NCS Zephyr. I'm using the Zephyr `fat_fs` sample as a starting point.

Regardless of the SDCard I use, sending CMD8 to the subsystem via `sdhc_request()` always returns 0 when using NCS Zephyr.

From `\nordic\v2.3.0\zephyr\subsys\sd\sd.c`

/* Sends CMD8 during SD initialization */
static int sd_send_interface_condition(struct sd_card *card)
{
	struct sdhc_command cmd = {0};
	int ret;
	uint32_t resp;

	cmd.opcode = SD_SEND_IF_COND;
	cmd.arg = SD_IF_COND_VHS_3V3 | SD_IF_COND_CHECK;
	cmd.response_type = (SD_RSP_TYPE_R7 | SD_SPI_RSP_TYPE_R7);
	cmd.timeout_ms = CONFIG_SD_CMD_TIMEOUT;
	
	ret = sdhc_request(card->sdhc, &cmd, NULL);
	if (ret) {
		LOG_DBG("SD CMD8 failed with error %d", ret);
		/* Retry */
		return SD_RETRY;
	}
	
	if (card->host_props.is_spi) {
		resp = cmd.response[1];
	} else {
		resp = cmd.response[0];
	}
	/* 
	
	Both cmd.response[0] and cmd.response[1] are consistently 0.
	This means that the following check always fails.
	*/

	if ((resp & 0xFF) != SD_IF_COND_CHECK) {
		LOG_INF("Legacy card detected, no CMD8 support");
		/* Retry probe */
		return SD_RETRY;
	}
	if ((resp & SD_IF_COND_VHS_MASK) != SD_IF_COND_VHS_3V3) {
		/* Card does not support 3.3V */
		return -ENOTSUP;
	...
	
}


This results in overall initialization failure:

*** Booting Zephyr OS build v3.2.99-ncs2 ***
[00:00:02.078,033] <inf> sd: sd_send_interface_condition: Legacy card detected, no CMD8 support
[00:00:02.088,195] <inf> sd: sd_send_interface_condition: Legacy card detected, no CMD8 support
[00:00:02.098,358] <inf> sd: sd_send_interface_condition: Legacy card detected, no CMD8 support
[00:00:02.108,520] <inf> sd: sd_send_interface_condition: Legacy card detected, no CMD8 support
[00:00:02.118,682] <inf> sd: sd_send_interface_condition: Legacy card detected, no CMD8 support
[00:00:02.128,845] <inf> sd: sd_send_interface_condition: Legacy card detected, no CMD8 support
[00:00:02.139,038] <inf> sd: sd_send_interface_condition: Legacy card detected, no CMD8 support
[00:00:02.149,200] <inf> sd: sd_send_interface_condition: Legacy card detected, no CMD8 support
[00:00:02.159,362] <inf> sd: sd_send_interface_condition: Legacy card detected, no CMD8 support
[00:00:02.169,525] <inf> sd: sd_send_interface_condition: Legacy card detected, no CMD8 support
[00:00:02.179,687] <inf> sd: sd_send_interface_condition: Legacy card detected, no CMD8 support
[00:00:02.189,117] <inf> sd: sd_common_init: Card does not support CMD8, assuming legacy card
[00:00:02.199,859] <err> sd: sd_check_card_type: No usable card type was found
[00:00:02.208,038] <err> sd: sd_command_init: Unusable card
[00:00:02.214,538] <err> file_io: mount_sd_card: Storage init ERROR!

[00:00:04.250,122] <inf> sd: sd_send_interface_condition: Legacy card detected, no CMD8 support
[00:00:04.260,314] <inf> sd: sd_send_interface_condition: Legacy card detected, no CMD8 support
[00:00:04.270,477] <inf> sd: sd_send_interface_condition: Legacy card detected, no CMD8 support
[00:00:04.280,670] <inf> sd: sd_send_interface_condition: Legacy card detected, no CMD8 support
[00:00:04.290,832] <inf> sd: sd_send_interface_condition: Legacy card detected, no CMD8 support
[00:00:04.301,025] <inf> sd: sd_send_interface_condition: Legacy card detected, no CMD8 support
[00:00:04.311,157] <inf> sd: sd_send_interface_condition: Legacy card detected, no CMD8 support
[00:00:04.321,350] <inf> sd: sd_send_interface_condition: Legacy card detected, no CMD8 support
[00:00:04.331,512] <inf> sd: sd_send_interface_condition: Legacy card detected, no CMD8 support
[00:00:04.341,705] <inf> sd: sd_send_interface_condition: Legacy card detected, no CMD8 support
[00:00:04.351,867] <inf> sd: sd_send_interface_condition: Legacy card detected, no CMD8 support
[00:00:04.361,297] <inf> sd: sd_common_init: Card does not support CMD8, assuming legacy card
[00:00:04.372,039] <err> sd: sd_check_card_type: No usable card type was found
[00:00:04.380,218] <err> sd: sd_command_init: Unusable card
[00:00:04.386,749] <err> fs: fs_mount: fs mount error (-5)
Error mounting disk.


This isn't the case when using downstream zephyr. While I still get Legacy card detected error, it seems that I'm still able to read the card.

*** Booting Zephyr OS build zephyr-v3.3.0-1195-g9a759025d912 ***
[00:00:00.356,781] <inf> sd: Legacy card detected, no CMD8 support
[00:00:00.357,574] <inf> sd: Legacy card detected, no CMD8 support
[00:00:00.358,337] <inf> sd: Legacy card detected, no CMD8 support
[00:00:00.359,100] <inf> sd: Legacy card detected, no CMD8 support
[00:00:00.359,832] <inf> sd: Legacy card detected, no CMD8 support
[00:00:00.360,595] <inf> sd: Legacy card detected, no CMD8 support
[00:00:00.361,358] <inf> sd: Legacy card detected, no CMD8 support
[00:00:00.362,121] <inf> sd: Legacy card detected, no CMD8 support
[00:00:00.362,884] <inf> sd: Legacy card detected, no CMD8 support
[00:00:00.363,647] <inf> sd: Legacy card detected, no CMD8 support
[00:00:00.364,379] <inf> sd: Legacy card detected, no CMD8 support
[00:00:00.364,410] <inf> sd: Card does not support CMD8, assuming legacy card
[00:00:06.406,860] <inf> sd: Maximum SD clock is under 25MHz, using clock of 8000000Hz


My suspicion is that there is some critical difference that I can't find between NCS Zephyr and Downstream Zephyr, though there may be some other underlying issue at work here.

Can anyone provide any insight on how to resolve this?

Cheers,


S.


Parents Reply
  • This issues persists in NCS 2.4.0

    *** Booting Zephyr OS build v3.3.99-ncs1 ***
    [00:00:00.074,859] <err> file_io: mount_sd_card: Storage init ERROR!
    [00:00:00.082,183] <err> fs: fs_mount: fs mount error (-5)
    Error mounting disk.


    During a pristine build, I get the following message from CMake:

    CMake Warning at C:/nordic/v2.4.0/zephyr/CMakeLists.txt:838 (message):
      No SOURCES given to Zephyr library: drivers__sdhc
    
      Excluding target from build.



Children
Related