External SPI Flash Memory + File System + NRF 52832

Hi,

I am trying to implement a lightweight file system in my external flash memory (ISSI). After the implementation of file system, I want to store a .bin file and later access the file through c program. I am a beginner in nrf52 board and need some assistance in understanding the implementation method for the above.

  1. I need some direction for implementing file system in nrf52832. I am using the following Software/Hardware tools:
  • nRF52832
  • NRF CONNECT SDK 2.5.1
  • SPI FLash Memory: IS25LP128-JBLE
  • vscode
  • Windows 11 64 bits

       2. I would also like to if I can implement FATFS on the SPI flash memory using the nrf 52832. Is there a link for the lastest version of FAT FS code.

       3. I need some help in understanding if I can use supported files from nrf SDK v 2.5.1 for nrf52832 board? IS there some alteration needed before I upload them to my nrf 52832 board.

Best,

AP

  • Hi  ,

    Regarding file systems, you could have a look at file_systems and samples.

    Please let me know if you have any further questions.

    Best regards,
    Dejan

  • Hey dejans,

    I was looking in the Links you provided, the ideal file to flash to an external spi flash memory seems to be :

    samples/subsys/usb/mass/ : since its is an example of USB Mass Storage device that uses FAT FS driver with RAM or *SPI connected FLASH*, or LittleFS in flash, depending on the sample configuration.

    But due to the defintion of USB I am currently using the "samples/subsys/fs/littlefs" and try to change the std, overlay and prj.conf. Therefore I need some help there.

    I have a external SPI NOR FLASH (25lp128 from ISSI) connected to my nrf52dk_52832 development board kit.

    The connection are:

    • SPI_CE_PIN = P0.22 // chip enable
    • SPI_MISO_PIN = P0.23 // SO
    • SPI_MOSI_PIN = P0.24 // SI
    • SPI_SCK_PIN = P0.25 //SCK
    • SPI_HOLD_PIN = P0.11 //HOLD or RESET (not sure if it should be connected)
    • SPI_WP_PIN = P0.12 // Write protect (not sure if it should be connected)


    My nrf52dk_52832.dts is:

    /dts-v1/;
    #include <nordic/nrf52832_qfaa.dtsi>
    #include "nrf52dk_nrf52832-pinctrl.dtsi"
    #include <zephyr/dt-bindings/input/input-event-codes.h>
    
    / {
    	model = "Nordic nRF52 DK NRF52832";
    	compatible = "nordic,nrf52-dk-nrf52832";
    
    	chosen {
    		zephyr,console = &uart0;
    		zephyr,shell-uart = &uart0;
    		zephyr,uart-mcumgr = &uart0;
    		zephyr,bt-mon-uart = &uart0;
    		zephyr,bt-c2h-uart = &uart0;
    		zephyr,sram = &sram0;
    		zephyr,flash = &flash0;
    		zephyr,code-partition = &slot0_partition;
    	};
    
    	pwmleds {
    		compatible = "pwm-leds";
    		pwm_led0: pwm_led_0 {
    			pwms = <&pwm0 0 PWM_MSEC(20) PWM_POLARITY_INVERTED>;
    		};
    	};
    
    	arduino_header: connector {
    		compatible = "arduino-header-r3";
    		#gpio-cells = <2>;
    		gpio-map-mask = <0xffffffff 0xffffffc0>;
    		gpio-map-pass-thru = <0 0x3f>;
    		gpio-map = <0 0 &gpio0 3 0>,	/* A0 */
    			   <1 0 &gpio0 4 0>,	/* A1 */
    			   <2 0 &gpio0 28 0>,	/* A2 */
    			   <3 0 &gpio0 29 0>,	/* A3 */
    			   <4 0 &gpio0 30 0>,	/* A4 */
    			   <5 0 &gpio0 31 0>,	/* A5 */
    			   <6 0 &gpio0 11 0>,	/* D0 */
    			   <7 0 &gpio0 12 0>,	/* D1 */
    			   <8 0 &gpio0 13 0>,	/* D2 */
    			   <9 0 &gpio0 14 0>,	/* D3 */
    			   <10 0 &gpio0 15 0>,	/* D4 */
    			   <11 0 &gpio0 16 0>,	/* D5 */
    			   <12 0 &gpio0 17 0>,	/* D6 */
    			   <13 0 &gpio0 18 0>,	/* D7 */
    			   <14 0 &gpio0 19 0>,	/* D8 */
    			   <15 0 &gpio0 20 0>,	/* D9 */
    			   <16 0 &gpio0 22 0>,	/* D10 */
    			   <17 0 &gpio0 23 0>,	/* D11 */
    			   <18 0 &gpio0 24 0>,	/* D12 */
    			   <19 0 &gpio0 25 0>,	/* D13 */
    			   <20 0 &gpio0 26 0>,	/* D14 */
    			   <21 0 &gpio0 27 0>;	/* D15 */
    	};
    
    	arduino_adc: analog-connector {
    		compatible = "arduino,uno-adc";
    		#io-channel-cells = <1>;
    		io-channel-map = <0 &adc 1>,	/* A0 = P0.3 = AIN1 */
    				 <1 &adc 2>,	/* A1 = P0.4 = AIN2 */
    				 <2 &adc 4>,	/* A2 = P0.28 = AIN4 */
    				 <3 &adc 5>,	/* A3 = P0.29 = AIN5 */
    				 <4 &adc 6>,	/* A4 = P0.30 = AIN6 */
    				 <5 &adc 7>;	/* A5 = P0.31 = AIN7 */
    	};
    
    	/* These aliases are provided for compatibility with samples */
    	aliases {
    
    	};
    };
    
    &adc {
    	status = "okay";
    };
    
    &uicr {
    	gpio-as-nreset;
    };
    
    &gpiote {
    	status = "okay";
    };
    
    &gpio0 {
    	status = "okay";
    };
    
    arduino_serial: &uart0 {
    	status = "okay";
    	compatible = "nordic,nrf-uarte";
    	current-speed = <115200>;
    	pinctrl-0 = <&uart0_default>;
    	pinctrl-1 = <&uart0_sleep>;
    	pinctrl-names = "default", "sleep";
    };
    
    arduino_i2c: &i2c0 {
    	compatible = "nordic,nrf-twi";
    	status = "okay";
    	pinctrl-0 = <&i2c0_default>;
    	pinctrl-1 = <&i2c0_sleep>;
    	pinctrl-names = "default", "sleep";
    };
    
    
    &spi0 {
    	compatible = "nordic,nrf-spi";
    	/* Cannot be used together with i2c0. */
    	/* status = "okay"; */
    	pinctrl-0 = <&spi0_default>;
    	pinctrl-1 = <&spi0_sleep>;
    	pinctrl-names = "default", "sleep";
    };
    
    &spi1 {
    	compatible = "nordic,nrf-spi";
    	status = "okay";
    	pinctrl-0 = <&spi1_default>;
    	pinctrl-1 = <&spi1_sleep>;
    	pinctrl-names = "default", "sleep";
    };
    
    arduino_spi: &spi2 {
    	compatible = "nordic,nrf-spi";
    	status = "okay";
    	cs-gpios = <&arduino_header 16 GPIO_ACTIVE_LOW>; /* D10 */
    	pinctrl-0 = <&spi2_default>;
    	pinctrl-1 = <&spi2_sleep>;
    	pinctrl-names = "default", "sleep";
    };
    
    &flash0 {
    
    	partitions {
    		compatible = "fixed-partitions";
    		#address-cells = <1>;
    		#size-cells = <1>;
    
    		boot_partition: partition@0 {
    			label = "mcuboot";
    			reg = <0x00000000 0xc000>;
    		};
    		slot0_partition: partition@c000 {
    			label = "image-0";
    			reg = <0x0000C000 0x37000>;
    		};
    		slot1_partition: partition@43000 {
    			label = "image-1";
    			reg = <0x00043000 0x37000>;
    		};
    		storage_partition: partition@7a000 {
    			label = "storage";
    			reg = <0x0007a000 0x00006000>;
    		};
    	};
    };
    During build there is error showing : unknwon node type "nordic,nrf52-dk-nrf52832"
    My nrf52dk_52832.overlay is:
    / {
    aliases {
        spi-flash0 = &flash_25lp128;
    	};
        chosen 
    	{ nordic,pm-ext-flash = &flash_25lp128; }; 
    };
    
    &spi2 {
    	compatible = "nordic,nrf-spi"; //nordic,nrf-spi
    	status = "okay";
    	cs-gpios = <&gpio0 16 GPIO_ACTIVE_LOW>; /* P0.22 */
    	pinctrl-0 = <&spi2_default>;
    	pinctrl-1 = <&spi2_sleep>;
    	pinctrl-names = "default", "sleep";
    
    	flash_25lp128: flash_25lp128@0 {
    		compatible = "jedec,spi-nor";
    		reg = <0>;
    		label = "FLASH_25LP128";
    		// power_resources = <&flash_on>;
    		spi-max-frequency = <8000000>;
    		size = <134217728>;
    		wp-gpios = <&gpio0 11 GPIO_ACTIVE_LOW>; // gpio 0 pin P0.11
    		hold-gpios = <&gpio0 12 GPIO_ACTIVE_LOW>; // gpio 0 pin P0.12
    		jedec-id = [9d 60 18];
    	};
    };
    
    /*
    sck-pin = <25>; // gpio 0 pin P0.25
    mosi-pin = <23>; // gpio 0 pin P0.23
    miso-pin = <24>; // gpio 0 pin P0.24 */
    My prj.conf is : (same as from the samples/subsys/fs/littlefs/)
    # Optionally force the file system to be recreated
    #CONFIG_APP_WIPE_STORAGE=y
    
    # fs_dirent structures are big.
    CONFIG_MAIN_STACK_SIZE=4096
    
    # Let __ASSERT do its job
    CONFIG_DEBUG=y
    
    CONFIG_LOG=y
    CONFIG_LOG_MODE_MINIMAL=y
    
    CONFIG_FLASH=y
    CONFIG_FLASH_MAP=y
    CONFIG_FLASH_PAGE_LAYOUT=y
    
    CONFIG_FILE_SYSTEM=y
    CONFIG_FILE_SYSTEM_LITTLEFS=y
    There is a warning for this file:
    CONFIG_FLASH_MAP was assigned the value y, but got the value n. Missing dependencies:
    FLASH_HAS_DRIVER_ENABLED
    
    CONFIG_FLASH_PAGE_LAYOUT was assigned the value y, but got the value n. Missing dependencies:
    FLASH_HAS_PAGE_LAYOUT
    
    CONFIG_SPI_NOR was assigned the value y, but got the value n. Missing dependencies:
    DT_HAS_JEDEC_SPI_NOR_ENABLED
    
    CONFIG_SPI_NOR_FLASH_LAYOUT_PAGE_SIZE couldn't be set. Missing dependencies:
    SPI_NOR
    
    As I am new to nrf52dk boards, few basic questions:
    1. In my .dts file, should I delete all gpio assignments other than those menioned in spi2?
    2. How should I change my config (prj.config) file?
    3. For the above configuration I am using the code given in:  
      "samples/subsys/fs/littlefs"
      instead of :
      "samples/subsys/usb/mass/" ? or "samples/subsys/fs/fs_sample"
    4. The prj.config file shows many error on "CONFIG_SPI_NOR" and others, how do I correct it for my external spi nor flash from nrf52dk_52832 development kit?

    Best,

    AP

  • Hi Shahin97,

    I am currently using the "samples/subsys/fs/littlefs" and try to change the std, overlay and prj.conf. Therefore I need some help there.

    I have a external SPI NOR FLASH (25lp128 from ISSI) connected to my nrf52dk_52832 development board kit.

    The connection are:

    SPI_CE_PIN = P0.22 // chip enable
    SPI_MISO_PIN = P0.23 // SO
    SPI_MOSI_PIN = P0.24 // SI
    SPI_SCK_PIN = P0.25 //SCK
    SPI_HOLD_PIN = P0.11 //HOLD or RESET (not sure if it should be connected)
    SPI_WP_PIN = P0.12 // Write protect (not sure if it should be connected)

    My nrf52dk_52832.dts is:

    /dts-v1/;
    #include <nordic/nrf52832_qfaa.dtsi>
    #include "nrf52dk_nrf52832-pinctrl.dtsi"
    #include <zephyr/dt-bindings/input/input-event-codes.h>
    
    / {
    	model = "Nordic nRF52 DK NRF52832";
    	compatible = "nordic,nrf52-dk-nrf52832";
    
    	chosen {
    		zephyr,console = &uart0;
    		zephyr,shell-uart = &uart0;
    		zephyr,uart-mcumgr = &uart0;
    		zephyr,bt-mon-uart = &uart0;
    		zephyr,bt-c2h-uart = &uart0;
    		zephyr,sram = &sram0;
    		zephyr,flash = &flash0;
    		zephyr,code-partition = &slot0_partition;
    	};
    
    	arduino_header: connector {
    		compatible = "arduino-header-r3";
    		#gpio-cells = <2>;
    		gpio-map-mask = <0xffffffff 0xffffffc0>;
    		gpio-map-pass-thru = <0 0x3f>;
    		gpio-map = <0 0 &gpio0 3 0>,	/* A0 */
    			   <1 0 &gpio0 4 0>,	/* A1 */
    			   <2 0 &gpio0 28 0>,	/* A2 */
    			   <3 0 &gpio0 29 0>,	/* A3 */
    			   <4 0 &gpio0 30 0>,	/* A4 */
    			   <5 0 &gpio0 31 0>,	/* A5 */
    			   <6 0 &gpio0 11 0>,	/* D0 */
    			   <7 0 &gpio0 12 0>,	/* D1 */
    			   <8 0 &gpio0 13 0>,	/* D2 */
    			   <9 0 &gpio0 14 0>,	/* D3 */
    			   <10 0 &gpio0 15 0>,	/* D4 */
    			   <11 0 &gpio0 16 0>,	/* D5 */
    			   <12 0 &gpio0 17 0>,	/* D6 */
    			   <13 0 &gpio0 18 0>,	/* D7 */
    			   <14 0 &gpio0 19 0>,	/* D8 */
    			   <15 0 &gpio0 20 0>,	/* D9 */
    			   <16 0 &gpio0 22 0>,	/* D10 */
    			   <17 0 &gpio0 23 0>,	/* D11 */
    			   <18 0 &gpio0 24 0>,	/* D12 */
    			   <19 0 &gpio0 25 0>,	/* D13 */
    			   <20 0 &gpio0 26 0>,	/* D14 */
    			   <21 0 &gpio0 27 0>;	/* D15 */
    	};
    
    	arduino_adc: analog-connector {
    		compatible = "arduino,uno-adc";
    		#io-channel-cells = <1>;
    		io-channel-map = <0 &adc 1>,	/* A0 = P0.3 = AIN1 */
    				 <1 &adc 2>,	/* A1 = P0.4 = AIN2 */
    				 <2 &adc 4>,	/* A2 = P0.28 = AIN4 */
    				 <3 &adc 5>,	/* A3 = P0.29 = AIN5 */
    				 <4 &adc 6>,	/* A4 = P0.30 = AIN6 */
    				 <5 &adc 7>;	/* A5 = P0.31 = AIN7 */
    	};
    
    	/* These aliases are provided for compatibility with samples */
    	aliases {
    
    	};
    };
    
    &adc {
    	status = "okay";
    };
    
    &uicr {
    	gpio-as-nreset;
    };
    
    &gpiote {
    	status = "okay";
    };
    
    &gpio0 {
    	status = "okay";
    };
    
    arduino_serial: &uart0 {
    	status = "okay";
    	compatible = "nordic,nrf-uarte";
    	current-speed = <115200>;
    	pinctrl-0 = <&uart0_default>;
    	pinctrl-1 = <&uart0_sleep>;
    	pinctrl-names = "default", "sleep";
    };
    
    arduino_i2c: &i2c0 {
    	compatible = "nordic,nrf-twi";
    	status = "okay";
    	pinctrl-0 = <&i2c0_default>;
    	pinctrl-1 = <&i2c0_sleep>;
    	pinctrl-names = "default", "sleep";
    };
    
    
    &spi0 {
    	compatible = "nordic,nrf-spi";
    	/* Cannot be used together with i2c0. */
    	/* status = "okay"; */
    	pinctrl-0 = <&spi0_default>;
    	pinctrl-1 = <&spi0_sleep>;
    	pinctrl-names = "default", "sleep";
    };
    
    &spi1 {
    	compatible = "nordic,nrf-spi";
    	status = "okay";
    	pinctrl-0 = <&spi1_default>;
    	pinctrl-1 = <&spi1_sleep>;
    	pinctrl-names = "default", "sleep";
    };
    
    arduino_spi: &spi2 {
    	compatible = "nordic,nrf-spi";
    	status = "okay";
    	cs-gpios = <&arduino_header 16 GPIO_ACTIVE_LOW>; /* D10 */
    	pinctrl-0 = <&spi2_default>;
    	pinctrl-1 = <&spi2_sleep>;
    	pinctrl-names = "default", "sleep";
    };
    
    &flash0 {
    
    	partitions {
    		compatible = "fixed-partitions";
    		#address-cells = <1>;
    		#size-cells = <1>;
    
    		boot_partition: partition@0 {
    			label = "mcuboot";
    			reg = <0x00000000 0xc000>;
    		};
    		slot0_partition: partition@c000 {
    			label = "image-0";
    			reg = <0x0000C000 0x37000>;
    		};
    		slot1_partition: partition@43000 {
    			label = "image-1";
    			reg = <0x00043000 0x37000>;
    		};
    		storage_partition: partition@7a000 {
    			label = "storage";
    			reg = <0x0007a000 0x00006000>;
    		};
    	};
    };

    1. Is the dtsi file included corrected here: "#include <nordic/nrf52832_qfaa.dtsi" ?
    2. Error showing : unknown node type "nordic,nrf52-dk-nrf52832". DO you know why this is?

    My nrf52dk_52832.overlay is:

    / {
    aliases {
        spi-flash0 = &flash_25lp128;
    	};
        chosen 
    	{ nordic,pm-ext-flash = &flash_25lp128; }; 
    };
    
    &spi2 {
    	compatible = "nordic,nrf-spi"; //nordic,nrf-spi
    	status = "okay";
    	cs-gpios = <&gpio0 16 GPIO_ACTIVE_LOW>; /* P0.22 */
    	pinctrl-0 = <&spi2_default>;
    	pinctrl-1 = <&spi2_sleep>;
    	pinctrl-names = "default", "sleep";
    
    	flash_25lp128: flash_25lp128@0 {
    		compatible = "jedec,spi-nor";
    		reg = <0>;
    		label = "FLASH_25LP128";
    		// power_resources = <&flash_on>;
    		spi-max-frequency = <8000000>;
    		size = <134217728>;
    		wp-gpios = <&gpio0 11 GPIO_ACTIVE_LOW>; // gpio 0 pin P0.11
    		hold-gpios = <&gpio0 12 GPIO_ACTIVE_LOW>; // gpio 0 pin P0.12
    		jedec-id = [9d 60 18];
    	};
    };
    
    /*
    sck-pin = <25>; // gpio 0 pin P0.25
    mosi-pin = <23>; // gpio 0 pin P0.23
    miso-pin = <24>; // gpio 0 pin P0.24 */

    My prj.conf is : (same as from the samples/subsys/fs/littlefs/)

    # Optionally force the file system to be recreated
    #CONFIG_APP_WIPE_STORAGE=y
    
    # fs_dirent structures are big.
    CONFIG_MAIN_STACK_SIZE=4096
    
    # Let __ASSERT do its job
    CONFIG_DEBUG=y
    
    CONFIG_LOG=y
    CONFIG_LOG_MODE_MINIMAL=y
    
    CONFIG_FLASH=y
    CONFIG_FLASH_MAP=y
    CONFIG_FLASH_PAGE_LAYOUT=y
    
    CONFIG_FILE_SYSTEM=y
    CONFIG_FILE_SYSTEM_LITTLEFS=y
    
    CONFIG_SPI=y
    CONFIG_SPI_NOR=y
    CONFIG_SPI_NOR_FLASH_LAYOUT_PAGE_SIZE=4096
    
    CONFIG_MULTITHREADING=y

           3. There is a warning for this file:

    CONFIG_FLASH_MAP was assigned the value y, but got the value n. Missing dependencies:
    FLASH_HAS_DRIVER_ENABLED
    
    CONFIG_FLASH_PAGE_LAYOUT was assigned the value y, but got the value n. Missing dependencies:
    FLASH_HAS_PAGE_LAYOUT
    
    CONFIG_SPI_NOR was assigned the value y, but got the value n. Missing dependencies:
    DT_HAS_JEDEC_SPI_NOR_ENABLED
    
    CONFIG_SPI_NOR_FLASH_LAYOUT_PAGE_SIZE couldn't be set. Missing dependencies:
    SPI_NOR


    As I am new to nrf52dk boards, some input I would appreciate on:

         4. In my .dts file, should I delete all gpio assignments other than those menioned in spi2?
         5.How should I change my config (prj.config) file?

    For the above configuration I am using the code given in: 

                   "samples/subsys/fs/littlefs"

    instead of :
                   "samples/subsys/usb/mass/" ? or "samples/subsys/fs/fs_sample"


         6. The prj.config file shows many error on "CONFIG_SPI_NOR" as shown above, how do I correct it for my external spi nor flash from nrf52dk_52832 development kit?

    Best,

    AP

  • Hi  ,

    Your errors are unexpected. I have tested unmodified littlefs sample in NCS v2.5.0 with your overlay and could not reproduce mentioned errors.

    There are several steps you could follow if you want to enable littlefs on external flash. You could try to enable partition manager CONFIG_PARTITION_MANAGER_ENABLED=y, ensure that your SPI driver is enabled, add CONFIG_PM_PARTITION_REGION_LITTLEFS_EXTERNAL=y, and define the flash in your devicetree.

    You can find more information about external flash memory partitions in the documentation. For storing partitions in the devicetree, you can choose the value of <nordic, pm-ext-flash> property as it is shown on previously linked page.

    Best regards,
    Dejan

  • Hi Dejan,

    Following your instructions, I have added spi driver and partition to my overlay file but I am having the same few configuration warnings and other errors before building:

    This is my overlay file:

    /delete-node/ &storage_partition;
    
    / {
        chosen {
            nordic,pm-ext-flash = &25lp128;
        };
    };
    
    /*	aliases {
    		ext-flash = &flash_25lp128;
    };*/
    fstab {
        compatible = "zephyr,fstab";
        lfs1: lfs1 {
            compatible = "zephyr,fstab,littlefs";
            mount-point = "/lfs1";
            partition = <&lfs1_part>;
            automount;
            read-size = <16>;
            prog-size = <16>;
            cache-size = <64>;
            lookahead-size = <32>;
            block-cycles = <512>;
        };
    };
    
    &spi2 {
        25lp128: flash_25lp128@0 {
            compatible = "jedec,spi-nor";
            status = "okay";
            label = "25LP128";
            reg = <0>;
            spi-max-frequency = <133000000>; /* Adjust based on your flash specifications */
            size = <0x8000000>; /* Adjust based on your flash size */
            has-dpd;
            t-enter-dpd = <3000>;
            t-exit-dpd = <30000>;
            jedec-id = [ 9D 60 18 ]; /* Adjust based on your flash JEDEC ID */
            };
        };
    
        &pinctrl {
            spi2_default: spi2_default {
                group1 {
                    psels = <NRF_PSEL(SPIM_SCK, 0, 25)>, /* gpio 0 pin P0.25 */
                            <NRF_PSEL(SPIM_MISO, 0, 24)>, /* gpio 0 pin P0.24 */
                            <NRF_PSEL(SPIM_MOSI, 0, 23)>; /* gpio 0 pin P0.23 */
                };
            };
    
            spi2_sleep: spi2_sleep {
                group1 {
                    psels = <NRF_PSEL(SPIM_SCK, 0, 25)>, /* gpio 0 pin P0.25 */
                            <NRF_PSEL(SPIM_MISO, 0, 24)>, /* gpio 0 pin P0.24 */
                            <NRF_PSEL(SPIM_MOSI, 0, 23)>; /* gpio 0 pin P0.23 */
                };
            };
        };
    
    &25lp128 {
        partitions {
    		compatible = "fixed-partitions";
    		#address-cells = <1>;
    		#size-cells = <1>;
    
    		lfs1_part: partition@0 {
    			label = "storage";
    			reg = <0x00000000 0x00800000>;
    		};
    	};
    };
    

    Is my overlay for the external flash partition correct?

    This is my prj.config file :

    # Optionally force the file system to be recreated
    #CONFIG_APP_WIPE_STORAGE=y
    
    # fs_dirent structures are big.
    CONFIG_MAIN_STACK_SIZE=4096
    
    # Let __ASSERT do its job
    CONFIG_DEBUG=y
    
    CONFIG_LOG=y
    CONFIG_LOG_MODE_MINIMAL=y
    
    CONFIG_FLASH=y
    CONFIG_FLASH_MAP=y
    CONFIG_FLASH_PAGE_LAYOUT=y
    
    CONFIG_FILE_SYSTEM=y
    CONFIG_FILE_SYSTEM_LITTLEFS=y
    
    CONFIG_SPI=y
    CONFIG_SPI_NOR=y
    CONFIG_SPI_NOR_FLASH_LAYOUT_PAGE_SIZE=4096
    
    CONFIG_SETTINGS=y
    CONFIG_SETTINGS_FS=y
    CONFIG_SETTINGS_FS_DIR="/lfs/settings"
    CONFIG_SETTINGS_FS_FILE="/lfs/settings/run"
    
    CONFIG_PM_EXTERNAL_FLASH_MCUBOOT_SECONDARY=n
    CONFIG_PARTITION_MANAGER_ENABLED=y
    CONFIG_PM_PARTITION_REGION_LITTLEFS_EXTERNAL=y
    CONFIG_PM_PARTITION_REGION_SETTINGS_STORAGE_EXTERNAL=y
    CONFIG_PM_PARTITION_REGION_NVS_STORAGE_EXTERNAL=y
    CONFIG_PM_OVERRIDE_EXTERNAL_DRIVER_CHECK=y

    My nrf52dk_52832.dts file:

    /dts-v1/;
    #include <nordic/nrf52832_qfaa.dtsi>
    #include "nrf52dk_nrf52832-pinctrl.dtsi"
    #include <zephyr/dt-bindings/input/input-event-codes.h>
    
    / {
    	model = "Nordic nRF52 DK NRF52832";
    	compatible = "nordic,nrf52-dk-nrf52832";
    
    	chosen {
    		zephyr,console = &uart0;
    		zephyr,shell-uart = &uart0;
    		zephyr,uart-mcumgr = &uart0;
    		zephyr,bt-mon-uart = &uart0;
    		zephyr,bt-c2h-uart = &uart0;
    		zephyr,sram = &sram0;
    		zephyr,flash = &flash0;
    		zephyr,code-partition = &slot0_partition;
    	};
    
    	leds {
    		compatible = "gpio-leds";
    		led0: led_0 {
    			gpios = <&gpio0 17 GPIO_ACTIVE_LOW>;
    			label = "Green LED 0";
    		};
    		led1: led_1 {
    			gpios = <&gpio0 18 GPIO_ACTIVE_LOW>;
    			label = "Green LED 1";
    		};
    		led2: led_2 {
    			gpios = <&gpio0 19 GPIO_ACTIVE_LOW>;
    			label = "Green LED 2";
    		};
    		led3: led_3 {
    			gpios = <&gpio0 20 GPIO_ACTIVE_LOW>;
    			label = "Green LED 3";
    		};
    	};
    
    	pwmleds {
    		compatible = "pwm-leds";
    		pwm_led0: pwm_led_0 {
    			pwms = <&pwm0 0 PWM_MSEC(20) PWM_POLARITY_INVERTED>;
    		};
    	};
    
    	buttons {
    		compatible = "gpio-keys";
    		button0: button_0 {
    			gpios = <&gpio0 13 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
    			label = "Push button switch 0";
    			zephyr,code = <INPUT_KEY_0>;
    		};
    		button1: button_1 {
    			gpios = <&gpio0 14 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
    			label = "Push button switch 1";
    			zephyr,code = <INPUT_KEY_1>;
    		};
    		button2: button_2 {
    			gpios = <&gpio0 15 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
    			label = "Push button switch 2";
    			zephyr,code = <INPUT_KEY_2>;
    		};
    		button3: button_3 {
    			gpios = <&gpio0 16 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
    			label = "Push button switch 3";
    			zephyr,code = <INPUT_KEY_3>;
    		};
    	};
    
    	arduino_header: connector {
    		compatible = "arduino-header-r3";
    		#gpio-cells = <2>;
    		gpio-map-mask = <0xffffffff 0xffffffc0>;
    		gpio-map-pass-thru = <0 0x3f>;
    		gpio-map = <0 0 &gpio0 3 0>,	/* A0 */
    			   <1 0 &gpio0 4 0>,	/* A1 */
    			   <2 0 &gpio0 28 0>,	/* A2 */
    			   <3 0 &gpio0 29 0>,	/* A3 */
    			   <4 0 &gpio0 30 0>,	/* A4 */
    			   <5 0 &gpio0 31 0>,	/* A5 */
    			   <6 0 &gpio0 11 0>,	/* D0 */
    			   <7 0 &gpio0 12 0>,	/* D1 */
    			   <8 0 &gpio0 13 0>,	/* D2 */
    			   <9 0 &gpio0 14 0>,	/* D3 */
    			   <10 0 &gpio0 15 0>,	/* D4 */
    			   <11 0 &gpio0 16 0>,	/* D5 */
    			   <12 0 &gpio0 17 0>,	/* D6 */
    			   <13 0 &gpio0 18 0>,	/* D7 */
    			   <14 0 &gpio0 19 0>,	/* D8 */
    			   <15 0 &gpio0 20 0>,	/* D9 */
    			   <16 0 &gpio0 22 0>,	/* D10 */
    			   <17 0 &gpio0 23 0>,	/* D11 */
    			   <18 0 &gpio0 24 0>,	/* D12 */
    			   <19 0 &gpio0 25 0>,	/* D13 */
    			   <20 0 &gpio0 26 0>,	/* D14 */
    			   <21 0 &gpio0 27 0>;	/* D15 */
    	};
    
    	arduino_adc: analog-connector {
    		compatible = "arduino,uno-adc";
    		#io-channel-cells = <1>;
    		io-channel-map = <0 &adc 1>,	/* A0 = P0.3 = AIN1 */
    				 <1 &adc 2>,	/* A1 = P0.4 = AIN2 */
    				 <2 &adc 4>,	/* A2 = P0.28 = AIN4 */
    				 <3 &adc 5>,	/* A3 = P0.29 = AIN5 */
    				 <4 &adc 6>,	/* A4 = P0.30 = AIN6 */
    				 <5 &adc 7>;	/* A5 = P0.31 = AIN7 */
    	};
    
    	/* These aliases are provided for compatibility with samples */
    	aliases {
    		led0 = &led0;
    		led1 = &led1;
    		led2 = &led2;
    		led3 = &led3;
    		pwm-led0 = &pwm_led0;
    		sw0 = &button0;
    		sw1 = &button1;
    		sw2 = &button2;
    		sw3 = &button3;
    		bootloader-led0 = &led0;
    		mcuboot-button0 = &button0;
    		mcuboot-led0 = &led0;
    		watchdog0 = &wdt0;
    	};
    };
    
    &adc {
    	status = "okay";
    };
    
    &uicr {
    	gpio-as-nreset;
    };
    
    &gpiote {
    	status = "okay";
    };
    
    &gpio0 {
    	status = "okay";
    };
    
    arduino_serial: &uart0 {
    	status = "okay";
    	compatible = "nordic,nrf-uarte";
    	current-speed = <115200>;
    	pinctrl-0 = <&uart0_default>;
    	pinctrl-1 = <&uart0_sleep>;
    	pinctrl-names = "default", "sleep";
    };
    
    arduino_i2c: &i2c0 {
    	compatible = "nordic,nrf-twi";
    	status = "okay";
    	pinctrl-0 = <&i2c0_default>;
    	pinctrl-1 = <&i2c0_sleep>;
    	pinctrl-names = "default", "sleep";
    };
    
    &i2c1 {
    	compatible = "nordic,nrf-twi";
    	/* Cannot be used together with spi1. */
    	/* status = "okay"; */
    	pinctrl-0 = <&i2c1_default>;
    	pinctrl-1 = <&i2c1_sleep>;
    	pinctrl-names = "default", "sleep";
    };
    
    &pwm0 {
    	status = "okay";
    	pinctrl-0 = <&pwm0_default>;
    	pinctrl-1 = <&pwm0_sleep>;
    	pinctrl-names = "default", "sleep";
    };
    
    &spi0 {
    	compatible = "nordic,nrf-spi";
    	/* Cannot be used together with i2c0. */
    	/* status = "okay"; */
    	pinctrl-0 = <&spi0_default>;
    	pinctrl-1 = <&spi0_sleep>;
    	pinctrl-names = "default", "sleep";
    };
    
    &spi1 {
    	compatible = "nordic,nrf-spi";
    	status = "okay";
    	pinctrl-0 = <&spi1_default>;
    	pinctrl-1 = <&spi1_sleep>;
    	pinctrl-names = "default", "sleep";
    };
    
    arduino_spi: &spi2 {
    	compatible = "nordic,nrf-spi";
    	status = "okay";
    	cs-gpios = <&arduino_header 16 GPIO_ACTIVE_LOW>; /* D10 */
    	pinctrl-0 = <&spi2_default>;
    	pinctrl-1 = <&spi2_sleep>;
    	pinctrl-names = "default", "sleep";
    };
    
    &flash0 {
    
    	partitions {
    		compatible = "fixed-partitions";
    		#address-cells = <1>;
    		#size-cells = <1>;
    
    		boot_partition: partition@0 {
    			label = "mcuboot";
    			reg = <0x00000000 0xc000>;
    		};
    		slot0_partition: partition@c000 {
    			label = "image-0";
    			reg = <0x0000C000 0x37000>;
    		};
    		slot1_partition: partition@43000 {
    			label = "image-1";
    			reg = <0x00043000 0x37000>;
    		};
    		storage_partition: partition@7a000 {
    			label = "storage";
    			reg = <0x0007a000 0x00006000>;
    		};
    	};
    };
    

    How do I solve these configuration problems of assigning "y" to my config variable?

    For my dts file the node type "nordic,nrf52-dk-nrf52832" is not identified?

    After doing a pristine building i am getting a cmake error:

     *  Executing task: nRF Connect: Build [pristine]: littlefs/build (active) 
    
    Building littlefs
    west build --build-dir c:/Users/prasa/Desktop/nrf52dk/littlefs/build c:/Users/prasa/Desktop/nrf52dk/littlefs --pristine --board nrf52dk_nrf52832 --no-sysbuild -- -DNCS_TOOLCHAIN_VERSION=NONE -DBOARD_ROOT=c:/users/prasa/desktop/nrf52dk/littlefs -DCONF_FILE=c:/Users/prasa/Desktop/nrf52dk/littlefs/prj.conf -DDTC_OVERLAY_FILE=c:/Users/prasa/Desktop/nrf52dk/littlefs/nrf52dk_nrf52832.overlay
    
    -- west build: generating a build system
    Loading Zephyr default modules (Zephyr base).
    -- Application: C:/Users/prasa/Desktop/nrf52dk/littlefs
    -- CMake version: 3.20.5
    -- Found Python3: C:/Users/prasa/Desktop/nrf52dk/toolchains/c57af46cb7/opt/bin/python.exe (found suitable version "3.8.2", minimum required is "3.8") found components: Interpreter 
    -- Cache files will be written to: C:/Users/prasa/Desktop/nrf52dk/v2.5.0/zephyr/.cache
    -- Zephyr version: 3.4.99 (C:/Users/prasa/Desktop/nrf52dk/v2.5.0/zephyr)
    -- Found west (found suitable version "1.1.0", minimum required is "0.14.0")
    -- Board: nrf52dk_nrf52832
    -- Found host-tools: zephyr 0.16.1 (C:/Users/prasa/Desktop/nrf52dk/toolchains/c57af46cb7/opt/zephyr-sdk)
    -- Found toolchain: zephyr 0.16.1 (C:/Users/prasa/Desktop/nrf52dk/toolchains/c57af46cb7/opt/zephyr-sdk)
    -- Found Dtc: C:/Users/prasa/Desktop/nrf52dk/toolchains/c57af46cb7/opt/bin/dtc.exe (found suitable version "1.4.7", minimum required is "1.4.6") 
    -- Found BOARD.dts: C:/Users/prasa/Desktop/nrf52dk/v2.5.0/zephyr/boards/arm/nrf52dk_nrf52832/nrf52dk_nrf52832.dts
    -- Found devicetree overlay: c:/Users/prasa/Desktop/nrf52dk/littlefs/nrf52dk_nrf52832.overlay
    devicetree error: c:/Users/prasa/Desktop/nrf52dk/littlefs/nrf52dk_nrf52832.overlay:33 (column 5): parse error: expected node name, property name, or '}'
    -- In: C:/Users/prasa/Desktop/nrf52dk/littlefs/build/zephyr, command: C:/Users/prasa/Desktop/nrf52dk/toolchains/c57af46cb7/opt/bin/python.exe;C:/Users/prasa/Desktop/nrf52dk/v2.5.0/zephyr/scripts/dts/gen_defines.py;--dts;C:/Users/prasa/Desktop/nrf52dk/littlefs/build/zephyr/zephyr.dts.pre;--dtc-flags;'-Wno-unique_unit_address_if_enabled';--bindings-dirs;C:/Users/prasa/Desktop/nrf52dk/v2.5.0/nrf/dts/bindings;C:/Users/prasa/Desktop/nrf52dk/v2.5.0/zephyr/dts/bindings;--header-out;C:/Users/prasa/Desktop/nrf52dk/littlefs/build/zephyr/include/generated/devicetree_generated.h.new;--dts-out;C:/Users/prasa/Desktop/nrf52dk/littlefs/build/zephyr/zephyr.dts.new;--edt-pickle-out;C:/Users/prasa/Desktop/nrf52dk/littlefs/build/zephyr/edt.pickle;--vendor-prefixes;C:/Users/prasa/Desktop/nrf52dk/v2.5.0/nrf/dts/bindings/vendor-prefixes.txt;--vendor-prefixes;C:/Users/prasa/Desktop/nrf52dk/v2.5.0/zephyr/dts/bindings/vendor-prefixes.txt
    CMake Error at C:/Users/prasa/Desktop/nrf52dk/v2.5.0/zephyr/cmake/modules/dts.cmake:279 (message):
      gen_defines.py failed with return code: 1
    Call Stack (most recent call first):
      C:/Users/prasa/Desktop/nrf52dk/v2.5.0/zephyr/cmake/modules/zephyr_default.cmake:129 (include)
      C:/Users/prasa/Desktop/nrf52dk/v2.5.0/zephyr/share/zephyr-package/cmake/ZephyrConfig.cmake:66 (include)
      C:/Users/prasa/Desktop/nrf52dk/v2.5.0/zephyr/share/zephyr-package/cmake/ZephyrConfig.cmake:92 (include_boilerplate)
      CMakeLists.txt:8 (find_package)
    
    
    -- Configuring incomplete, errors occurred!
    FATAL ERROR: command exited with status 1: 'C:\Users\prasa\Desktop\nrf52dk\toolchains\c57af46cb7\opt\bin\cmake.EXE' -DWEST_PYTHON=C:/Users/prasa/Desktop/nrf52dk/toolchains/c57af46cb7/opt/bin/python.exe '-Bc:\Users\prasa\Desktop\nrf52dk\littlefs\build' -GNinja -DBOARD=nrf52dk_nrf52832 -DNCS_TOOLCHAIN_VERSION=NONE -DBOARD_ROOT=c:/users/prasa/desktop/nrf52dk/littlefs -DCONF_FILE=c:/Users/prasa/Desktop/nrf52dk/littlefs/prj.conf -DDTC_OVERLAY_FILE=c:/Users/prasa/Desktop/nrf52dk/littlefs/nrf52dk_nrf52832.overlay '-Sc:\Users\prasa\Desktop\nrf52dk\littlefs'
    
     *  The terminal process terminated with exit code: 1. 
     *  Terminal will be reused by tasks, press any key to close it. 
    

    Best regards,

    AP

Related