<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://devzone.nordicsemi.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>SDK 3.1.0 Serial recovery appcore + netcore</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/127461/sdk-3-1-0-serial-recovery-appcore-netcore</link><description>Hello, I have followed the guide to do a serial recovery of the appcore and it&amp;#39;s working fine. Now I would like to be able to update both the appcore and the netcore. I have configured my project as follow: sysbuild.conf 
 
 
 
 mcuboot.conf prj.conf</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Fri, 27 Mar 2026 14:58:53 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/127461/sdk-3-1-0-serial-recovery-appcore-netcore" /><item><title>RE: SDK 3.1.0 Serial recovery appcore + netcore</title><link>https://devzone.nordicsemi.com/thread/564207?ContentTypeID=1</link><pubDate>Fri, 27 Mar 2026 14:58:53 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:f842c1bf-2bb1-45b2-b0a5-b61308bcc547</guid><dc:creator>Cyril Praz</dc:creator><description>&lt;p&gt;I have found my problem and it was simply that I have copy paste blindly from this guide:&amp;nbsp;&lt;a href="https://docs.nordicsemi.com/bundle/ncs-3.1.0/page/zephyr/services/retention/index.html#retention-api"&gt;Retention System&lt;/a&gt;&amp;nbsp;the following line:&lt;br /&gt;&lt;pre class="ui-code" data-mode="text"&gt;/* Reduce SRAM0 usage by 1 byte to account for non-init area */
&amp;amp;sram0 {
        reg = &amp;lt;0x20000000 0x3FFFF&amp;gt;;
};&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The problem is that by doing that I have not only removed 1 byte but ~256Kb of RAM.&lt;br /&gt;&lt;br /&gt;From this change everything started to be messy and the partition manager becoming to be out of sync from the dts configuration.&lt;br /&gt;&lt;br /&gt;Several things that I have learned the hard way and is maybe important to mention here are the following points:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;rpmsg_nrf53_sram is automatically created by nordic but only the size is taken from the dts not the position. Make sure to check that the partition start address match the reserved memory sram0_shared&lt;/li&gt;
&lt;li&gt;The compilation of the nordic firmware is based sometimes on partition_manager and sometimes on the dts configuration. Changing the position of a partition inside pm_static.yml will not necessarily have the intended effect.&lt;/li&gt;
&lt;li&gt;If the compilation fail due to a linker error one solution may be to fix the problem is to remove the pm_static.yml file and look what changed as I said sometimes some fields inside pm_static depend on the project configuration and cant be modified directly isnide pm_static.yml&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;Here is the configuration that I&amp;nbsp; have at the end for who is interested:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;prj.conf:&lt;/span&gt;&lt;br /&gt;&lt;pre class="ui-code" data-mode="text"&gt;# Boot mode
CONFIG_RETENTION=y
CONFIG_RETAINED_MEM=y
CONFIG_RETAINED_MEM_ZEPHYR_RAM=y
CONFIG_RETENTION_BOOT_MODE=y
CONFIG_REBOOT=y&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;sysbuild.conf:&lt;br /&gt;&lt;pre class="ui-code" data-mode="text"&gt;SB_CONFIG_BOOTLOADER_MCUBOOT=y

# use hci ipc as netcore child image
SB_CONFIG_NETCORE_HCI_IPC=y

# use netcore bootloader as child image
# secure bootloader is required for netcore bootloader see:
# https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/samples/nrf5340/netboot/README.html#building_and_running
SB_CONFIG_SECURE_BOOT_NETCORE=y

# secure boot on appcore doesn&amp;#39;t seem to be required
SB_CONFIG_SECURE_BOOT_APPCORE=n

# required to update netcore image from appcore using mcuboot
SB_CONFIG_NETCORE_APP_UPDATE=y

# one image pair mode without scratch partition
SB_CONFIG_MCUBOOT_NRF53_MULTI_IMAGE_UPDATE=n
SB_CONFIG_MCUBOOT_UPDATEABLE_IMAGES=1
SB_CONFIG_MCUBOOT_MODE_SINGLE_APP=y

