SD Card: Error mounting file System error: -134

Hello,

I am trying to use an sdcard with the nrf54l15 DK board with the 2.9.1 sdk. However I encounter "<err> fatfs: Storage init ERROR! error: -134" when calling the disk_access_init() function

My code described below is based on the fatfs example

#include <zephyr/kernel.h>
#include <zephyr/device.h>
#include <zephyr/logging/log.h>
#include <zephyr/fs/fs.h>
#include <ff.h>
#include <zephyr/pm/device.h>
#include <zephyr/pm/device_runtime.h>
#include <zephyr/drivers/spi.h>
#include <zephyr/drivers/gpio.h>
#include "hardware/gpio.h"
#include "sdcard/sdcard.h"

#define DISK_DRIVE_NAME "SD"
#define DISK_MOUNT_PT "/SD:"
#define FS_RET_OK FR_OK

LOG_MODULE_REGISTER(main);

static const char *disk_mount_pt = DISK_MOUNT_PT;

static FATFS fat_fs;
static struct fs_mount_t mp = {
	.type = FS_FATFS,
	.fs_data = &fat_fs,
};

struct gpio_dt_spec sd_gpio = GPIO_DT_SPEC_GET(SD_ENABLE_NODE, gpios);

int main(void)
{
	LOG_INF("Starting program");
	set_power_on_sd(&sd_gpio, 1);
	int ret_pinConfig = gpio_pin_configure_dt(&sd_gpio, GPIO_OUTPUT_INACTIVE);
	k_msleep(250);
	LOG_INF("Pin Config status Code %d",ret_pinConfig);
	
	sdcard_disc_init();
	mp.mnt_point = disk_mount_pt;

	int res = fs_mount(&mp);


	if (res == FS_RET_OK) {
		LOG_INF("Disk mounted.\n");
		/* Try to unmount and remount the disk */
		res = fs_unmount(&mp);
		if (res != FS_RET_OK) {
			LOG_INF("Error unmounting disk\n");
			return res;
		}
		res = fs_mount(&mp);
		if (res != FS_RET_OK) {
			LOG_INF("Error remounting disk\n");
			return res;
		}

		if (lsdir(disk_mount_pt) == 0) {
			if (create_some_entries(disk_mount_pt)) {
				lsdir(disk_mount_pt);
			}
		}
	} else {
		LOG_INF("Error mounting disk.\n");
	}

	fs_unmount(&mp);
	LOG_INF("Exiting program. \n");
	return 0;
}

The associated function for the sdcard_disc_init(void)

int sdcard_disc_init(void) 
{
	/* raw disk i/o */
	static const char* disk_pdrv = "SD";
	uint64_t memory_size_mb;
	uint32_t block_count;
	uint32_t block_size;

	// Re initialize the SD Card
	int status = disk_access_status(disk_pdrv);
	LOG_INF("Disk Status: %d", status);
	int res = FR_OK;

	if (status == 1){
		res = disk_access_init(disk_pdrv);
		LOG_INF("DISK Acces init code %d",res);

	}
	if (res == FR_OK) {	
		res = disk_access_ioctl(disk_pdrv, DISK_IOCTL_GET_SECTOR_COUNT, &block_count);
		if (res == FR_OK) {
			LOG_INF("Block count %u", block_count);
			res = disk_access_ioctl(disk_pdrv, DISK_IOCTL_GET_SECTOR_SIZE, &block_size);
			if (res == FR_OK) {
				LOG_INF("Sector size %u", block_size);
				memory_size_mb = (uint64_t)block_count*  block_size;
				LOG_INF("Memory Size(MB) %u\n", (uint32_t)(memory_size_mb >> 20));
			} else {
				LOG_ERR("Unable to get sector size. error: %d", res);
			}
		} else {
			LOG_ERR("Unable to get sector count. error: %d", res);
		}
	} else {
		LOG_ERR("Storage init ERROR! error: %d", res);
	}
	return res;
}

Here is the prj.conf

CONFIG_LOG=y
CONFIG_PRINTK=y
CONFIG_GPIO=y

#Sd logs
CONFIG_SDHC_LOG_LEVEL_DBG=y
CONFIG_SD_LOG_LEVEL_DBG=n

CONFIG_SPI=y

#sdcard
#CONFIG_DISK_DRIVER_SDMMC=y
CONFIG_DISK_ACCESS=y
CONFIG_FILE_SYSTEM=y
CONFIG_FAT_FILESYSTEM_ELM=y
CONFIG_MAIN_STACK_SIZE=8192
CONFIG_SDHC=y

And the overlay used to configure the SPI node

&pinctrl {
    spi20_default: spi20_default {
        group1 {
            psels = <
            NRF_PSEL(SPIM_SCK,  1, 4)
            NRF_PSEL(SPIM_MOSI, 1, 3)
            NRF_PSEL(SPIM_MISO, 1, 5)
            >;
        };
    };

    spi20_sleep: spi20_sleep {
        group1 {
            psels = <
            NRF_PSEL(SPIM_SCK,  1, 4)
            NRF_PSEL(SPIM_MOSI, 1, 3)
            NRF_PSEL(SPIM_MISO, 1, 5)
            >;
            low-power-enable;
        };
    };
};
/ {
    sdcard_gpio{
        compatible = "gpio-keys";
        sm: sd_mic_enable_0 {
            gpios = <&gpio1 2 GPIO_ACTIVE_LOW>;
            label = "SD Card Switch";
        };
    };

    aliases {
        sm01 = &sm;
    };
};

