NCS v3.4.0 (DTS-based partitioning): How to place MCUboot secondary slot in external flash without Partition Manager?

Hi,

I am using NCS v3.4.0 with the following setup:

  • Board: nrf7002dk/nrf5340/cpuapp/ns
  • SDK version: NCS v3.4.0

I have two related questions:


Issue 1: MCUboot secondary slot in external flash without Partition Manager

Since NCS v3.4.0 deprecates Partition Manager in favor of DTS-based partitioning, I am trying to migrate my project accordingly.

However, I need to place the MCUboot secondary slot in external flash, and the Kconfig option SB_CONFIG_PM_EXTERNAL_FLASH_MCUBOOT_SECONDARY=y depends on PARTITION_MANAGER, so it cannot be used without Partition Manager:

SB_CONFIG_PM_EXTERNAL_FLASH_MCUBOOT_SECONDARY was assigned the value y, but got the value n. Missing dependencies: PARTITION_MANAGER

Could you please tell me how to place the MCUboot secondary slot in external flash using DTS-based partitioning instead of Partition Manager?


Issue 2: Memory Report Partitions tab missing in VS Code

Since migrating to DTS-based partitioning in NCS v3.4.0, the Partitions tab is no longer shown in the nRF Connect for VS Code Memory Report.

I have confirmed that:

  • partitions.yml is not generated in the build directory
  • Running west build -t partition_manager_report results in:
    ninja: error: unknown target 'partition_manager_report'

This confirms that Partition Manager is completely disabled in my project. Is the Partitions tab in Memory Report planned to be updated to support DTS-based partitioning?


Thank you!

