<?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>How to use external app firmware update</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/68413/how-to-use-external-app-firmware-update</link><description>Hi, 
 I would like to use external app firmware to update over BLE a secondary microncontroler behind a NRF52832. I read that it&amp;#39;s an experimental feature but it&amp;#39;s very intersting because this avoids to implement an other mecanism in mobile application</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Tue, 15 Dec 2020 09:48:56 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/68413/how-to-use-external-app-firmware-update" /><item><title>RE: How to use external app firmware update</title><link>https://devzone.nordicsemi.com/thread/284979?ContentTypeID=1</link><pubDate>Tue, 15 Dec 2020 09:48:56 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:fc49cbb9-0cea-443d-97db-58f243d8d3c0</guid><dc:creator>Einar Thorsrud</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;Good to hear you are making progress.&lt;/p&gt;
&lt;p&gt;The reason you only see this issue when not debugging is that the BPROT is disabled while debugging. (See &lt;a href="https://infocenter.nordicsemi.com/topic/com.nordic.infocenter.nrf52832.ps.v1.1/bprot.html?cp=4_2_0_11#concept_gdr_qlx_vr"&gt;BPROT chapter in PS&lt;/a&gt; for details.)&lt;/p&gt;
&lt;p&gt;You have to allow writing to the bootloader settings page to achieve what you want in an elegant way, and that could be done for instance by enabling&amp;nbsp;NRF_BL_DFU_ALLOW_UPDATE_FROM_APP as you write.&lt;/p&gt;
&lt;p&gt;Regarding security in general this is probably not a significant issue, depending on your requirements. The consequence of this is that the application can rewrite the bootloader settings page, so if it has been compromised somehow, an attacker would be able to do that. However, the bootloader also has a concept of bootloader settings backup, so critical parts is backed up and any changes to that overwritten next time the bootloader runs. You can look at the implementation of&amp;nbsp;settings_forbidden_parts_copy_from_backup() to see the critical parts.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to use external app firmware update</title><link>https://devzone.nordicsemi.com/thread/284898?ContentTypeID=1</link><pubDate>Mon, 14 Dec 2020 23:02:14 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:adf0969a-e63e-460c-bf5f-20d5045ce0c1</guid><dc:creator>ThibR</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;Thanks Einar. Step by step the implementation progress.&lt;/p&gt;
&lt;p&gt;However, I face a new problem I can&amp;#39;t see with the debugger running : once the external firmware is updated, the application have to update the Bootloader settings to invalidate the bank 1.&lt;/p&gt;
&lt;p&gt;To accomplish this task, I use:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;nrf_dfu_bank_invalidate(&amp;amp;s_dfu_settings.bank_1);

uint32_t ret_val = nrf_dfu_settings_write_and_backup(NULL);
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;However, when the debbuger is not connected, the second instruction cause a Hard Fault. Actually, I don&amp;#39;t really know why this doesn&amp;#39;t happen with debbuger attached (maybe some registers configured externaly).&lt;/p&gt;
&lt;p&gt;In the bootloader, I saw some protections like this one :&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;    // Size of the flash area to protect.
    uint32_t area_size;

    area_size = BOOTLOADER_SIZE + NRF_MBR_PARAMS_PAGE_SIZE;
    if (!NRF_BL_DFU_ALLOW_UPDATE_FROM_APP &amp;amp;&amp;amp; !NRF_BL_DFU_ENTER_METHOD_BUTTONLESS &amp;amp;&amp;amp; !NRF_DFU_TRANSPORT_BLE)
    {
        area_size += BOOTLOADER_SETTINGS_PAGE_SIZE;
    }

    ret_val = nrf_bootloader_flash_protect(BOOTLOADER_START_ADDR, area_size);

    if (ret_val != NRF_SUCCESS)
    {
        NRF_LOG_ERROR(&amp;quot;Could not protect bootloader and settings pages, 0x%x.&amp;quot;, ret_val);
    }
    APP_ERROR_CHECK(ret_val);&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;As I have NRF_DFU_TRANSPORT_BLE set at 1, the Boolloader settings page don&amp;#39;t have to be protected...&lt;/p&gt;