&spi20 {
    status = "okay";
    compatible = "nordic,nrf-spim";
    pinctrl-0 = <&spi20_default>;
    pinctrl-1 = <&spi20_sleep>;
    pinctrl-names = "default", "sleep";

    cs-gpios = <&gpio1 6 GPIO_ACTIVE_LOW>; // P1.06 - SD_nCS
    sdhc0: sdhc@0 {
        compatible = "zephyr,sdhc-spi-slot";
        reg = <0>;
        status = "okay";
        mmc {
            compatible = "zephyr,sdmmc-disk";
            status = "okay";
        };
        spi-max-frequency = <DT_FREQ_M(25)>;
    };

};

&gpiote20 {
    status = "okay";
};

// Disable NFC to use NFC pins as GPIOs
&nfct {
    status = "disabled";
};
&uicr {
    nfct-pins-as-gpios;
    status = "disabled";
};
// Disable UART to use UART pins as GPIOs
&uart20 {
    status = "disabled";
};
// Redirect logs (printk) to UART 30
&uart30 {
    status = "okay";
    current-speed = <115200>;
    pinctrl-0 = <&uart30_default>;
    pinctrl-1 = <&uart30_sleep>;
    pinctrl-names = "default", "sleep";
};
&{/chosen} {
    zephyr,console = &uart30;
    zephyr,shell-uart = &uart30;
    zephyr,uart-mcumgr = &uart30;
};

And When activating the SD logs these are the logs generated

*** Booting nRF Connect SDK v2.9.1-60d0d6c8d42d ***
*** Using Zephyr OS v3.7.99-ca954a6216c9 ***
[00:00:00.429,620] <inf> main: Starting program
[00:00:00.429,626] <inf> hardware: Power on mic and SD card is set !
[00:00:00.429,634] <inf> fatfs: Disk Status: 1
[00:00:00.433,221] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd0 arg 0x0
[00:00:00.454,282] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd8 arg 0x1aa
[00:00:00.455,001] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd0 arg 0x0
[00:00:00.455,716] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd8 arg 0x1aa
[00:00:00.476,960] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd0 arg 0x0
[00:00:00.477,688] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd8 arg 0x1aa
[00:00:00.478,404] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd0 arg 0x0
[00:00:00.499,401] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd8 arg 0x1aa
[00:00:00.500,130] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd0 arg 0x0
[00:00:00.500,844] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd8 arg 0x1aa
[00:00:00.522,123] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd0 arg 0x0
[00:00:00.522,854] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd8 arg 0x1aa
[00:00:00.523,573] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd0 arg 0x0
[00:00:00.544,587] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd8 arg 0x1aa
[00:00:00.545,306] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd0 arg 0x0
[00:00:00.546,023] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd8 arg 0x1aa
[00:00:00.567,294] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd0 arg 0x0
[00:00:00.568,011] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd8 arg 0x1aa
[00:00:00.568,730] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd0 arg 0x0
[00:00:00.589,739] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd8 arg 0x1aa
[00:00:00.590,461] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd0 arg 0x0
[00:00:00.591,178] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd8 arg 0x1aa
[00:00:00.612,440] <inf> sd: Card does not support CMD8, assuming legacy card
[00:00:00.612,457] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd0 arg 0x0
[00:00:00.613,173] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd58 arg 0x0
[00:00:00.613,988] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd55 arg 0x0
[00:00:00.635,017] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd41 arg 0x0
[00:00:00.635,733] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd58 arg 0x0
[00:00:00.636,444] <inf> fatfs: DISK Acces init code -134
[00:00:00.636,450] <err> fatfs: Storage init ERROR! error: -134
[00:00:00.640,102] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd0 arg 0x0
[00:00:00.671,241] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd8 arg 0x1aa
[00:00:00.671,958] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd0 arg 0x0
[00:00:00.672,675] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd8 arg 0x1aa
[00:00:00.693,923] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd0 arg 0x0
[00:00:00.694,636] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd8 arg 0x1aa
[00:00:00.695,352] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd0 arg 0x0
[00:00:00.716,393] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd8 arg 0x1aa
[00:00:00.717,112] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd0 arg 0x0
[00:00:00.717,827] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd8 arg 0x1aa
[00:00:00.739,104] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd0 arg 0x0
[00:00:00.739,819] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd8 arg 0x1aa
[00:00:00.740,533] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd0 arg 0x0
[00:00:00.761,545] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd8 arg 0x1aa
[00:00:00.762,260] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd0 arg 0x0
[00:00:00.762,977] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd8 arg 0x1aa
[00:00:00.784,227] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd0 arg 0x0
[00:00:00.784,942] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd8 arg 0x1aa
[00:00:00.785,660] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd0 arg 0x0
[00:00:00.806,698] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd8 arg 0x1aa
[00:00:00.807,412] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd0 arg 0x0
[00:00:00.808,126] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd8 arg 0x1aa
[00:00:00.829,370] <inf> sd: Card does not support CMD8, assuming legacy card
[00:00:00.829,387] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd0 arg 0x0
[00:00:00.830,104] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd58 arg 0x0
[00:00:00.830,921] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd55 arg 0x0
[00:00:00.851,978] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd41 arg 0x0
[00:00:00.852,692] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd58 arg 0x0
[00:00:00.853,403] <err> fs: fs mount error (-5)
[00:00:00.853,411] <inf> main: Error mounting disk.

[00:00:00.853,423] <err> fs: fs not mounted (mp == 0x20000008)
[00:00:00.853,429] <inf> main: Exiting program. 

Your help is kindly appreciated,

thanks in advance for your help.

NBH

Related