Parents
  • Hi,

    In the migration notes there are some helpful tools that can convert an existing partition-manager project into a dts based project: https://nrfconnectdocs.nordicsemi.com/ncs/latest/nrf/releases_and_maturity/migration/migration_partitions.html#migrate-your-project-to-dts-partitioning 

    Could you please tell me how to place the MCUboot secondary slot in external flash using DTS-based partitioning instead of Partition Manager?

    Here's a sample dts from the nrf for desktop sample that shows how to configure the internal and external flash in DTS

    /* In your board overlay or memory_map.dtsi */
    
    / {
        chosen {
            nordic,pm-ext-flash = &mx25r64;
        };
    };
    
    /* Internal flash partitions */
    &flash0 {
        partitions {
            compatible = "fixed-partitions";
            #address-cells = <1>;
            #size-cells = <1>;
    
            boot_partition: partition@0 {
                label = "mcuboot";
                reg = <0x00000000 0x0000c000>;
            };
    
            slot0_partition: partition@c000 {
                label = "image-0";
                reg = <0x0000c000 0x00076000>;
            };
    
            storage_partition: partition@f8000 {
                label = "storage";
                reg = <0x000f8000 0x00008000>;
            };
        };
    };
    
    /* External flash: secondary slot placed here */
    &mx25r64 {
        status = "okay";
    
        partitions {
            compatible = "fixed-partitions";
            #address-cells = <1>;
            #size-cells = <1>;
    
            slot1_partition: partition@0 {
                label = "image-1";
                reg = <0x00000000 0x00076000>; /* same size as slot0 */
            };
        };
    };

    Is the Partitions tab in Memory Report planned to be updated to support DTS-based partitioning?

    I will check with the VS Code team to verify.

    Kind regards,
    Andreas

  • Hi,

    I tried to migrate to DTS-based partitioning following the migration guide, but I was unable to get it working. I'm sharing what I found during the investigation, hoping to get some guidance.

    Environment:

    • NCS v3.4.0
    • nRF7002DK
    • MCUboot + DTS-based partitioning (without Partition Manager)
    • Wi-Fi patches in external flash (mx25r64)

    What I found:

    1. I had the nrf70-fw-patch-ext-flash snippet enabled in my build configuration. This snippet applies fw-patch-ext-flash.overlay, which defines nrf70_wifi_fw_partition at partition@0 in mx25r64. This conflicted with my own overlay where I was also trying to define nrf70_wifi_fw_partition, causing a duplicate label error. Removing the snippet resolved this conflict.

    2. After removing the snippet, I added the partition definitions to both the application overlay and the MCUboot overlay. However, I still get the following build error:

    ```

    C:/ncs/v3.4.0/bootloader/mcuboot/boot/zephyr/include/sysflash/sysflash.h: In function '__flash_area_ids_for_slot':
    C:/ncs/v3.4.0/zephyr/include/zephyr/devicetree.h:197:36: error: 'DT_N_NODELABEL_slot2_partition_PARTITION_ID' undeclared (first use in this function); did you mean 'DT_N_NODELABEL_slot1_partition'?
    C:/ncs/v3.4.0/zephyr/include/zephyr/devicetree.h:197:36: error: 'DT_N_NODELABEL_slot3_partition_PARTITION_ID' undeclared (first use in this function); did you mean 'DT_N_NODELABEL_slot1_partition'?

    ```

    My current application overlay:

    /delete-node/ &slot0_partition;
    /delete-node/ &slot1_partition;
    /delete-node/ &storage_partition;
    
    / {
    	chosen {
    		nordic,pm-ext-flash = &mx25r64;
    	};
    };
    
    &flash0 {
    	partitions {
    		boot_partition: partition@0 {
    			compatible = "zephyr,mapped-partition";
    			label = "mcuboot";
    			reg = <0x0 0x10000>;
    		};
    
    		slot0_partition: partition@10000 {
    			compatible = "zephyr,mapped-partition";
    			label = "image-0";
    			reg = <0x10000 0xec000>;
    		};
    
    		storage_partition: partition@fc000 {
    			compatible = "zephyr,mapped-partition";
    			label = "storage";
    			reg = <0xfc000 0x2000>;
    		};
    	};
    };
    
    &mx25r64 {
    	partitions {
    		compatible = "fixed-partitions";
    		#address-cells = <1>;
    		#size-cells = <1>;
    
    		nrf70_wifi_fw_partition: nrf70_fw_partition: slot2_partition: partition@0 {
    			label = "image-2";
    			reg = <0x0 0x20000>;
    		};
    
    		slot1_partition: partition@20000 {
    			label = "image-1";
    			reg = <0x20000 0xec000>;
    		};
    
    		slot3_partition: partition@10c000 {
    			label = "image-3";
    			reg = <0x10c000 0x20000>;
    		};
    	};
    };

    My current MCUboot overlay:

    / {
    	chosen {
    		nordic,pm-ext-flash = &mx25r64;
    		zephyr,code-partition = &boot_partition;
    	};
    };
    
    &flash0 {
    	partitions {
    		boot_partition: partition@0 {
    			compatible = "zephyr,mapped-partition";
    			label = "mcuboot";
    			reg = <0x0 0x10000>;
    		};
    
    		slot0_partition: partition@10000 {
    			compatible = "zephyr,mapped-partition";
    			label = "image-0";
    			reg = <0x10000 0xec000>;
    		};
    
    		storage_partition: partition@fc000 {
    			compatible = "zephyr,mapped-partition";
    			label = "storage";
    			reg = <0xfc000 0x2000>;
    		};
    	};
    };
    
    &mx25r64 {
    	partitions {
    		compatible = "fixed-partitions";
    		#address-cells = <1>;
    		#size-cells = <1>;
    
    		nrf70_wifi_fw_partition: nrf70_fw_partition: slot2_partition: partition@0 {
    			label = "image-2";
    			reg = <0x0 0x20000>;
    		};
    
    		slot1_partition: partition@20000 {
    			label = "image-1";
    			reg = <0x20000 0xec000>;
    		};
    
    		slot3_partition: partition@10c000 {
    			label = "image-3";
    			reg = <0x10c000 0x20000>;
    		};
    	};
    };

    For now, I have decided to stay with PM-based partitioning since I am using v3.4.0 LTS and need to move forward with a new project. However, I would appreciate any guidance on the correct approach for DTS-based partitioning with external flash on nRF7002DK.

    Thank you!

  • Hi Yoshihara,

    I will have a closer look at it today and see if I can provide a better reference. To expand a bit, which are you looking for:

    1. A sample showing the dts based partitioning in NCS v3.4.0
    2. How to port an application from 3.3.0 with partition manager into 3.4.0 with dts partitioning?

    Kind regards,
    Andreas

Reply Children
No Data
Related