<?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>Secure DFU stuck in Bootloader</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/80226/secure-dfu-stuck-in-bootloader</link><description>Hi, 
 I&amp;#39;m using the nRF52840-DK with SDK 17.0.2. I&amp;#39;ve developed part of my app, and would like to integrate secure OTA reflash for it. I&amp;#39;ve copied the code at examples/dfu/secure_bootloader into my project, generated keys, and have flashed the bootloader</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Mon, 04 Oct 2021 12:28:16 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/80226/secure-dfu-stuck-in-bootloader" /><item><title>RE: Secure DFU stuck in Bootloader</title><link>https://devzone.nordicsemi.com/thread/332343?ContentTypeID=1</link><pubDate>Mon, 04 Oct 2021 12:28:16 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:f9b3fd77-d910-4cd1-a3e5-b9b01c7228d7</guid><dc:creator>Vidar Berg</dc:creator><description>&lt;p&gt;Hi Brian,&lt;/p&gt;
&lt;p&gt;Thanks for the posting the log. It shows the pre-validation step is failing because Softdevice FWID specified in the DFU init command (--sd-req 0xCA) does not match the FWID of the Softdevice present on your device.&lt;/p&gt;
&lt;p&gt;I assume you are using v.7.2.0 of the s140 SD as that is the default version used in this SDK release? In that case, you must set the FWID to 0x0100 instead of 0xCA which is the FWID for s140 v.7.0.1.&lt;/p&gt;
&lt;p&gt;e.g.&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&amp;nbsp;&amp;gt; nrfutil pkg generate --hw-version 52 --application-version 1 --application obj_app/app.hex &lt;strong&gt;--sd-req 0x0100&lt;/strong&gt;--key-file ../dfu/priv.pem obj_app/app_package.zip&lt;/p&gt;
&lt;p&gt;Note: the FWIDs can be found from the Softdevice release notes.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://devzone.nordicsemi.com/resized-image/__size/320x240/__key/communityserver-discussions-components-files/4/8623.pastedimage1633349578298v1.png" alt=" " /&gt;&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Vidar&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Edit: &lt;/strong&gt;Forgot to comment on this:&lt;/p&gt;
[quote user=""]&lt;div&gt;bootloader is using cc310_bl.&amp;nbsp; Do I need to use micro-ecc to get this to work?&lt;/div&gt;
&lt;div&gt;&amp;nbsp; Any thoughts on what I&amp;#39;m doing wrong here?&lt;/div&gt;[/quote]
&lt;p&gt;It&amp;#39;s generally best to use the cc310_bl library. It enables HW acceleration for the crypto algorithms used by the bootloader.&amp;nbsp; micro-ecc is only used for the nRF52 variants that don&amp;#39;t include the &lt;span&gt;&lt;a href="https://infocenter.nordicsemi.com/topic/ps_nrf52840/cryptocell.html?cp=4_0_0_5_5"&gt;CRYPTOCELL — ARM TrustZone CryptoCell 310&lt;/a&gt;&lt;/span&gt; module&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Secure DFU stuck in Bootloader</title><link>https://devzone.nordicsemi.com/thread/332237?ContentTypeID=1</link><pubDate>Mon, 04 Oct 2021 03:23:44 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:8072138a-bc65-4df7-8efd-2de4ca3b6c2b</guid><dc:creator>Brian</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;&amp;nbsp; I just loaded the debug version of secure_bootloader using my version of dfu_public_key.c.&amp;nbsp; When I re-attempted the DFU, I get the following RTT output -&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;lt;info&amp;gt; app: Inside main&lt;br /&gt;&amp;lt;debug&amp;gt; app: In nrf_bootloader_init&lt;br /&gt;&amp;lt;info&amp;gt; app: Inside main&lt;br /&gt;&amp;lt;debug&amp;gt; app: In nrf_bootloader_init&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_settings: Calling nrf_dfu_settings_init()...&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_flash: Initializing nrf_fstorage_nvmc backend.&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_settings: Using settings page.&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_settings: Copying forbidden parts from backup page.&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_settings: Destination settings are identical to source, write not needed. Skipping.&lt;br /&gt;&amp;lt;info&amp;gt; nrf_dfu_settings: Backing up settings page to address 0xFE000.&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_settings: Destination settings are identical to source, write not needed. Skipping.&lt;br /&gt;&amp;lt;debug&amp;gt; app: Enter nrf_bootloader_fw_activate&lt;br /&gt;&amp;lt;info&amp;gt; app: No firmware to activate.&lt;br /&gt;&amp;lt;debug&amp;gt; app: App is valid&lt;br /&gt;&amp;lt;debug&amp;gt; app: DFU mode requested via GPREGRET.&lt;br /&gt;&amp;lt;info&amp;gt; nrf_bootloader_wdt: WDT is not enabled&lt;br /&gt;&amp;lt;debug&amp;gt; app: in weak nrf_dfu_init_user&lt;br /&gt;&amp;lt;debug&amp;gt; app: timer_stop (0x20005984)&lt;br /&gt;&amp;lt;debug&amp;gt; app: timer_activate (0x20005984)&lt;br /&gt;&amp;lt;info&amp;gt; app: Entering DFU mode.&lt;br /&gt;&amp;lt;debug&amp;gt; app: Initializing transports (found: 1)&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: Initializing BLE DFU transport&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: Setting up vector table: 0x000F1000&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: Enabling SoftDevice.&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: Configuring BLE stack.&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: Enabling the BLE stack.&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: No advertising name found&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: Using default advertising name&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: Advertising...&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: BLE DFU transport initialized.&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_flash: Initializing nrf_fstorage_sd backend.&lt;br /&gt;&amp;lt;debug&amp;gt; app: Enter main loop&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: Connected&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: Received BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST.&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: Received BLE_GAP_EVT_DATA_LENGTH_UPDATE (27, max_rx_time 328).&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: Received BLE_GAP_EVT_CONN_PARAM_UPDATE&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: max_conn_interval: 12&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: min_conn_interval: 12&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: slave_latency: 0&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: conn_sup_timeout: 600&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: Received BLE_GAP_EVT_CONN_PARAM_UPDATE&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: max_conn_interval: 6&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: min_conn_interval: 6&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: slave_latency: 0&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: conn_sup_timeout: 500&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: Received BLE_GAP_EVT_CONN_PARAM_UPDATE&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: max_conn_interval: 12&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: min_conn_interval: 12&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: slave_latency: 0&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: conn_sup_timeout: 600&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: Received BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST (request: 517, reply: 247).&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: Received BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST.&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: Received BLE_GAP_EVT_DATA_LENGTH_UPDATE (251, max_rx_time 2120).&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_SELECT (command)&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Request handling complete. Result: 0x1&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: Set receipt notif&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Handle NRF_DFU_OP_RECEIPT_NOTIF_SET&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Request handling complete. Result: 0x1&lt;br /&gt;&amp;lt;debug&amp;gt; app: Shutting down transports (found: 1)&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_CREATE (command)&lt;br /&gt;&amp;lt;debug&amp;gt; app: timer_stop (0x20005984)&lt;br /&gt;&amp;lt;debug&amp;gt; app: timer_activate (0x20005984)&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Request handling complete. Result: 0x1&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: Buffer 0x200092B0 acquired, len 141 (244)&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_WRITE (command)&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: Freeing buffer 0x200092B0&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Request handling complete. Result: 0x1&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Handle NRF_DFU_OP_CRC_GET (command)&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Request handling complete. Result: 0x1&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Handle NRF_DFU_OP_OBJECT_EXECUTE (command)&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_validation: PB: Init packet data len: 64&lt;br /&gt;&amp;lt;info&amp;gt; nrf_dfu_validation: Signature required. Checking signature.&lt;br /&gt;&amp;lt;info&amp;gt; nrf_dfu_validation: Calculating hash (len: 64)&lt;br /&gt;&amp;lt;info&amp;gt; nrf_dfu_validation: Verify signature&lt;br /&gt;&amp;lt;info&amp;gt; nrf_dfu_validation: Image verified&lt;br /&gt;&amp;lt;warning&amp;gt; nrf_dfu_ver_validation: SD req not met.&lt;br /&gt;&amp;lt;warning&amp;gt; nrf_dfu_validation: Prevalidation failed.&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_validation: Init command:&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_validation: 08 01 10 34 1A 02 CA 01|...4....&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_validation: 20 00 28 00 30 00 38 84| .(.0.8.&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_validation: BF 0E 42 24 08 03 12 20|..B$... &lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_validation: 78 87 9B 52 AE 45 EB CB|x..R.E..&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_validation: BD 36 34 D5 A9 C4 7B 54|.64...{T&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_validation: 6F 8A D0 0B C7 B6 0B A9|o.......&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_validation: 5C 15 95 A4 BA F6 85 5C|\......\&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_validation: 48 00 52 04 08 01 12 00|H.R.....&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_req_handler: Request handling complete. Result: 0xB&lt;br /&gt;&amp;lt;warning&amp;gt; nrf_dfu_ble: DFU request 4 failed with error: 0xB&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: Received BLE_GAP_EVT_CONN_PARAM_UPDATE&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: max_conn_interval: 6&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: min_conn_interval: 6&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: slave_latency: 0&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: conn_sup_timeout: 500&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: Received BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST.&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: Received BLE_GAP_EVT_DATA_LENGTH_UPDATE (251, max_rx_time 2120).&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: Received BLE_GAP_EVT_CONN_PARAM_UPDATE&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: max_conn_interval: 12&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: min_conn_interval: 12&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: slave_latency: 0&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: conn_sup_timeout: 600&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: Received BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST.&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: Received BLE_GAP_EVT_DATA_LENGTH_UPDATE (251, max_rx_time 2120).&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_ble: Advertising...&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_settings: Using settings page.&lt;br /&gt;&amp;lt;debug&amp;gt; nrf_dfu_settings: Copying forbidden parts from backup page.&lt;br /&gt;&amp;lt;debug&amp;gt; app: timer_stop (0x20005984)&lt;br /&gt;&amp;lt;debug&amp;gt; app: timer_fire (&lt;/p&gt;
&lt;p&gt;I see the message &amp;quot;Prevalidation failed&amp;quot;.&amp;nbsp; What causes this error?&amp;nbsp; Am I not generating the app_packet correctly?&lt;/p&gt;
&lt;p&gt;Thanks...&lt;/p&gt;
&lt;p&gt;Brian&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>