This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Need a working example of using an SD card with FAT filesystem on the nRF9160.

There is a demo zephyr/samples/subsys/fa/fat_fs.
This purports to mount an SD card.

Is this for the unpopulated SD socket on the nRF9160 board?

The ticket https://devzone.nordicsemi.com/f/nordic-q-a/58558/reading-sd-card-on-nrf9160dk
talks about using an Adafruit SD breakout board over SPI.
These issues seem to be with earlier versions of the SDK.

It says..

Hi,

I am using adafruit micro-sd breakout board and kingston micro sd card 8GB which is formatted to FAT32 Filesystem.
Connections are as follow:
SCK (Pin 11) -> CLK
MOSI (Pin 12) -> DI
MISO (Pin 13) -> DO
CS (Pin 10) -> CS

It also includes an image and it appears to match these connections.
However, the overlay file listed later in the same ticket has different pins.



There are two versions of the overlay file...

Hello,

Attached is a working project using SPI3. The output is shown in the image.

&spi3 {
        compatible = "nordic,nrf-spim";
        status = "okay";
        sck-pin = <10>;
        mosi-pin = <11>;
        miso-pin = <12>;

        cs-gpios = <&gpio0 13 0>;

        sdhc0: sdhc@0 {
                compatible = "zephyr,mmc-spi-slot";
                reg = <0>;
                status = "okay";
                label = "SDHC0";
                spi-max-frequency = <24000000>;
        };
};

But earlier in the same file it has:
/*
 * Copyright (c) 2019 Tavish Naruka <[email protected]>
 *
 * SPDX-License-Identifier: Apache-2.0
 */

&spi3 {
        status = "okay";
        cs-gpios = <&gpio0 16 0>;

        sdhc0: sdhc@0 {
                compatible = "zephyr,mmc-spi-slot";
                reg = <0>;
                status = "okay";
                label = "SDHC0";
                spi-max-frequency = <24000000>;
        };
};

&spi3 {
        status = "okay";
        sck-pin = <19>;
        mosi-pin = <18>;
        miso-pin = <17>;
};


At the end there is a link to another ticket https://devzone.nordicsemi.com/f/nordic-q-a/59430/nrf9160-sd-card-access-via-spi/242347#242347
that says "The solution to this problem is to set the "Size of RAM buffers for SPIM peripherals" to some number. If the size is set to 0, the SPI transceive function will always return error."
However, my SDK (v1.5) has this set properly.

Has anyone at Nordic got this working?

  • Hello Håkon,

    I did find a way to format (FAT32) the micro SD card.  But that did not make a difference.  I did try my 8GB card and it successfully read it but with the same mounting error

  • Mike,

    You should use the SD association formatter to make sure the format is right.,

    I see you got some information off the SD but it is unclear what is different between yours and mine.
    Ar you on 15.1 or head?

  • Hello Keith,

    First I am using the master branch (not Tag v1.5.x) which is required to use the CONFIG_DISK_DRIVER_SDMMC=y setting.

    I have formatted both the 8GB and 32GB SanDisk microSDHC cards as FAT32 and exFAT but with the same results.

    Here is my latest prj.conf

    CONFIG_GPIO=y
    CONFIG_SERIAL=y
    CONFIG_BOARD_NRF9160DK_NRF9160NS=y
    CONFIG_SOC_SERIES_NRF91X=y
    CONFIG_ARM_MPU=y
    CONFIG_ARM_TRUSTZONE_M=y
    CONFIG_TRUSTED_EXECUTION_NONSECURE=y
    CONFIG_HW_STACK_PROTECTION=y
    CONFIG_CONSOLE=y
    CONFIG_UART_CONSOLE=y
    
    # Beyond base settings
    CONFIG_DISK_DRIVER_SDMMC=y
    CONFIG_MAIN_STACK_SIZE=2048
    CONFIG_SPI_NRFX_RAM_BUFFER_SIZE=64
    CONFIG_SDMMC_LOG_LEVEL_DBG=y
    CONFIG_FILE_SYSTEM=y
    CONFIG_FAT_FILESYSTEM_ELM=y
    CONFIG_LOG=y

    Here is the latest output with debug messages enabled

    I am comparing this against your posting of 

    Here is the output:
    *** Booting Zephyr OS build v2.4.99-ncs1  ***
    Error mounting disk.
    [00:00:00.004,180] <err> main: Storage init ERROR!
    [00:00:00.004,211] <err> fs: fs mount error (-5)

    Regards

    Mike

  • Hi Keith,

    It turns out that the Windows10 formatter did not properly format the SD card as FAT32 or ex-FAT.  I downloaded the "SD Card Formatter v5" from SD Association website ( https://www.sdcard.org/downloads/formatter/sd-memory-card-formatter-for-windows-download/ ).  Then I formatted the SD card using this program.  There was no option to choice between FAT32 or ex-FAT.  When this card was inserted into the SD card slot, it worked correctly.  Then I moved the SD card back to my Windows10 machine and copied a file called Adrafruit.pdf ~4MB to it.  Then I moved it to the Adafruit adapter socket.  Here is the TeraTerm log file. 

    I am using the master branch (after Tag v1.5.1 and before Tag v1.6.0).

    This is for the nRF9160DK Rev 1.0.0 which has the External Flash installed so I changed the prj.conf slightly to match the SPI pins used for EXT_MEM (namely MOSI P0.11, MISO P0.12, SCK P0.13, CS* P0.10). 

    The prj.conf is the last one I posted.

    Additionally,

    I used +5V from the nRF9160-DK to power the adafruit card.  That worked.

    I used VDD (+3V) from the nRF9160-DK to power the adafruit card.  That worked.

    I used an external power supply (+3.3V) to power the adafruit card. That worked.

    Please let me know how you make out with this. 

    Regards

    Mike

Related