# Match MCUboot signing type with keys/appcore_debug_mcuboot_private.pem (EC P-256)
SB_CONFIG_BOOT_SIGNATURE_TYPE_ECDSA_P256=y&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;my_board_nrf5340_cpuapp.overlay:&lt;br /&gt;I have a little bit change the way to reserve the byte for retention and I have aligned with the way we reserve the memory for the ipc service. The benefit is to be able to see the full sram memory inside partition_manager_report.&lt;br /&gt;&lt;pre class="ui-code" data-mode="text"&gt;
/ {
	chosen {
        ...
		zephyr,ipc_shm = &amp;amp;sram0_shared;
		zephyr,boot-mode = &amp;amp;boot_mode0;
	};

	reserved-memory {
		#address-cells = &amp;lt;1&amp;gt;;
		#size-cells = &amp;lt;1&amp;gt;;
		ranges;

		sram0_shared: memory@20070000 {
			/* SRAM allocated to shared memory */
			reg = &amp;lt;0x20070000 0xFC00&amp;gt;;
		};

		sram0_retained: memory@2007fc00 {
			/* SRAM reserved to retained memory */
			reg = &amp;lt;0x2007FC00 0x400&amp;gt;;
		};
	};

	gpio_fwd: nrf-gpio-forwarder {
		compatible = &amp;quot;nordic,nrf-gpio-forwarder&amp;quot;;
		status = &amp;quot;okay&amp;quot;;

		/delete-node/ uart;

		// enable the array below in order to enable (debug-) UART on NetCore.
		// Note: if this is enabled, (debug-) UART on AppCore will not work anymore.
		// uart0 {
		// 	    gpios = &amp;lt;&amp;amp;gpio1 5 0&amp;gt;, &amp;lt;&amp;amp;gpio1 4 0&amp;gt;, &amp;lt;&amp;amp;gpio1 7 0&amp;gt;, &amp;lt;&amp;amp;gpio1 6 0&amp;gt;;
		// };

		netcore_led {
			gpios = &amp;lt;&amp;amp;gpio0 28 0&amp;gt;, &amp;lt;&amp;amp;gpio0 29 0&amp;gt;, &amp;lt;&amp;amp;gpio0 30 0&amp;gt;;
		};
	};

	sram0_retained@2007ffff {
		compatible = &amp;quot;zephyr,memory-region&amp;quot;, &amp;quot;mmio-sram&amp;quot;;
		reg = &amp;lt;0x2007ffff 0x1&amp;gt;;
		zephyr,memory-region = &amp;quot;RetainedMem&amp;quot;;
		status = &amp;quot;okay&amp;quot;;

		retainedmem {
			compatible = &amp;quot;zephyr,retained-ram&amp;quot;;
			status = &amp;quot;okay&amp;quot;;
			#address-cells = &amp;lt;1&amp;gt;;
			#size-cells = &amp;lt;1&amp;gt;;

			boot_mode0: boot_mode@0 {
				compatible = &amp;quot;zephyr,retention&amp;quot;;
				status = &amp;quot;okay&amp;quot;;
				reg = &amp;lt;0x0 0x1&amp;gt;;
			};
		};
	};
};&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;sysbuild/hci_ipc/boards/my_board_nrf5340_cpunet.overlay:&lt;br /&gt;&lt;pre class="ui-code" data-mode="text"&gt;	reserved-memory {
		#address-cells = &amp;lt;1&amp;gt;;
		#size-cells = &amp;lt;1&amp;gt;;
		ranges;

		sram0_shared: memory@20070000 {
			/* SRAM allocated to shared memory */
			reg = &amp;lt;0x20070000 0xFC00&amp;gt;;
		};

		sram0_retained: memory@2007fc00 {
			/* SRAM reserved to retained memory */
			reg = &amp;lt;0x2007FC00 0x400&amp;gt;;
		};
	};&lt;/pre&gt;&lt;br /&gt;sysbuild/mcuboot.overlay:&lt;br /&gt;&lt;pre class="ui-code" data-mode="text"&gt;/ {
    chosen {
		zephyr,console = &amp;amp;uart1;
		zephyr,shell-uart = &amp;amp;uart1;
		zephyr,uart-mcumgr = &amp;amp;uart0;
		zephyr,ipc_shm = &amp;amp;sram0_shared;
		zephyr,boot-mode = &amp;amp;boot_mode0;
    };

    pmic {
        status = &amp;quot;disabled&amp;quot;;
    };

	reserved-memory {
		#address-cells = &amp;lt;1&amp;gt;;
		#size-cells = &amp;lt;1&amp;gt;;
		ranges;

		sram0_shared: memory@20070000 {
			/* SRAM allocated to shared memory */
			reg = &amp;lt;0x20070000 0xFC00&amp;gt;;
		};

		sram0_retained: memory@2007fc00 {
			/* SRAM reserved to retianed memory */
			reg = &amp;lt;0x2007FC00 0x400&amp;gt;;
		};
	};

	sram0_retained@2007ffff {
		compatible = &amp;quot;zephyr,memory-region&amp;quot;, &amp;quot;mmio-sram&amp;quot;;
		reg = &amp;lt;0x2007ffff 0x1&amp;gt;;
		zephyr,memory-region = &amp;quot;RetainedMem&amp;quot;;
		status = &amp;quot;okay&amp;quot;;

		retainedmem {
			compatible = &amp;quot;zephyr,retained-ram&amp;quot;;
			status = &amp;quot;okay&amp;quot;;
			#address-cells = &amp;lt;1&amp;gt;;
			#size-cells = &amp;lt;1&amp;gt;;

			boot_mode0: boot_mode@0 {
				compatible = &amp;quot;zephyr,retention&amp;quot;;
				status = &amp;quot;okay&amp;quot;;
				reg = &amp;lt;0x0 0x1&amp;gt;;
			};
		};
	};
};&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;sysbuild/mcuboot.conf:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;# serial recovery
CONFIG_MCUBOOT_SERIAL=y
CONFIG_BOOT_SERIAL_UART=y
CONFIG_BOOT_SERIAL_ENTRANCE_GPIO=n
CONFIG_BOOT_SERIAL_WAIT_FOR_DFU=y
CONFIG_BOOT_SERIAL_WAIT_FOR_DFU_TIMEOUT=500
CONFIG_BOOT_SERIAL_NO_APPLICATION=y
CONFIG_BOOT_SERIAL_BOOT_MODE=y
CONFIG_BOOT_SERIAL_IMG_GRP_HASH=y
CONFIG_UPDATEABLE_IMAGE_NUMBER=1