&lt;p&gt;I saw this thread : &lt;a href="https://devzone.nordicsemi.com/f/nordic-q-a/56993/not-able-to-update-firmware-using-bootloader-sdk15-3-0"&gt;https://devzone.nordicsemi.com/f/nordic-q-a/56993/not-able-to-update-firmware-using-bootloader-sdk15-3-0&lt;/a&gt; and I&amp;#39;m tempted to play with NRF_BL_DFU_ALLOW_UPDATE_FROM_APP (in BL sdk_config.h) and with &lt;span&gt;NRF_DFU_IN_APP (in App sdk_config.h).&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;I also read this : &lt;a href="https://infocenter.nordicsemi.com/topic/sdk_nrf5_v17.0.2/lib_secure_boot.html"&gt;https://infocenter.nordicsemi.com/topic/sdk_nrf5_v17.0.2/lib_secure_boot.html&lt;/a&gt; The main functionalities are explained but not the consequencies of parameters settings.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;I don&amp;#39;t want to miss something because the firmware security is very important in our product. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Thanks a lot for the precious help ;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Regards&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to use external app firmware update</title><link>https://devzone.nordicsemi.com/thread/284170?ContentTypeID=1</link><pubDate>Wed, 09 Dec 2020 16:51:06 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:c59e4434-603b-4ec2-93c5-9d2e390d7221</guid><dc:creator>Einar Thorsrud</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;Thank you for the update. I do not have any further recommendations, but it is interesting to follow this and potentially useful for others that may implement something similar in the future.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to use external app firmware update</title><link>https://devzone.nordicsemi.com/thread/283907?ContentTypeID=1</link><pubDate>Tue, 08 Dec 2020 18:20:48 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:1c860711-b778-4391-bb56-bae93f3af65c</guid><dc:creator>ThibR</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;Me again &lt;span class="emoticon" data-url="https://devzone.nordicsemi.com/cfs-file/__key/system/emoji/1f603.svg" title="Smiley"&gt;&amp;#x1f603;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;I&amp;#39;m studiyng how to solve this problem. My first idea was to modify the nrf_dfu_settings_t to add ext_app_version field as you had suggested me.&lt;/p&gt;
&lt;p&gt;By the way, this involve to :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Modify nrf_dfu_validation.c / method postvalidate : have to add s_dfu_settings.ext_app_version valorisation during when bootloader is running.&lt;/li&gt;
&lt;li&gt;Generate new bootloader settings but I have to modify nrfutil to include this new field (maybe this can work without this but not really clean)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&amp;#39;m a little bit hesitant because I don&amp;#39;t really want to have my own SDK (the next migration could be painfull). Moreover, it&amp;#39;s not very easy to synchronise data during massive flash process (external MCU flash and NRF52 flash - all have to be well configured).&lt;/p&gt;
&lt;p&gt;The last option is propagate the external app version from the other MCU to the NRF52 after the DFU process through our home made protocol based on UART. However, this not allow to manage prevalidation version during DFU process.&lt;/p&gt;
&lt;p&gt;Ready to share the evolves&amp;nbsp;concerning the ext app in the next NRF SDK version if needed.&lt;/p&gt;
&lt;p&gt;Thanks a lot for the advices ;)&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to use external app firmware update</title><link>https://devzone.nordicsemi.com/thread/283200?ContentTypeID=1</link><pubDate>Thu, 03 Dec 2020 17:58:57 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:0e1d3e16-d0ee-44d2-8784-f8fc06deee34</guid><dc:creator>Einar Thorsrud</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;Aha, I was too quick. You are right, this&amp;nbsp;implementation&amp;nbsp;does not make sense, so this looks like a bug in the SDK bootloader.&lt;/p&gt;
&lt;p&gt;You could add another field in nrf_dfu_settings_t for the external app version which you update on every successful update of the external MCU, and check against that , but it&amp;nbsp;may make more sense to handle this outside of the nRF 5 bootloader (that would not give the benefit of getting an error during the DFU process though).&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to use external app firmware update</title><link>https://devzone.nordicsemi.com/thread/283140?ContentTypeID=1</link><pubDate>Thu, 03 Dec 2020 14:34:46 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:39569ca2-45f1-4395-9607-c79074012dff</guid><dc:creator>ThibR</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;I understand well the content of the p_init pointer.&lt;/p&gt;
&lt;p&gt;What I don&amp;#39;t understand is the content of the BL settings. The externall app version is not mentionned in the BL settings so I don&amp;#39;t know how the version comparison can work :&lt;/p&gt;
&lt;p&gt;p_init-&amp;gt;fw_version &amp;gt;= s_dfu_settings.app_version&lt;/p&gt;
&lt;p&gt;Maybe the BL setting store alternatively the app version or the external app version (make no sense?)&lt;/p&gt;
&lt;p&gt;Moreover, once the external app is updated in flash and the application boot, the p_init pointer is lost and I can only trust the BL settings loaded in nrf_dfu_settings.&lt;/p&gt;
&lt;p&gt;sorry if I&amp;#39;m not clear &lt;span class="emoticon" data-url="https://devzone.nordicsemi.com/cfs-file/__key/system/emoji/1f603.svg" title="Smiley"&gt;&amp;#x1f603;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to use external app firmware update</title><link>https://devzone.nordicsemi.com/thread/283111?ContentTypeID=1</link><pubDate>Thu, 03 Dec 2020 13:52:14 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:2a265677-5df1-4ade-a242-59cfa45a7ef5</guid><dc:creator>Einar Thorsrud</dc:creator><description>&lt;p&gt;Hi Thib,&lt;/p&gt;
&lt;p&gt;As you know you&amp;nbsp;use the&amp;nbsp;external-app flag when you generate the DFU package, and this will become part of the init packet. You cannot have both an external app and normal/local app in the same DFU operation, so here the specified app version will apply to the external app. There is no need to&amp;nbsp;differentiate between external and normal app, as the updates never occur at the same time. See example from generating external app update, and display of the generated&amp;nbsp;package (which is essentially what is in the init packet,&amp;nbsp;which is pointed to by p_init in&amp;nbsp;your code snippet from the bootloader.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;C:\Users\eith\SDK\nRF5_SDK_17.0.2_d674dde\examples\dfu&amp;gt;nrfutil pkg generate --application secure_dfu_test_images\ble\nrf52832\hrs_application_s132.hex --application-version 123 --hw-version 5 --sd-req 0 --external-app --key-file c:\vault\priv.pem update_external.zip
Zip created at update_external.zip

C:\Users\eith\SDK\nRF5_SDK_17.0.2_d674dde\examples\dfu&amp;gt;nrfutil pkg display update_external.zip 

DFU Package: &amp;lt;update_external.zip&amp;gt;:
|
|- Image count: 1
|
|- Image #0:
   |- Type: application
   |- Image file: hrs_application_s132.bin
   |- Init packet file: hrs_application_s132.dat
      |
      |- op_code: INIT
      |- signature_type: ECDSA_P256_SHA256
      |- signature (little-endian): b&amp;#39;025356933b17ff646eb2d7d536f82ee6ace8f62284521e6cccb53a8730e878599cb13d885e88438b6816c1eb74f6b4282111c9e0337f3f7eec3fb0da591dd0e1&amp;#39;
      |
      |- fw_version: 0x0000007B (123)
      |- hw_version 0x00000005 (5)
      |- sd_req: 0x00
      |- type: EXTERNAL_APPLICATION
      |- sd_size: 0
      |- bl_size: 0
      |- app_size: 85500
      |
      |- hash_type: SHA256
      |- hash (little-endian): b&amp;#39;e61a6b2fe616bfb0e3da756774a781e49db4dc8cab5732adf216723613bbe677&amp;#39;
      |
      |- boot_validation_type: [&amp;#39;VALIDATE_GENERATED_CRC&amp;#39;]
      |- boot_validation_signature (little-endian): [b&amp;#39;&amp;#39;]
      |
      |- is_debug: False
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Einar&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to use external app firmware update</title><link>https://devzone.nordicsemi.com/thread/282959?ContentTypeID=1</link><pubDate>Wed, 02 Dec 2020 23:03:52 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:a3722b79-d150-4072-962d-1e215a651a44</guid><dc:creator>ThibR</dc:creator><description>&lt;p&gt;Hi Einar!&lt;/p&gt;
&lt;p&gt;Thanks a lot for your previous help, this is now working like a charm ;) the external MCU can be updated from my app.&lt;/p&gt;
&lt;p&gt;I now try to manage external app versionning and I&amp;#39;m exploring the NRF_DFU_EXTERNAL_APP_VERSIONING option in my sdk_config.h on the BL project.&lt;/p&gt;
&lt;p&gt;I searched the libraries and I saw that there are some checks if this option is activated (extract from nrf_dfu_ver_validation.c / fw_version_ok :&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;#if NRF_DFU_EXTERNAL_APP_VERSIONING
    else if (p_init-&amp;gt;type == DFU_FW_TYPE_EXTERNAL_APPLICATION)
    {
        return (p_init-&amp;gt;fw_version &amp;gt;= s_dfu_settings.app_version);
    }
#else
    else if(p_init-&amp;gt;type == DFU_FW_TYPE_EXTERNAL_APPLICATION)
    {
        return true;
    }
#endif // NRF_DFU_EXTERNAL_APP_VERSIONING
#endif // NRF_DFU_SUPPORTS_EXTERNAL_APP&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;What I understand is that p_init is linked to the new package sent by BLE and dfu_settings contains the information of the previous one.&lt;/p&gt;
&lt;p&gt;However, I don&amp;#39;t understand how the bootloader can differantiate app_version for application and app_version for external application...&amp;nbsp;&lt;/p&gt;
&lt;p&gt;When I dumped the flash content and ran nrfutil settings display, I only saw app_version but nothing about external_app_version.&lt;/p&gt;
&lt;p&gt;Maybe it is not already managed as external app is not often used ?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to use external app firmware update</title><link>https://devzone.nordicsemi.com/thread/281135?ContentTypeID=1</link><pubDate>Fri, 20 Nov 2020 14:18:03 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:416c6bac-42fa-4729-9d8e-b597d5b6d3f3</guid><dc:creator>Einar Thorsrud</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;No, you don&amp;#39;t need nrf_dfu_validation_post_external_app_execute(). That was my bad. To be honest the last time I looked at this was a few years ago, as it is not a commonly used feature.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Essentially once the app is in bank 1 it is up to you. If you want to do this in the nRF bootloader, then you could modify &amp;lt;SDK_17.02&amp;gt;/components/libraries/bootloader/dfu/nrf_dfu_validation.c around line 1010-1020 so that you call your implementation for updating the other MCU from there. Alternatively you could let the bootloader reset and start your application, and do the rest from your application. The app would know that a image is ready by seeing that the bank 1 code is NRF_DFU_BANK_VALID_EXT_APP. (Once the external MCU is successfully updated&amp;nbsp;&amp;nbsp;you probably want to invalidate that in this case so that you don not attempt to update again).&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to use external app firmware update</title><link>https://devzone.nordicsemi.com/thread/281132?ContentTypeID=1</link><pubDate>Fri, 20 Nov 2020 14:05:20 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:c8e99b0c-e507-43ae-abce-a0a7584388aa</guid><dc:creator>ThibR</dc:creator><description>&lt;p&gt;Hi Einar,&lt;/p&gt;
&lt;p&gt;Thanks a lot, this is clearer now.&lt;/p&gt;
&lt;p&gt;When or where I have to execute&amp;nbsp;&lt;span&gt;nrf_dfu_validation_valid_external_app() and update the external MCU ? I don&amp;#39;t really understand how to catch the end of the upload and launch the update.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;I believed it&amp;#39;s in&amp;nbsp;nrf_dfu_validation_post_external_app_execute()&amp;nbsp;I had to do this.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Thanks a lot.&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to use external app firmware update</title><link>https://devzone.nordicsemi.com/thread/280921?ContentTypeID=1</link><pubDate>Thu, 19 Nov 2020 14:03:49 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:5f02f0a5-a70f-4aee-ab70-4a4a2efe4f27</guid><dc:creator>Einar Thorsrud</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;It looks like this is correctly written to bank 1 as you write, and then the code is set to&amp;nbsp;NRF_DFU_BANK_VALID_EXT_APP. Then the&amp;nbsp;nrf_dfu_validation_post_external_app_execute() function is never called, and you normally don&amp;#39;t need it. So now after successfully performing this operation you have the external app in flash (with bank 1 code indicating that). Then you can check that using&amp;nbsp;nrf_dfu_validation_valid_external_app() and update your external MCU.&lt;/p&gt;
&lt;p&gt;Note that&amp;nbsp;the external app&amp;nbsp;code is not used much which is probably why it does not always make sense out of the box. You can see an example of external app in the &lt;a href="https://www.nordicsemi.com/Software-and-tools/Software/nRF5-SDK-for-Thread-and-Zigbee"&gt;Thread and ZigBee SDK&lt;/a&gt;&amp;nbsp;(though I do not think it is very relevant, but it is the only example I am aware of).&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to use external app firmware update</title><link>https://devzone.nordicsemi.com/thread/280885?ContentTypeID=1</link><pubDate>Thu, 19 Nov 2020 12:31:36 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:255ce880-011c-45ba-9993-823c04e7103b</guid><dc:creator>ThibR</dc:creator><description>&lt;p&gt;The full log :&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;&amp;lt;info&amp;gt; app: Inside main
&amp;lt;debug&amp;gt; app: In nrf_bootloader_init
&amp;lt;debug&amp;gt; nrf_dfu_settings: Calling nrf_dfu_settings_init()...
&amp;lt;debug&amp;gt; nrf_dfu_flash: Initializing nrf_fstorage_nvmc backend.
&amp;lt;warning&amp;gt; nrf_dfu_settings: Resetting bootloader settings since neither the settings page nor the backup are valid (CRC error).
&amp;lt;debug&amp;gt; nrf_dfu_settings: Writing settings...
&amp;lt;debug&amp;gt; nrf_dfu_settings: Erasing old settings at: 0x0007F000
&amp;lt;debug&amp;gt; nrf_dfu_flash: Flash erase success: addr=0x0007F000, pending 0
&amp;lt;debug&amp;gt; nrf_dfu_flash: nrf_fstorage_write(addr=0x0007F000, src=0x2000787C, len=896 bytes), queue usage: 1
&amp;lt;debug&amp;gt; nrf_dfu_flash: Flash write success: addr=0x0007F000, pending 0
&amp;lt;debug&amp;gt; app: Initializing transports (found: 1)
&amp;lt;debug&amp;gt; nrf_dfu_ble: Initializing BLE DFU transport
&amp;lt;debug&amp;gt; nrf_dfu_ble: Setting up vector table: 0x00072000
&amp;lt;debug&amp;gt; nrf_dfu_ble: Enabling SoftDevice.
&amp;lt;debug&amp;gt; nrf_dfu_ble: Configuring BLE stack.
&amp;lt;debug&amp;gt; nrf_dfu_ble: Enabling the BLE stack.
&amp;lt;debug&amp;gt; nrf_dfu_ble: Advertising...
&amp;lt;debug&amp;gt; nrf_dfu_ble: Connected
&amp;lt;debug&amp;gt; nrf_dfu_ble: Received BLE_GAP_EVT_CONN_PARAM_UPDATE
&amp;lt;debug&amp;gt; nrf_dfu_ble: max_conn_interval: 12
&amp;lt;debug&amp;gt; nrf_dfu_ble: min_conn_interval: 12
&amp;lt;debug&amp;gt; nrf_dfu_ble: slave_latency: 0
&amp;lt;debug&amp;gt; nrf_dfu_ble: conn_sup_timeout: 600
&amp;lt;debug&amp;gt; nrf_dfu_ble: Finished handling conn sec update
&amp;lt;debug&amp;gt; nrf_dfu_ble: Set receipt notif
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Handle NRF_DFU_OP_RECEIPT_NOTIF_SET
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Request handling complete. Result: 0x1
&amp;lt;debug&amp;gt; nrf_dfu_ble: Received BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST (request: 247, reply: 247).
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_SELECT (command)
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Request handling complete. Result: 0x1
&amp;lt;debug&amp;gt; app: Shutting down transports (found: 1)
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_CREATE (command)
&amp;lt;debug&amp;gt; app: timer_stop (0x20005984)
&amp;lt;debug&amp;gt; app: timer_activate (0x20005984)
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Request handling complete. Result: 0x1
&amp;lt;debug&amp;gt; nrf_dfu_ble: Buffer 0x200067E0 acquired, len 143 (244)
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (command)
&amp;lt;debug&amp;gt; nrf_dfu_ble: Freeing buffer 0x200067E0
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Request handling complete. Result: 0x1
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Handle NRF_DFU_OP_CRC_GET (command)
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Request handling complete. Result: 0x1
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_EXECUTE (command)
&amp;lt;debug&amp;gt; nrf_dfu_validation: PB: Init packet data len: 66
&amp;lt;info&amp;gt; nrf_dfu_validation: Signature required. Checking signature.
&amp;lt;info&amp;gt; nrf_dfu_validation: Calculating hash (len: 66)
&amp;lt;info&amp;gt; nrf_dfu_validation: Verify signature
&amp;lt;info&amp;gt; nrf_dfu_validation: Image verified
&amp;lt;debug&amp;gt; app: Enter nrf_dfu_cache_prepare()
&amp;lt;debug&amp;gt; app: required_size: 0xD1A8.
&amp;lt;debug&amp;gt; app: single_bank: false.
&amp;lt;debug&amp;gt; app: keep_app: true.
&amp;lt;debug&amp;gt; app: keep_softdevice: true.
&amp;lt;debug&amp;gt; app: SD_PRESENT: true.
&amp;lt;debug&amp;gt; app: Bank contents:
&amp;lt;debug&amp;gt; app: Bank 0 code: 0x00: Size: 0x0
&amp;lt;debug&amp;gt; nrf_dfu_flash: Flash erase success: addr=0x0007F000, pending 4
&amp;lt;debug&amp;gt; nrf_dfu_flash: Flash write success: addr=0x0007F000, pending 3
&amp;lt;debug&amp;gt; nrf_dfu_flash: Flash erase success: addr=0x0007E000, pending 2
&amp;lt;debug&amp;gt; nrf_dfu_flash: Flash write success: addr=0x0007E000, pending 1
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_SELECT (data)
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: crc = 0x0, offset = 0x0, max_size = 0x1000
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Request handling complete. Result: 0x1
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_SELECT (data)
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: crc = 0x0, offset = 0x0, max_size = 0x1000
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Request handling complete. Result: 0x1
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_CREATE (data)
&amp;lt;debug&amp;gt; nrf_dfu_flash: nrf_fstorage_erase(addr=0x0x00019000, len=1 pages), queue usage: 1
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Creating object with size: 4096. Offset: 0x00000000, CRC: 0x00000000
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Request handling complete. Result: 0x1
&amp;lt;debug&amp;gt; nrf_dfu_ble: Buffer 0x200067E0 acquired, len 244 (244)
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
&amp;lt;debug&amp;gt; nrf_dfu_flash: nrf_fstorage_write(addr=0x00019000, src=0x200067E0, len=244 bytes), queue usage: 2
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Request handling complete. Result: 0x1
&amp;lt;debug&amp;gt; nrf_dfu_flash: Flash erase success: addr=0x00019000, pending 2
&amp;lt;debug&amp;gt; nrf_dfu_flash: Flash write success: addr=0x00019000, pending 1
&amp;lt;debug&amp;gt; nrf_dfu_ble: Freeing buffer 0x200067E0
&amp;lt;debug&amp;gt; nrf_dfu_ble: Buffer 0x200067E0 acquired, len 244 (244)
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
&amp;lt;debug&amp;gt; nrf_dfu_flash: nrf_fstorage_write(addr=0x000190F4, src=0x200067E0, len=244 bytes), queue usage: 1
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Request handling complete. Result: 0x1
&amp;lt;debug&amp;gt; nrf_dfu_flash: Flash write success: addr=0x000190F4, pending 1
&amp;lt;debug&amp;gt; nrf_dfu_ble: Freeing buffer 0x200067E0
&amp;lt;debug&amp;gt; nrf_dfu_ble: Buffer 0x200067E0 acquired, len 244 (244)
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
&amp;lt;debug&amp;gt; nrf_dfu_flash: nrf_fstorage_write(addr=0x000191E8, src=0x200067E0, len=244 bytes), queue usage: 1
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Request handling complete. Result: 0x1
&amp;lt;debug&amp;gt; nrf_dfu_flash: Flash write success: addr=0x000191E8, pending 1
&amp;lt;debug&amp;gt; nrf_dfu_ble: Freeing buffer 0x200067E0


...


&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
&amp;lt;debug&amp;gt; nrf_dfu_flash: nrf_fstorage_write(addr=0x00025E4C, src=0x200067E0, len=244 bytes), queue usage: 1
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Request handling complete. Result: 0x1
&amp;lt;debug&amp;gt; nrf_dfu_flash: Flash write success: addr=0x00025E4C, pending 1
&amp;lt;debug&amp;gt; nrf_dfu_ble: Freeing buffer 0x200067E0
&amp;lt;debug&amp;gt; nrf_dfu_ble: Buffer 0x200067E0 acquired, len 192 (244)
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
&amp;lt;debug&amp;gt; nrf_dfu_flash: nrf_fstorage_write(addr=0x00025F40, src=0x200067E0, len=192 bytes), queue usage: 1
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Request handling complete. Result: 0x1
&amp;lt;debug&amp;gt; nrf_dfu_flash: Flash write success: addr=0x00025F40, pending 1
&amp;lt;debug&amp;gt; nrf_dfu_ble: Freeing buffer 0x200067E0
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Handle NRF_DFU_OP_CRC_GET (data)
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Offset:53248, CRC:0x672E882D
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Request handling complete. Result: 0x1
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_EXECUTE (data)
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Request handling complete. Result: 0x1
&amp;lt;debug&amp;gt; app: timer_stop (0x20005984)
&amp;lt;debug&amp;gt; app: timer_activate (0x20005984)
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_CREATE (data)
&amp;lt;debug&amp;gt; nrf_dfu_flash: nrf_fstorage_erase(addr=0x0x00026000, len=1 pages), queue usage: 1
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Creating object with size: 424. Offset: 0x0000D000, CRC: 0x672E882D
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Request handling complete. Result: 0x1
&amp;lt;debug&amp;gt; nrf_dfu_flash: Flash erase success: addr=0x00026000, pending 1
&amp;lt;debug&amp;gt; nrf_dfu_ble: Buffer 0x200067E0 acquired, len 244 (244)
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
&amp;lt;debug&amp;gt; nrf_dfu_flash: nrf_fstorage_write(addr=0x00026000, src=0x200067E0, len=244 bytes), queue usage: 1
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Request handling complete. Result: 0x1
&amp;lt;debug&amp;gt; nrf_dfu_flash: Flash write success: addr=0x00026000, pending 1
&amp;lt;debug&amp;gt; nrf_dfu_ble: Freeing buffer 0x200067E0
&amp;lt;debug&amp;gt; nrf_dfu_ble: Buffer 0x200067E0 acquired, len 180 (244)
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
&amp;lt;debug&amp;gt; nrf_dfu_flash: nrf_fstorage_write(addr=0x000260F4, src=0x200067E0, len=180 bytes), queue usage: 1
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Request handling complete. Result: 0x1
&amp;lt;debug&amp;gt; nrf_dfu_flash: Flash write success: addr=0x000260F4, pending 1
&amp;lt;debug&amp;gt; nrf_dfu_ble: Freeing buffer 0x200067E0
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Handle NRF_DFU_OP_CRC_GET (data)
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Offset:53672, CRC:0x37073ED7
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Request handling complete. Result: 0x1
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_EXECUTE (data)
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Whole firmware image received. Postvalidating.
&amp;lt;debug&amp;gt; nrf_dfu_validation: Hash verification. start address: 0x19000, size: 0xD1A8
&amp;lt;debug&amp;gt; nrf_dfu_settings: Writing settings...
&amp;lt;debug&amp;gt; nrf_dfu_settings: Erasing old settings at: 0x0007F000
&amp;lt;debug&amp;gt; nrf_dfu_flash: nrf_fstorage_erase(addr=0x0x0007F000, len=1 pages), queue usage: 1
&amp;lt;info&amp;gt; nrf_dfu_settings: Backing up settings page to address 0x7E000.
&amp;lt;debug&amp;gt; app: timer_activate (0x20005984)
&amp;lt;debug&amp;gt; nrf_dfu_flash: Flash erase success: addr=0x0007F000, pending 4
&amp;lt;debug&amp;gt; nrf_dfu_flash: Flash write success: addr=0x0007F000, pending 3
&amp;lt;debug&amp;gt; nrf_dfu_flash: Flash erase success: addr=0x0007E000, pending 2
&amp;lt;debug&amp;gt; nrf_dfu_flash: Flash write success: addr=0x0007E000, pending 1
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: All flash operations have completed. DFU completed.
&amp;lt;debug&amp;gt; app: Shutting down transports (found: 1)
&amp;lt;debug&amp;gt; nrf_dfu_ble: Shutting down BLE transport.
&amp;lt;debug&amp;gt; nrf_df&amp;lt;info&amp;gt; app: Inside main
&amp;lt;debug&amp;gt; app: In nrf_bootloader_init
&amp;lt;debug&amp;gt; nrf_dfu_settings: Calling nrf_dfu_settings_init()...
&amp;lt;debug&amp;gt; nrf_dfu_flash: Initializing nrf_fstorage_nvmc backend.
&amp;lt;debug&amp;gt; nrf_dfu_settings: Using settings page.
&amp;lt;debug&amp;gt; nrf_dfu_settings: Copying forbidden parts from backup page.
&amp;lt;debug&amp;gt; nrf_dfu_settings: Destination settings are identical to source, write not needed. Skipping.
&amp;lt;info&amp;gt; nrf_dfu_settings: Backing up settings page to address 0x7E000.
&amp;lt;debug&amp;gt; app: Enter nrf_bootloader_fw_activate
&amp;lt;info&amp;gt; app: No firmware to activate.
&amp;lt;info&amp;gt; app: Boot validation failed. No valid app to boot.
&amp;lt;debug&amp;gt; app: DFU mode because app is not valid.
&amp;lt;info&amp;gt; nrf_bootloader_wdt: WDT is not enabled
&amp;lt;debug&amp;gt; app: Enter main loop&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Regards,&lt;/p&gt;
&lt;p&gt;Thib&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to use external app firmware update</title><link>https://devzone.nordicsemi.com/thread/280860?ContentTypeID=1</link><pubDate>Thu, 19 Nov 2020 11:42:17 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:5b275689-e222-42b3-a667-7b98f08b4167</guid><dc:creator>ThibR</dc:creator><description>&lt;p&gt;Hi, &lt;/p&gt;
&lt;p&gt;Sorry for the delay, I had some diffculties to compile with the debug logging options.&lt;/p&gt;
&lt;p&gt;For the next one, if the following error occurs :&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;1&amp;gt; Linking diego_isp4520_bl.elf
1&amp;gt; C:/Program Files/SEGGER/SEGGER Embedded Studio for ARM 5.10/gcc/arm-none-eabi/bin/ld: error: .rodata is too large to fit in FLASH memory segment
1&amp;gt; C:/Program Files/SEGGER/SEGGER Embedded Studio for ARM 5.10/gcc/arm-none-eabi/bin/ld: error: .data is too large to fit in FLASH memory segment
1&amp;gt; C:/Program Files/SEGGER/SEGGER Embedded Studio for ARM 5.10/gcc/arm-none-eabi/bin/ld: error: section .tdata overlaps absolute placed section .mbr_params_page
1&amp;gt; C:/Program Files/SEGGER/SEGGER Embedded Studio for ARM 5.10/gcc/arm-none-eabi/bin/ld: Output/Release/Obj/diego_isp4520_bl/main.o: in function `main&amp;#39;:
1&amp;gt; C:\TRO\DevE\DIEGO\diego_isp4520_bl/main.c:154: undefined reference to `nrf_log_default_backends_init&amp;#39;
Build failed&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;It&amp;#39;s necessary to modify the Section Placement Maccro to enlarge Flash Size&lt;/p&gt;
&lt;p&gt;I went from :&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;FLASH_START=0x78000
FLASH_SIZE=0x6000&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;To :&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;FLASH_START=0x72000
FLASH_SIZE=0x12000&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;This the log when I upload the external app (no application in Bank 0 so I think data goes to this bank) :&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
&amp;lt;debug&amp;gt; nrf_dfu_flash: nrf_fstorage_write(addr=0x00025D58, src=0x20006620, len=244 bytes), queue usage: 1
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Request handling complete. Result: 0x1
&amp;lt;debug&amp;gt; nrf_dfu_flash: Flash write success: addr=0x00025D58, pending 1
&amp;lt;debug&amp;gt; nrf_dfu_ble: Freeing buffer 0x20006620
&amp;lt;debug&amp;gt; nrf_dfu_ble: Buffer 0x20006620 acquired, len 244 (244)
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
&amp;lt;debug&amp;gt; nrf_dfu_flash: nrf_fstorage_write(addr=0x00025E4C, src=0x20006620, len=244 bytes), queue usage: 1
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Request handling complete. Result: 0x1
&amp;lt;debug&amp;gt; nrf_dfu_flash: Flash write success: addr=0x00025E4C, pending 1
&amp;lt;debug&amp;gt; nrf_dfu_ble: Freeing buffer 0x20006620
&amp;lt;debug&amp;gt; nrf_dfu_ble: Buffer 0x20006620 acquired, len 192 (244)
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
&amp;lt;debug&amp;gt; nrf_dfu_flash: nrf_fstorage_write(addr=0x00025F40, src=0x20006620, len=192 bytes), queue usage: 1
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Request handling complete. Result: 0x1
&amp;lt;debug&amp;gt; nrf_dfu_flash: Flash write success: addr=0x00025F40, pending 1
&amp;lt;debug&amp;gt; nrf_dfu_ble: Freeing buffer 0x20006620
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Handle NRF_DFU_OP_CRC_GET (data)
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Offset:53248, CRC:0x672E882D
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Request handling complete. Result: 0x1
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_EXECUTE (data)
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Request handling complete. Result: 0x1
&amp;lt;debug&amp;gt; app: timer_stop (0x20005984)
&amp;lt;debug&amp;gt; app: timer_activate (0x20005984)
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_CREATE (data)
&amp;lt;debug&amp;gt; nrf_dfu_flash: nrf_fstorage_erase(addr=0x0x00026000, len=1 pages), queue usage: 1
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Creating object with size: 424. Offset: 0x0000D000, CRC: 0x672E882D
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Request handling complete. Result: 0x1
&amp;lt;debug&amp;gt; nrf_dfu_flash: Flash erase success: addr=0x00026000, pending 1
&amp;lt;debug&amp;gt; nrf_dfu_ble: Buffer 0x20006620 acquired, len 244 (244)
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
&amp;lt;debug&amp;gt; nrf_dfu_flash: nrf_fstorage_write(addr=0x00026000, src=0x20006620, len=244 bytes), queue usage: 1
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Request handling complete. Result: 0x1
&amp;lt;debug&amp;gt; nrf_dfu_flash: Flash write success: addr=0x00026000, pending 1
&amp;lt;debug&amp;gt; nrf_dfu_ble: Freeing buffer 0x20006620
&amp;lt;debug&amp;gt; nrf_dfu_ble: Buffer 0x20006620 acquired, len 180 (244)
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (data)
&amp;lt;debug&amp;gt; nrf_dfu_flash: nrf_fstorage_write(addr=0x000260F4, src=0x20006620, len=180 bytes), queue usage: 1
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Request handling complete. Result: 0x1
&amp;lt;debug&amp;gt; nrf_dfu_flash: Flash write success: addr=0x000260F4, pending 1
&amp;lt;debug&amp;gt; nrf_dfu_ble: Freeing buffer 0x20006620
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Handle NRF_DFU_OP_CRC_GET (data)
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Offset:53672, CRC:0x37073ED7
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Request handling complete. Result: 0x1
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_EXECUTE (data)
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Whole firmware image received. Postvalidating.
&amp;lt;debug&amp;gt; nrf_dfu_validation: Hash verification. start address: 0x19000, size: 0xD1A8
&amp;lt;debug&amp;gt; nrf_dfu_settings: Writing settings...
&amp;lt;debug&amp;gt; nrf_dfu_settings: Erasing old settings at: 0x0007F000
&amp;lt;debug&amp;gt; nrf_dfu_flash: nrf_fstorage_erase(addr=0x0x0007F000, len=1 pages), queue usage: 1
&amp;lt;debug&amp;gt; nrf_dfu_flash: nrf_fstorage_write(addr=0x0007F000, src=0E000.
0x1
&amp;lt;debug&amp;gt; app: timer_stop (0x20005984)
&amp;lt;debug&amp;gt; app: timer_activate (0x20005984)
&amp;lt;debug&amp;gt; nrf_dfu_flash: Flash erase success: addr=0x0007F000, pending 4
&amp;lt;debug&amp;gt; nrf_dfu_flash: Flash write success: addr=0x0007F000, pending 3
&amp;lt;debug&amp;gt; nrf_dfu_flash: Flash erase success: addr=0x0007E000, pending 2
&amp;lt;debug&amp;gt; nrf_dfu_flash: Flash write success: addr=0x0007E000, pending 1
&amp;lt;debug&amp;gt; nrf_dfu_req_handler: All flash operations have completed. DFU completed.
&amp;lt;debug&amp;gt; app: Shutting down transports (found: 1)
&amp;lt;debug&amp;gt; nrf_dfu_ble: Shutting down BLE transport.
&amp;lt;debug&amp;gt; nrf&amp;lt;info&amp;gt; app: Inside main
&amp;lt;debug&amp;gt; app: In nrf_bootloader_init
&amp;lt;debug&amp;gt; nrf_dfu_settings: Calling nrf_dfu_settings_init()...
&amp;lt;debug&amp;gt; nrf_dfu_flash: Initializing nrf_fstorage_nvmc backend.
&amp;lt;debug&amp;gt; nrf_dfu_settings: Using settings page.
&amp;lt;debug&amp;gt; nrf_dfu_settings: Copying forbidden parts from backup page.
&amp;lt;debug&amp;gt; nrf_dfu_settings: Destination settings are identical to source, write not needed. Skipping.
&amp;lt;info&amp;gt; nrf_dfu_settings: Backing up settings page to address 0x7E000.
&amp;lt;debug&amp;gt; nrf_dfu_settings: Destination settings are identical to &amp;lt;info&amp;gt; app: Entering DFU mode.&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;It seems that some messages are fragmented. I try to produce a better log in the afternoon.&lt;/p&gt;
&lt;p&gt;Thanks again.&lt;/p&gt;
&lt;p&gt;Thib&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to use external app firmware update</title><link>https://devzone.nordicsemi.com/thread/280504?ContentTypeID=1</link><pubDate>Wed, 18 Nov 2020 06:52:11 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:02144605-43ec-488b-809d-0b4b90733725</guid><dc:creator>ThibR</dc:creator><description>&lt;p&gt;Hi Einar, &lt;/p&gt;
&lt;p&gt;thanks a lot for your support ;)&lt;/p&gt;
&lt;p&gt;I confirm I enabled all necessary macro on sdk_config.h&lt;/p&gt;
&lt;p&gt;I will try to produce some traces as soons as possible.&lt;/p&gt;
&lt;p&gt;Regards&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to use external app firmware update</title><link>https://devzone.nordicsemi.com/thread/280353?ContentTypeID=1</link><pubDate>Tue, 17 Nov 2020 12:42:47 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:71f8c384-0125-463a-8f8d-323c92d284e6</guid><dc:creator>Einar Thorsrud</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;The nrf_dfu_validation_post_external_app_execute() that you implement is called if the update is for an external app, and that is enabled in the bootloader and the whole firmware is received and the command is NRF_DFU_OP_OBJECT_EXECUTE.&amp;nbsp;Generally, what the external app feature gives you is a way to transfer the image to the nRF, and then call your nrf_dfu_validation_post_external_app_execute(). From then you are responsible for all the rest.&lt;/p&gt;
&lt;p&gt;Regarding the code snippet you refer to, NRF_DFU_SUPPORTS_EXTERNAL_APP is an sdk_config.h macro that must be enabled. The is_trusted parameter is used to signal if the function can make permanent changes on the nRF state (has been validated etc.). You can see how it is used in the various post_validate functions etc.&lt;/p&gt;
&lt;p&gt;I think to understand the issue here it would be good if you enable debug logging so that we can see what happens in the bootloader, and compare that with what you would expected to happen.&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>