nRF52840 spi access SD card ERROR

software: ncs 2.5.0,  zephyr/samples/subsys/fs/fs_sample

hardware: nRF52840 (not DK, designed by customer) and nRF52832 (not DK, designed by customer) 

Step1: build within nRF52840

prj.conf like this:

CONFIG_DISK_ACCESS=y
CONFIG_LOG=y
CONFIG_FILE_SYSTEM=y
CONFIG_FAT_FILESYSTEM_ELM=y
CONFIG_PRINTK=y
CONFIG_MAIN_STACK_SIZE=2048

overlay file like this:

/*
 * Copyright (c) 2023 Nordic Semiconductor ASA
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/* Because FAT FS needs at least 64kiB partition and default
 * storage_partition is 32kiB for that board, we need to reorgatnize
 * partitions to get at least 64KiB.
 * This overlay removes image slot partitions and strips each of 64kiB,
 * and removes the storage partition to add the additional 2*64kiB to
 * it.
 */
/delete-node/ &slot0_partition;
/delete-node/ &slot1_partition;
/delete-node/ &storage_partition;

&flash0 {

	partitions {
		compatible = "fixed-partitions";
		#address-cells = <1>;
		#size-cells = <1>;

		slot0_partition: partition@c000 {
			reg = <0x0000C000 0x00066000>; // 408 KiB
		};
		slot1_partition: partition@72000 {
			reg = <0x00072000 0x00066000>; // 408 KiB
		};

		storage_partition: partition@d8000 { 
			label = "storage";
			reg = <0x000d8000 0x00028000>; // 160 KiB
		};
	};
};

/ {
	msc_disk0 {
		status="okay";
		compatible = "zephyr,flash-disk";
		partition = <&storage_partition>;
		disk-name = "SD";
		/* cache-size == page erase size */
		cache-size = <4096>;
	};
};

download and run uart console output like this:

*** Booting nRF Connect SDK v2.5.0 ***
[00:00:00.774,841] <inf> flashdisk: Initialize device SD
[00:00:00.774,841] <inf> flashdisk: offset d8000, sector size 512, page size 4096, volume size 163840
[00:00:00.774,963] <inf> main: Block count 320
Sector size 512
Memory Size(MB) 0
[00:00:00.775,054] <inf> flashdisk: Initialize device SD
[00:00:00.775,085] <inf> flashdisk: offset d8000, sector size 512, page size 4096, volume size 163840
Disk mounted.

Listing dir /SD: ...
[FILE] SOME.DAT (size = 0)
[DIR ] SOME

it seems very good, but not my sd card functions.

Step2: build with nRF52832

prj.conf like this(same with nRF52840):

CONFIG_DISK_ACCESS=y
CONFIG_LOG=y
CONFIG_FILE_SYSTEM=y
CONFIG_FAT_FILESYSTEM_ELM=y
CONFIG_PRINTK=y
CONFIG_MAIN_STACK_SIZE=2048

there is no overlay file.

download and run uart console output error like this:

*** Booting nRF Connect SDK v2.5.0 ***
[00:00:00.265,777] <err> main: Storage init ERROR!
[00:00:00.265,808] <err> fs: fs mount error (-5)
Error mounting disk.
[00:00:00.265,838] <err> fs: fs not mounted (mp == 0x20000000)

add overlay file like this(also errors like above):

/delete-node/ &slot0_partition;
/delete-node/ &slot1_partition;
/delete-node/ &storage_partition;


&flash0 {
	partitions {
		compatible = "fixed-partitions";
		#address-cells = <1>;
		#size-cells = <1>;

		slot0_partition: partition@0 {
			reg = <0x00000000 0x00140000>;  // 80 KiB
		};

		slot1_partition: partition@140000 {
			reg = <0x00140000 0x00140000>;  // 80 KiB
		};

		storage_partition: partition@280000 {
			label = "storage";
			reg = <0x00280000 0x00014000>;  // 80 KiB
		};
	};
};


/{
    msc_disk0 {
        status = "okay";
        compatible = "zephyr,flash-disk";
        partition = <&storage_partition>;
        disk-name = "SD";
        cache-size = <4096>;
    };
};
Step2: build with nRF52832 (do as this)

prj.conf like this(add some CONFIG):

CONFIG_DISK_ACCESS=y
CONFIG_LOG=y
CONFIG_FILE_SYSTEM=y
CONFIG_FAT_FILESYSTEM_ELM=y
CONFIG_PRINTK=y
CONFIG_MAIN_STACK_SIZE=2048