# Skip checks on the secondary image to make it possible to update MCUBoot on S1/S0
CONFIG_MCUBOOT_VERIFY_IMG_ADDRESS=n

# increase speed of the serial
CONFIG_BOOT_MAX_LINE_INPUT_LEN=4096
CONFIG_BOOT_SERIAL_MAX_RECEIVE_SIZE=4096

# boot mode retention
CONFIG_RETENTION=y
CONFIG_RETAINED_MEM=y
CONFIG_RETAINED_MEM_ZEPHYR_RAM=y
CONFIG_RETENTION_BOOT_MODE=y

# serial recovery netcore
CONFIG_BOOT_IMAGE_ACCESS_HOOKS=y
CONFIG_FLASH_SIMULATOR=y
CONFIG_FLASH_SIMULATOR_DOUBLE_WRITES=y
CONFIG_FLASH_SIMULATOR_STATS=n
CONFIG_MCUBOOT_SERIAL_DIRECT_IMAGE_UPLOAD=y
CONFIG_NRF53_RECOVERY_NETWORK_CORE=y

CONFIG_PCD_APP=y

# Decrease memory footprint
CONFIG_SIZE_OPTIMIZATIONS=y&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;sysbuild/b0n.overlay:&lt;br /&gt;&lt;pre class="ui-code" data-mode="text"&gt;/ {
    chosen {
		zephyr,ipc_shm = &amp;amp;sram0_shared;
    };

	reserved-memory {
		#address-cells = &amp;lt;1&amp;gt;;
		#size-cells = &amp;lt;1&amp;gt;;
		ranges;

		sram0_shared: memory@20070000 {
			/* SRAM allocated to shared memory */
			reg = &amp;lt;0x20070000 0xFC00&amp;gt;;
		};

		sram0_retained: memory@2007fc00 {
			/* SRAM allocated to shared memory */
			reg = &amp;lt;0x2007FC00 0x400&amp;gt;;
		};
	};


    pmic {
        status = &amp;quot;disabled&amp;quot;;
    };
};&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;sysbuild/mcuboot_flash_sim_size.overlay:&lt;br /&gt;&lt;pre class="ui-code" data-mode="text"&gt;/* Keep flash simulator size aligned with netcore upload mediator partition
 * for nRF53 serial recovery in one-image-pair mode.
 */

