Using SD card on nRF9161 DK

Hello, we've a nRF9161 DK board a we saw on the back side a footprint for mounting an SD card holder and we found the SD card holder component in the BOM.

Unfortunately there is no mention about the usage of the SD card in for the nRF9161 DK anywhere in the documentation.

Is there any problem on using the SD card on nRF9161 DK (trough SPI I guess) ?

What do we have to do to connect the SD card to the nRF9161 module (excluding the soldering of the card holder)?

Thanks in advance for the support,

Joel

Parents
  • I was talking about J8 on the bottom side of the board listed on the BOM as "microSD Card Connector"...

  • Hello, I know it is a while now that this thread remained in an inactive  state ... but now I'm back... I ordered the microSD card holder and it has been soldered on J8 on the  bottom side of the DK... I was now taking a look into how to configure the nRF9161 to enable it to access the SD card via SPI... According to the DK schematic the chip select to P0.25, SCK to P0.21, MISO/DO P0.22 and these signals are OK. MOSI/DI instead is connected to the DBG_CMD signal which ends on pin 125 of the nRF9161 module. This pin, in the datasheet, is  signed as "Do not connect/reserved for future use" ... 

    How can I use the SPI interface to control the SD card without using the MOSI ?

  • Other issue... SD card in SPI mode requires power supply and signaling at 3.3 VDC. On the nRF9161 both power supply and signaling are at 1.8 VDC.

  • Looking at the schematics of the nRF9161 DK with some more attention it becomes clear why the uSD card holder hasn't been soldered. 

    With the factory power supply configuration, J8 becomes useless (for an standard uSD card)  ... there is no SD card on  the market requiring only 1.8 VDC power supply ... 

    The easiest way to get uSD card support on nRF9161 is using an external level shifter module (1.8 -3.3 VDC) together with a uSD card holder module together with some flying wires ... 

  • After saving discovered that there is no way of using the SD card holder on the DK board, following the instructions found in this forum, I connected an external level shifter board ( 1.8-3 VDC) and a uDS card holder board to the nRF9161 DK board SPI has been connected to SPI3 on:

    CLK -> P 0.13 (100 ohm termination resistors on the two drivers)

    MISO -> P 0.12

    MOSI -> P 0.11

    CS -> P 0.10

    I added the following stuff to the .overlay file:

    &spi3 {
        cs-gpios = <&arduino_header 16 GPIO_ACTIVE_LOW>, /* D10 */
                   <&gpio0          20 GPIO_ACTIVE_LOW>;

        sdhc0: sdhc@0 { // SPI SD card
            compatible = "zephyr,sdhc-spi-slot";
            reg = <0>; // First chip select in the spi3 definition
            status = "okay";
            mmc {
                compatible = "zephyr,sdmmc-disk";
                status = "okay";
                disk-name = "SDCard";
            };
            spi-max-frequency = <1000000>;
        };
    };

    Unfortunately I can't find anywhere instructions on how acceding this card using an LittleFS file system

    How shall I proceed to make this SD card available to Zephyr trough LittleFS file system ?

    Thanks, Joel 

  • Hello Joel,

    You can have a look at the USB Mass storage sample found in NCS\zephyr\samples\subsys\usb\mass.

    Please check out the sample description found here, as this shows how to enable support for SD cards:

    https://docs.nordicsemi.com/bundle/ncs-latest/page/zephyr/samples/subsys/usb/mass/README.html#usb-mass

    Best regards,

    Edvin

Reply Children
  • Hello... before using the SD card.(mount it and write/read to it) I've to format it ... isn't it ?

    The SD card gets now properly detected (disk_access_init):

    *** Booting nRF Connect SDK v3.0.2-89ba1294ac9b ***
    *** Using Zephyr OS v4.0.99-f791c49f492c ***
    [00:00:00.252,471] <dbg> sd: sd_init_io: Host controller support 3.3V max
    [00:00:00.252,471] <dbg> sd: sd_init_io: Resetting power to card
    [00:00:00.256,195] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd0 arg 0x0
    [00:00:00.256,988] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd8 arg 0x1aa
    [00:00:00.257,751] <dbg> sd: sd_send_interface_condition: Found SDHC with CMD8 support
    [00:00:00.257,781] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd59 arg 0x1
    [00:00:00.258,544] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd58 arg 0x0
    [00:00:00.259,429] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd55 arg 0x0
    [00:00:00.260,223] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd41 arg 0x40000000
    [00:00:00.271,087] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd55 arg 0x0
    [00:00:00.271,881] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd41 arg 0x40000000
    [00:00:00.272,644] <dbg> sd: sdmmc_send_ocr: SDMMC responded to ACMD41 after 1 attempts
    [00:00:00.272,674] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd58 arg 0x40000000
    [00:00:00.273,468] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd10 arg 0x0
    [00:00:00.274,902] <dbg> sd: card_read_cid: Card MID: 0x3, OID: DS
    [00:00:00.274,932] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd9 arg 0x0
    [00:00:00.276,397] <dbg> sd: sdmmc_read_csd: Card block count 7744512, block size 512
    [00:00:00.276,397] <inf> sd: Maximum SD clock is under 25MHz, using clock of 1000000Hz
    [00:00:00.276,428] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd55 arg 0x0
    [00:00:00.276,977] <dbg> sdhc_spi: sdhc_spi_send_cmd: cmd51 arg 0x0
    [00:00:00.277,740] <dbg> sd: sdmmc_read_scr: SD reports specification version 8
    [00:00:00.277,770] <inf> littlefs: LittleFS version 2.9, disk version 2.1

    but I get an error calling:

    #define MKFS_FS_TYPE FS_LITTLEFS
    #define MKFS_DEV_ID "SDCard"
    #define MKFS_FLAGS 0

     fs_mkfs(MKFS_FS_TYPE, (uintptr_t)MKFS_DEV_ID, NULL, MKFS_FLAGS);

    [00:00:00.277,770] <err> littlefs: Can't init littlefs backend, review configs and flags 0x00000000
    [00:00:00.277,770] <err> fs: mkfs error (-134)
    [00:00:00.277,801] <err> main: Format failed

    My .conf is:

    CONFIG_DISK_ACCESS=y
    CONFIG_DISK_DRIVERS=y
    CONFIG_DISK_DRIVER_SDMMC=y

    CONFIG_DEBUG=y
    CONFIG_LOG=y
    CONFIG_LOG_MODE_MINIMAL=n

    CONFIG_FILE_SYSTEM=y
    CONFIG_FILE_SYSTEM_LITTLEFS=y
    CONFIG_FILE_SYSTEM_MKFS=y

    CONFIG_FS_LITTLEFS_BLK_DEV=y
    CONFIG_FS_LITTLEFS_FMP_DEV=n

    Is there something missing ? how shall i call fs_mkfs in order to format the SD card ?

    Thx, Joel

Related