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