&amp;amp;flash_sim0 {
	reg = &amp;lt;0x00000000 0x00038000&amp;gt;;
};

&amp;amp;slot2_partition {
	reg = &amp;lt;0x00000000 0x00038000&amp;gt;;
};&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;sysbuild/CMakeLists.txt:&lt;br /&gt;&lt;pre class="ui-code" data-mode="text"&gt;# Apply flash simulator size override after sdk-nrf&amp;#39;s flash_sim.overlay has defined flash_sim0
add_overlay_dts(mcuboot ${CMAKE_CURRENT_LIST_DIR}/mcuboot_flash_sim_size.overlay)
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;pm_static.yml:&lt;br /&gt;&lt;pre class="ui-code" data-mode="text"&gt;## FLASH ##
mcuboot:
  address: 0x0
  end_address: 0xc000
  placement:
    align:
      end: 0x1000
    before:
    - mcuboot_primary
  region: flash_primary
  size: 0xc000
# This partition is used to align the app image to the old partitioning scheme
padding:
  address: 0xc000
  size: 0x1C000
  region: flash_primary
mcuboot_primary:
  address: 0x28000
  size: 0x6c000
  span: [mcuboot_pad, app]
  region: flash_primary
mcuboot_pad:
  address: 0x28000
  size: 0x200
  region: flash_primary
mcuboot_primary_app:
  address: 0x28200
  size: 0x6be00
  span: [app]
  region: flash_primary
app_image:
  address: 0x28200
  size: 0x6be00
  span: [app]
  region: flash_primary
app:
  address: 0x28200
  size: 0x6be00
  region: flash_primary
mcuboot_secondary: # not necessary but was present on old partioning scheme
  address: 0x94000
  size: 0x6c000
  region: flash_primary
mcuboot_secondary_1: # not necessary but was present on old partioning scheme
  address: 0xC0000
  region: flash_primary
  size: 0x38000
settings_storage:
  address: 0xf8000
  size: 0x8000
  region: flash_primary

## SRAM ##
mcuboot_primary_1:
  address: 0x0
  size: 0x38000
  device: flash_ctrl
  region: ram_flash
pcd_sram:
  address: 0x20000000
  size: 0x2000
  region: sram_primary
# rpmsg_nrf53_sram partition is not used at the compilation and is here only to reserve the memory for the RPMsg buffer.
rpmsg_nrf53_sram:
  address: 0x20070000 # should correspond to the base address of sram0_shared reserved memory region in the DTS
  size: 0xFC00 # should correspond to the size of sram0_shared reserved memory region in the DTS
  region: sram_primary
# sram_retained_mem_reserved is for now not used is only reserved memory for a future use of retained memory in SRAM
sram_retained_mem_reserved:
  region: sram_primary
  address: 0x2007FC00 # should correspond to the base address of sram_retained reserved memory region in the DTS
  size: 0x3FF # should correspond to the size - 1 of sram_retained reserved memory region in the DTS