CONFIG_DISK_DRIVER_SDMMC=y
CONFIG_SPI=y
# SD
CONFIG_MMC_STACK=y
CONFIG_SD_LOG_LEVEL_DEFAULT=y
CONFIG_SPI_NRFX_RAM_BUFFER_SIZE=8
CONFIG_SDHC=y
CONFIG_SDHC_LOG_LEVEL_DEFAULT=y
CONFIG_NRFX_SPI1=y

overlay file like this:

/ {
	pinctrl: pin-controller 
	{
		compatible = "nordic,nrf-pinctrl";
		spi1_default: spi1_default {
			group1 {
				psels = <NRF_PSEL(SPIM_SCK, 0, 2)>,
					<NRF_PSEL(SPIM_MOSI, 0, 4)>,
					<NRF_PSEL(SPIM_MISO, 0, 28)>;
			};
		};
	
		spi1_sleep: spi1_sleep {
			group1 {
				psels = <NRF_PSEL(SPIM_SCK, 0, 2)>,
					<NRF_PSEL(SPIM_MOSI, 0, 4)>,
					<NRF_PSEL(SPIM_MISO, 0, 28)>;
				low-power-enable;
			};
		};
	};
};

&spi1 {
    status = "okay";
    cs-gpios = < &gpio0 3 GPIO_ACTIVE_LOW>;
	sdhc-spi-slot@0 {
		compatible = "zephyr,sdhc-spi-slot";
		reg = <0x0 >;
		spi-max-frequency = <8000000>;
		status = "okay";
		
		mmc {
			compatible = "zephyr,sdmmc-disk";
			status = "okay";
			
		};	
	};
};

download and run uart console output like this(SUCCESS access SD card):

*** Booting nRF Connect SDK v2.5.0 ***
[00:00:00.610,870] <inf> sd: Maximum SD clock is under 25MHz, using clock of 8000000Hz
[00:00:00.611,907] <inf> main: Block count 15597568
Sector size 512
Memory Size(MB) 7616
Disk mounted.

Listing dir /SD: ...
[DIR ] NAVISOFT
[DIR ] LOST.DIR
[DIR ] SOUNDS
[DIR ] ANDROID
[FILE] NORDIC.TXT (size = 32)

the DIR is my SD card's DIR, it is very good for me. But I build for nRF52840, only change the SD card pins, overlay like this:

/ {
	pinctrl: pin-controller 
	{
		compatible = "nordic,nrf-pinctrl";
		spi1_default: spi1_default {
			group1 {
				psels = <NRF_PSEL(SPIM_SCK, 0, 23)>,
					<NRF_PSEL(SPIM_MOSI, 0, 20)>,
					<NRF_PSEL(SPIM_MISO, 0, 21)>;
			};
		};
	
		spi1_sleep: spi1_sleep {
			group1 {
				psels = <NRF_PSEL(SPIM_SCK, 0, 23)>,
					<NRF_PSEL(SPIM_MOSI, 0, 20)>,
					<NRF_PSEL(SPIM_MISO, 0, 21)>;
				low-power-enable;
			};
		};
	};
};

&spi1 {
    status = "okay";
    cs-gpios = < &gpio0 19 GPIO_ACTIVE_LOW>;
	sdhc-spi-slot@0 {
		compatible = "zephyr,sdhc-spi-slot";
		reg = <0x0 >;
		spi-max-frequency = <24000000>;
		status = "okay";
		
		mmc {
			compatible = "zephyr,sdmmc-disk";
			status = "okay";
			
		};	
	};
};

but download and run uart console output error like this (same error like this):

*** Booting nRF Connect SDK v2.5.0 ***
[00:00:01.026,214] <err> spi_nrfx_spi: Timeout waiting for transfer complete
[00:00:01.026,245] <err> sdhc_spi: Card SCLK init sequence failed
[00:00:01.026,275] <err> sd: Could not disable card power via SDHC
[00:00:01.026,275] <err> main:  1 - Storage init ERROR!
[00:00:01.227,508] <err> spi_nrfx_spi: Timeout waiting for transfer complete
[00:00:01.227,539] <err> sdhc_spi: Card SCLK init sequence failed
[00:00:01.227,539] <err> sd: Could not disable card power via SDHC
[00:00:01.227,569] <err> fs: fs mount error (-5)
Error mounting disk.
[00:00:01.227,600] <err> fs: fs not mounted (mp == 0x20000000)

Question:

how can I change prj.conf and overlay file for nRF52840 access SD card? thanks.

Parents Reply Children
No Data
Related