# sram_retained_boot_mode is not use at the compilation and is here only to reserve the memory for the boot mode value
sram_retained_boot_mode:
  region: sram_primary
  address: 0x2007FFFF # should correspond to the boot_mode0 node location in the DTS
  size: 0x01 # should correspond to the size of the boot_mode0 node in the DTS
&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: SDK 3.1.0 Serial recovery appcore + netcore</title><link>https://devzone.nordicsemi.com/thread/563488?ContentTypeID=1</link><pubDate>Tue, 17 Mar 2026 16:15:59 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:b534b73f-8839-44ee-a95d-83847797887b</guid><dc:creator>Amanda Hsieh</dc:creator><description>[quote user="Cyril Praz"]I am trying to understand how increasing the mcuboot partition inside the FLASH will solve my issue inside the RAM.[/quote]
&lt;p&gt;&lt;span&gt;No, increasing the MCUboot partition in flash w&lt;/span&gt;ill&amp;nbsp;not&amp;nbsp;solv&lt;span&gt;e your RAM issue.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;The nRF5340 architecture already works this way: the network core firmware update image is stored in the application core&amp;#39;s flash, and then the network core reads it from there (via shared SRAM as an intermediary) to write to its own flash. See&amp;nbsp;&lt;a href="https://academy.nordicsemi.com/courses/nrf-connect-sdk-intermediate/lessons/lesson-9-bootloaders-and-dfu-fota/topic/dfu-for-the-nrf5340/"&gt;https://academy.nordicsemi.com/courses/nrf-connect-sdk-intermediate/lessons/lesson-9-bootloaders-and-dfu-fota/topic/dfu-for-the-nrf5340/&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
[quote user="Cyril Praz"]I am able to update the netcore trough the appcore application. So I believe it should be possible to update the netcore trough the bootloader of the appcore.[/quote]
&lt;p&gt;Then, I would suggest&amp;nbsp;&lt;span&gt;you start by looking at&amp;nbsp;&lt;/span&gt;&lt;a href="https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/test_and_optimize/optimizing/memory.html"&gt;Memory optimization&lt;/a&gt;&lt;span&gt;&amp;nbsp;and try to reduce some buffers to see if the error reports a smaller overflow.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: SDK 3.1.0 Serial recovery appcore + netcore</title><link>https://devzone.nordicsemi.com/thread/563402?ContentTypeID=1</link><pubDate>Tue, 17 Mar 2026 08:10:56 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:a044dd75-efa7-41b7-a1b3-5a7240b2877b</guid><dc:creator>Cyril Praz</dc:creator><description>&lt;p&gt;I am trying to understand how increasing the mcuboot partition inside the FLASH will solve my issue inside the RAM.&lt;br /&gt;&lt;br /&gt;I have enough space inside the appcore FLASH to store the netcore image. Is it possible to store the image in the flash and then when the netcore reboot it will read the appcore FLASH to write it&amp;#39;s own FLASH?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I am able to update the netcore trough the appcore application. So I believe it should be possible to update the netcore trough the bootloader of the appcore.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: SDK 3.1.0 Serial recovery appcore + netcore</title><link>https://devzone.nordicsemi.com/thread/563371?ContentTypeID=1</link><pubDate>Mon, 16 Mar 2026 19:51:19 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:ac1984d7-219b-4d36-8321-2fa5c8e31a87</guid><dc:creator>Amanda Hsieh</dc:creator><description>&lt;p&gt;Hi Cyril,&lt;/p&gt;
&lt;p&gt;Try to add CONFIG_PM_PARTITION_SIZE_MCUBOOT=0x10000 in sysbuild/&lt;span&gt;mcuboot.conf. If it cannot help&lt;/span&gt;, try&amp;nbsp;using it&amp;nbsp;with an &lt;a href="https://academy.nordicsemi.com/courses/nrf-connect-sdk-intermediate/lessons/lesson-9-bootloaders-and-dfu-fota/topic/exercise-3-dfu-with-external-flash/"&gt;external flash&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Regards,&lt;br /&gt;Amanda H.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>