<?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>OFF CHIP OTA UPDATE using external flash</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/105096/off-chip-ota-update-using-external-flash</link><description>I am working on this project off chip ota update on nRF5_SDK using ecample/thread/dfu by now, i have done changes in these functions on_data_obj_create_request() and on_data_obj_write_request(). initially these functions were erasing and writing data</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Sat, 30 Dec 2023 04:49:26 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/105096/off-chip-ota-update-using-external-flash" /><item><title>RE: OFF CHIP OTA UPDATE using external flash</title><link>https://devzone.nordicsemi.com/thread/462134?ContentTypeID=1</link><pubDate>Sat, 30 Dec 2023 04:49:26 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:ac2a9a25-2401-4f44-884c-fc6cbac614b5</guid><dc:creator>Priyesh Shahi</dc:creator><description>&lt;p&gt;The occasional CRC failure occurred due to the &amp;#39;rest_block&amp;#39; variable stemming from the &amp;#39;FIRMWARE_BLOCK_SIZE,&amp;#39; which is set to 4096. Therefore, whenever the &amp;#39;rest_block&amp;#39; size exceeded 256, this error occurred.&lt;/p&gt;
&lt;p&gt;// CRC verification on external image&lt;/p&gt;
&lt;p&gt;uint16_t firmware_blocks = image_size / FIRMWARE_BLOCK_SIZE;&lt;/p&gt;
&lt;p&gt;uint8_t rest_block = image_size % FIRMWARE_BLOCK_SIZE;&lt;/p&gt;
&lt;p&gt;uint32_t computed_crc = 0;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;As this problem has been solved, my task is now completed. Thank you so much!&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: OFF CHIP OTA UPDATE using external flash</title><link>https://devzone.nordicsemi.com/thread/461542?ContentTypeID=1</link><pubDate>Fri, 22 Dec 2023 09:57:39 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:a4c028ab-33ad-4c4e-9bc0-a2bb0f082d78</guid><dc:creator>Priyesh Shahi</dc:creator><description>&lt;p&gt;Is there a way to erase the trigger settings or the settings saved for the currently downloading firmware? Because once the above error occurs, my firmware process works. However, alternatively, if it works fine this time, then the next time there might be an error. Or, if there&amp;#39;s an error this time, it might work the next time.&lt;/p&gt;
&lt;p&gt;I think some type of setting or data is stored in the system that isn&amp;#39;t erased when something fails&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: OFF CHIP OTA UPDATE using external flash</title><link>https://devzone.nordicsemi.com/thread/461410?ContentTypeID=1</link><pubDate>Thu, 21 Dec 2023 10:18:44 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:7509a522-478e-42f2-8ad1-19262f773642</guid><dc:creator>Vidar Berg</dc:creator><description>&lt;p&gt;It seems it would be easier to back up the original settings to RAM. However, it&amp;#39;s&amp;nbsp;a bit surprising that you encounter occasional CRC errors in your copy routine. The image in bank 1 is validated by the post-validate function before the activation takes place.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: OFF CHIP OTA UPDATE using external flash</title><link>https://devzone.nordicsemi.com/thread/461377?ContentTypeID=1</link><pubDate>Thu, 21 Dec 2023 08:32:44 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:77a80807-c4d6-4363-b2db-d49b683b392c</guid><dc:creator>Priyesh Shahi</dc:creator><description>&lt;p&gt;&lt;span&gt;Should I save these values in external flash and reset them when encountering the same error? Or is there another method to retrieve the previous settings?&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: OFF CHIP OTA UPDATE using external flash</title><link>https://devzone.nordicsemi.com/thread/461376?ContentTypeID=1</link><pubDate>Thu, 21 Dec 2023 08:24:55 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:0f3cf687-39e1-4520-921a-3f1f728a79f0</guid><dc:creator>Vidar Berg</dc:creator><description>&lt;p&gt;This suggests that the bank0.crc value in bt settings&amp;nbsp;may have been updated (assuming you&amp;#39;re using CRC validation (default)). The bootloader will verify the compute the CRC of the application to verify the integrity of the app image before booting. You also need to revert the app version number.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: OFF CHIP OTA UPDATE using external flash</title><link>https://devzone.nordicsemi.com/thread/461372?ContentTypeID=1</link><pubDate>Thu, 21 Dec 2023 08:18:46 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:3784a3f5-a1ca-4692-9413-cc180a15d856</guid><dc:creator>Priyesh Shahi</dc:creator><description>&lt;p&gt;&lt;span&gt;Yes, it does. However, The firmware version changes, and when I attempt to restart my device, it fails within the &lt;/span&gt;&lt;code&gt;app_is_valid()&lt;/code&gt;&lt;span&gt; function while executing the &lt;/span&gt;&lt;code&gt;boot_validate()&lt;/code&gt;&lt;span&gt; function. I&amp;#39;ve been investigating the cause and noticed that during the execution of this code segment:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;// Postvalidate if DFU has signaled that update is ready.&lt;br /&gt; if (s_dfu_settings.bank_current == NRF_DFU_CURRENT_BANK_1)&lt;br /&gt; {&lt;br /&gt; postvalidate();&lt;br /&gt; }&lt;br /&gt; #endif&lt;/p&gt;
&lt;p&gt;&lt;span&gt;The firmware version and &lt;/span&gt;&lt;code&gt;s_dfu_settings.boot_validation_app&lt;/code&gt;&lt;span&gt; are updated within the &lt;/span&gt;&lt;code&gt;postvalidate_app()&lt;/code&gt;&lt;span&gt; function.&lt;br /&gt;&lt;br /&gt;memcpy(&amp;amp;s_dfu_settings.boot_validation_app, &amp;amp;boot_validation, sizeof(boot_validation));&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;s_dfu_settings.app_version = p_init-&amp;gt;fw_version;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;// The is_trusted argument specifies whether the function should have side effects.
static bool postvalidate_app(dfu_init_command_t const * p_init, uint32_t src_addr, uint32_t data_len, bool is_trusted)
{
    boot_validation_t boot_validation;

    ASSERT(p_init-&amp;gt;type == DFU_FW_TYPE_APPLICATION);

    if (!boot_validation_extract(&amp;amp;boot_validation, p_init, 0, src_addr, data_len, VALIDATE_CRC))
    {
        return false;
    }
#if !NRF_DFU_IN_APP
    else if (NRF_BL_APP_SIGNATURE_CHECK_REQUIRED &amp;amp;&amp;amp;
             (boot_validation.type != VALIDATE_ECDSA_P256_SHA256))
    {
        NRF_LOG_WARNING(&amp;quot;The boot validation of the app must be a signature check.&amp;quot;);
        return false;
    }
#endif

    if (!is_trusted)
    {
        return true;
    }

    memcpy(&amp;amp;s_dfu_settings.boot_validation_app, &amp;amp;boot_validation, sizeof(boot_validation));

    s_dfu_settings.bank_1.bank_code = NRF_DFU_BANK_VALID_APP;

    NRF_LOG_DEBUG(&amp;quot;Invalidating old application in bank 0.&amp;quot;);
    s_dfu_settings.bank_0.bank_code = NRF_DFU_BANK_INVALID;

    if (!DFU_REQUIRES_SOFTDEVICE &amp;amp;&amp;amp; !update_requires_softdevice(p_init))
    {
         // App does not need SD, so it should be placed where SD is.
         nrf_dfu_softdevice_invalidate();
    }

    if (!NRF_DFU_DEBUG ||
                (NRF_DFU_DEBUG &amp;amp;&amp;amp; (p_init-&amp;gt;has_is_debug == false || p_init-&amp;gt;is_debug == false)))
    {
        s_dfu_settings.app_version = p_init-&amp;gt;fw_version;
    }

    return true;
}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: OFF CHIP OTA UPDATE using external flash</title><link>https://devzone.nordicsemi.com/thread/461367?ContentTypeID=1</link><pubDate>Thu, 21 Dec 2023 07:46:34 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:d58dd027-39b0-4208-a91f-57f22d8c4a09</guid><dc:creator>Vidar Berg</dc:creator><description>&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;Does your bootloader not fall back to the old application when the CRCs don&amp;#39;t match?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: OFF CHIP OTA UPDATE using external flash</title><link>https://devzone.nordicsemi.com/thread/461226?ContentTypeID=1</link><pubDate>Wed, 20 Dec 2023 09:01:25 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:7d20260e-8c1d-4954-92bc-dac1eb25569e</guid><dc:creator>Priyesh Shahi</dc:creator><description>&lt;p&gt;&lt;span&gt;Hello &lt;a href="https://devzone.nordicsemi.com/members/vibe"&gt;Vidar Berg&lt;/a&gt;&amp;nbsp;,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;The recent changes have been effective most of the time, but occasional failures still occur in the CRC calculation following image copying. The CRC obtained from the QSPI sometimes doesn&amp;#39;t align with the computed CRC after the image copy process. To address this, I implemented a modification: before copying the image, I perform a CRC calculation on the image stored in the external flash. Subsequently, I added a condition that allows the image to be copied only if these two CRC values match. This solution has been functioning properly. However, a problem arises when a CRC mismatch occurs. I&amp;#39;ve implemented a flag that triggers the start of the Bank 0 application, but I&amp;#39;m uncertain about the logic behind it. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;I&amp;#39;m considering adjustments to the settings that would prompt the bootloader to restart the Bank 0 application. Any insights on which settings should be modified for this purpose?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;static uint32_t app_activate(void) {
  // This function is only in use when new app is present in Bank 1
  uint32_t const image_size = s_dfu_settings.bank_1.image_size;

  uint32_t src_addr = s_dfu_settings.progress.update_start_address;
  uint32_t ret_val = NRF_SUCCESS;
  uint32_t target_addr = nrf_dfu_bank0_start_addr() + s_dfu_settings.write_offset;
  uint32_t length_left = (image_size - s_dfu_settings.write_offset);
  uint32_t crc;

  NRF_LOG_DEBUG(&amp;quot;Enter nrf_dfu_app_continue&amp;quot;);

  src_addr += s_dfu_settings.write_offset;

  if (src_addr == target_addr) {
    length_left = 0;
  }

  //qspi read
  uint32_t read_buffer[1]; // Buffer to store the read value

  // Read the value from QSPI memory into read_buffer (assumed nrf_drv_qspi_read is used)
  if (nrf_drv_qspi_read(read_buffer, sizeof(read_buffer), FW_CRC_ADDR) != NRFX_SUCCESS) {
    // Error handling if read fails
    WAIT_FOR_PERIPH();
    NRF_LOG_INFO(&amp;quot;Failed to read initial firmware crc.\r\n&amp;quot;);
  } else {
    // Successful read
    WAIT_FOR_PERIPH();

    downloaded_crc_val = read_buffer[0]; // Extract the read value from the buffer
    NRF_LOG_INFO(&amp;quot;Initial firmware crc=0x%X  at: 0x%X\r\n&amp;quot;, downloaded_crc_val, FW_CRC_ADDR);
  }

  //crc verification on external image
  uint16_t firmware_blocks = image_size / FIRMWARE_BLOCK_SIZE;
  uint8_t rest_block = image_size % FIRMWARE_BLOCK_SIZE;
  uint32_t computed_crc = 0; 


  for(uint16_t i=0; i &amp;lt;= firmware_blocks; i++)
  {

    uint8_t m_buffer_rx[FIRMWARE_BLOCK_SIZE];

    if(i == firmware_blocks)
    {
        if(nrf_drv_qspi_read(m_buffer_rx, rest_block,FIRMWARE_FLASH_ADDR + (FIRMWARE_BLOCK_SIZE * i)) != NRFX_SUCCESS)
        {
            WAIT_FOR_PERIPH();
            NRF_LOG_INFO(&amp;quot;\r\nFailed read data blocks in Ext Flash.\r\n&amp;quot;);
        }
        else
        {
            WAIT_FOR_PERIPH();
            computed_crc = crc32_compute(m_buffer_rx, rest_block, &amp;amp;computed_crc);
        }
    }
    else
    {
        if(nrf_drv_qspi_read(m_buffer_rx, FIRMWARE_BLOCK_SIZE,FIRMWARE_FLASH_ADDR + (FIRMWARE_BLOCK_SIZE * i)) != NRFX_SUCCESS)
        {
            WAIT_FOR_PERIPH();
            NRF_LOG_INFO(&amp;quot;\r\nFailed read data blocks in Ext Flash.\r\n&amp;quot;);
        }
        else
        {
            WAIT_FOR_PERIPH();
            computed_crc = crc32_compute(m_buffer_rx, FIRMWARE_BLOCK_SIZE, &amp;amp;computed_crc);
        }
    }
  }
  
  NRF_LOG_INFO(&amp;quot;Computed QSPI CRC: 0x%X\r\n&amp;quot;, computed_crc);

  if(computed_crc == downloaded_crc_val)
  {
      ret_val = image_copy(target_addr, src_addr, length_left, NRF_BL_FW_COPY_PROGRESS_STORE_STEP);
      if (ret_val != NRF_SUCCESS) {
        NRF_LOG_ERROR(&amp;quot;Failed to copy firmware.&amp;quot;);
        return ret_val;
      }
  }
  else
  {
      NRF_LOG_INFO(&amp;quot;ERROR: CRC mismatch app activation failed&amp;quot;);
      s_dfu_settings.bank_0.bank_code = NRF_DFU_BANK_VALID_APP;
      s_dfu_settings.bank_current == NRF_DFU_CURRENT_BANK_0;
      re_start = true;
      ret_val = NRF_ERROR_INVALID_DATA;
      return ret_val;
  }

  // Check the CRC of the copied data. Enable if so.
  crc = crc32_compute((uint8_t *)nrf_dfu_bank0_start_addr(), image_size, NULL);
  
  if (crc == s_dfu_settings.bank_1.image_crc || crc == downloaded_crc_val || crc == computed_crc) {
    NRF_LOG_DEBUG(&amp;quot;Setting app as valid&amp;quot;);
    s_dfu_settings.bank_0.bank_code = NRF_DFU_BANK_VALID_APP;
    s_dfu_settings.bank_0.image_crc = crc;
    s_dfu_settings.bank_0.image_size = image_size;
  } else {
    NRF_LOG_ERROR(&amp;quot;CRC computation failed for copied app: &amp;quot;
                  &amp;quot;src crc: 0x%08x, res crc: 0x%08x&amp;quot;,
        s_dfu_settings.bank_1.image_crc,
        crc);
  }&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: OFF CHIP OTA UPDATE using external flash</title><link>https://devzone.nordicsemi.com/thread/459535?ContentTypeID=1</link><pubDate>Fri, 08 Dec 2023 14:00:41 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:cd0d5d77-4388-4c3e-b3e6-1745661c5631</guid><dc:creator>Vidar Berg</dc:creator><description>&lt;p&gt;Thank you for the update. I&amp;#39;m glad to hear that you found the problem.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: OFF CHIP OTA UPDATE using external flash</title><link>https://devzone.nordicsemi.com/thread/459514?ContentTypeID=1</link><pubDate>Fri, 08 Dec 2023 12:37:21 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:a015dea5-375f-4bed-a632-f2eaffa10729</guid><dc:creator>Priyesh Shahi</dc:creator><description>&lt;p&gt;&lt;span&gt;Yes, I found the same thing in the initial logs from &lt;/span&gt;&lt;code&gt;background_dfu_state.c&lt;/code&gt;&lt;span&gt;. There was a CRC that matched the computed CRC in the bootloader. Consequently, I made some changes to the code, and it&amp;#39;s currently functioning as expected. Now, I&amp;#39;m in the process of testing it for the final version. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;This log is from the point where the first CRC was printed.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="height:151px;max-height:151px;max-width:559px;" alt=" " height="132" src="https://devzone.nordicsemi.com/resized-image/__size/1118x302/__key/communityserver-discussions-components-files/4/Screenshot_5F00_2023_2D00_12_2D00_08_5F00_17_2D00_20_2D00_03.png" width="558" /&gt;&lt;span style="font-family:inherit;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;This is the code I modified in the &lt;/span&gt;&lt;code&gt;parse_trigger()&lt;/code&gt;&lt;span&gt; function within the &lt;/span&gt;&lt;code&gt;background_dfu_state.c&lt;/code&gt;&lt;span&gt; file to store that CRC in the external QSPI flash.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;pre class="ui-code" data-mode="c_cpp"&gt;static bool parse_trigger(background_dfu_context_t       * p_dfu_ctx,
                          const background_dfu_trigger_t * p_trigger)
{
    uint8_t trigger_version = (p_trigger-&amp;gt;flags &amp;amp; TRIGGER_FLAGS_VERSION_MASK)
                                    &amp;gt;&amp;gt; TRIGGER_FLAGS_VERSION_OFFSET;

    if (trigger_version &amp;lt;= TRIGGER_VERSION)
    {
        // Base fields available from version 0.
        p_dfu_ctx-&amp;gt;init_cmd_size = uint32_big_decode((const uint8_t *)&amp;amp;p_trigger-&amp;gt;init_length);
        p_dfu_ctx-&amp;gt;init_cmd_crc  = uint32_big_decode((const uint8_t *)&amp;amp;p_trigger-&amp;gt;init_crc);
        p_dfu_ctx-&amp;gt;firmware_size = uint32_big_decode((const uint8_t *)&amp;amp;p_trigger-&amp;gt;image_length);
        p_dfu_ctx-&amp;gt;firmware_crc  = uint32_big_decode((const uint8_t *)&amp;amp;p_trigger-&amp;gt;image_crc);

        // Mode flag was added in DFU Trigger version 1.
        if (trigger_version &amp;gt;= 1)
        {
            p_dfu_ctx-&amp;gt;dfu_mode = (background_dfu_mode_t)((p_trigger-&amp;gt;flags
                                    &amp;amp; TRIGGER_FLAGS_MODE_MASK) &amp;gt;&amp;gt; TRIGGER_FLAGS_MODE_OFFSET);
            p_dfu_ctx-&amp;gt;reset_suppress = (p_trigger-&amp;gt;flags &amp;amp; TRIGGER_FLAGS_RESET_MASK) &amp;gt;&amp;gt;
                                          TRIGGER_FLAGS_RESET_OFFSET;

        }
        else
        {
            p_dfu_ctx-&amp;gt;dfu_mode = BACKGROUND_DFU_MODE_UNICAST;
        }

        NRF_LOG_INFO(&amp;quot;DFU trigger: init (sz=%d, crc=%0X) image (sz=%d, crc=%0X)&amp;quot;,
                     p_dfu_ctx-&amp;gt;init_cmd_size,
                     p_dfu_ctx-&amp;gt;init_cmd_crc,
                     p_dfu_ctx-&amp;gt;firmware_size,
                     p_dfu_ctx-&amp;gt;firmware_crc);

                     printf(&amp;quot;Total Number of blocks: %d\r\n&amp;quot;,p_dfu_ctx-&amp;gt;firmware_size/64);
    

    // Get the dynamic value of firmware_crc from p_dfu_ctx whenever needed
    uint32_t CRC_VAL = p_dfu_ctx-&amp;gt;firmware_crc;

    // Create an array and directly initialize it with the dynamic value using a compound literal
    uint32_t CRC_VAL_BUFF[] = { CRC_VAL };

    /* erase the flash */
        
    if(nrf_drv_qspi_erase(sizeof(CRC_VAL_BUFF), FIRMWARE_CRC_ADDR) != NRFX_SUCCESS)
    {
      NRF_LOG_INFO(&amp;quot;Failed to errase data blocks for initial firmware crc.\r\n&amp;quot;);
    }
    else
    {
      WAIT_FOR_PERIPH();
      NRF_LOG_INFO(&amp;quot;Succsessfully Erased Ext Flash block at: 0x%X\r\n\r\n&amp;quot;,FIRMWARE_CRC_ADDR);
    }



    if(nrf_drv_qspi_write(CRC_VAL_BUFF, sizeof(CRC_VAL_BUFF),FIRMWARE_CRC_ADDR) != NRFX_SUCCESS)
    {
      WAIT_FOR_PERIPH();
      NRF_LOG_INFO(&amp;quot;\r\nFailed storing initial firmware crc.\r\n&amp;quot;);
    }
    else
    {
      WAIT_FOR_PERIPH();
      NRF_LOG_INFO(&amp;quot;Succsessfully reead initial firmware crc=0x%X  at: 0x%X\r\n&amp;quot;, CRC_VAL, FIRMWARE_CRC_ADDR);
    }
    
    
    
    dfu_total_blocks = p_dfu_ctx-&amp;gt;firmware_size/64;

    if (p_dfu_ctx-&amp;gt;firmware_size % 64 != 0) {
        dfu_total_blocks += 1;
    }

          
        return true;
    }

    return false;
}
&lt;/pre&gt;&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 later modified the code in the &lt;/span&gt;&lt;code&gt;nrf_dfu_validation_boot_validate()&lt;/code&gt;&lt;span&gt; function within the &lt;/span&gt;&lt;code&gt;nrf_dfu_validation.c&lt;/code&gt;&lt;span&gt; file to read the same CRC and validate it against the computed CRC. This function is called twice: first after downloading the complete image in the external flash and then after a bootloader reset as well.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;after first call of this function:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img style="height:303px;max-height:303px;max-width:558px;" alt=" " height="212" src="https://devzone.nordicsemi.com/resized-image/__size/1116x606/__key/communityserver-discussions-components-files/4/Screenshot_5F00_2023_2D00_12_2D00_08_5F00_17_2D00_57_2D00_57.png" width="557" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;the second call of this function which comes at the end&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img style="height:289px;max-height:289px;max-width:541px;" alt=" " height="302" src="https://devzone.nordicsemi.com/resized-image/__size/1082x578/__key/communityserver-discussions-components-files/4/Screenshot_5F00_2023_2D00_12_2D00_08_5F00_18_2D00_00_2D00_14.png" width="540" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;the code which i changed&amp;nbsp;&lt;pre class="ui-code" data-mode="c_cpp"&gt;bool nrf_dfu_validation_boot_validate(boot_validation_t const * p_validation, uint32_t data_addr, uint32_t data_len)
{
    uint8_t const * p_data = (uint8_t*) data_addr;
    switch(p_validation-&amp;gt;type)
    {
        case NO_VALIDATION:
            return true;

        case VALIDATE_CRC:
        {
            uint32_t current_crc = *(uint32_t *)p_validation-&amp;gt;bytes;
            uint32_t crc = crc32_compute(p_data, data_len, NULL);

            //qspi read
            uint32_t read_buffer[1]; // Buffer to store the read value

            // Read the value from QSPI memory into read_buffer (assumed nrf_drv_qspi_read is used)
            if (nrf_drv_qspi_read(read_buffer, sizeof(read_buffer), FIRMWARE_CRC_ADDR) != NRFX_SUCCESS)
            {
                // Error handling if read fails
                WAIT_FOR_PERIPH();
                NRF_LOG_INFO(&amp;quot;\r\nFailed reading initial firmware crc.\r\n&amp;quot;);
            }
            else
            {
                // Successful read
                WAIT_FOR_PERIPH();

                CRC_VAL = read_buffer[0]; // Extract the read value from the buffer
                NRF_LOG_INFO(&amp;quot;Succsessfully reead initial firmware crc=0x%X  at: 0x%X\r\n&amp;quot;, CRC_VAL, FIRMWARE_CRC_ADDR);
            }


            NRF_LOG_INFO(&amp;quot;Validate CRC\r\nCuurent CRC: 0x%08x, Computed CRC: 0x%08x, initial crc: 0x%08x\r\n&amp;quot;,current_crc,crc,CRC_VAL);

            if (!(crc == current_crc || crc == CRC_VAL))
            {
                // CRC does not match with what is stored.
                NRF_LOG_DEBUG(&amp;quot;CRC check of app failed. Return %d \r\nCuurent CRC: 0x%08x, Computed CRC: 0x%08x&amp;quot;, NRF_DFU_DEBUG,current_crc,crc);
                return NRF_DFU_DEBUG;
            }
            return true;
        }

        case VALIDATE_SHA256:
            return nrf_dfu_validation_hash_ok(p_validation-&amp;gt;bytes, data_addr, data_len, false);

        case VALIDATE_ECDSA_P256_SHA256:
        {
            nrf_dfu_result_t res_code = nrf_dfu_validation_signature_check(
                                            DFU_SIGNATURE_TYPE_ECDSA_P256_SHA256,
                                            p_validation-&amp;gt;bytes,
                                            NRF_CRYPTO_ECDSA_SECP256R1_SIGNATURE_SIZE,
                                            p_data,
                                            data_len);
            return (res_code == NRF_DFU_RES_CODE_SUCCESS);
        }

        default:
            ASSERT(false);
            return false;
    }
}&lt;/pre&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Afterward, I updated the &lt;/span&gt;&lt;code&gt;app_activate()&lt;/code&gt;&lt;span&gt; function in &lt;/span&gt;&lt;code&gt;nrf_bootloader_fw_activation.c&lt;/code&gt;&lt;span&gt; to perform the same validation against the computed CRC, and this part is also functioning correctly.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;log of this function&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img style="height:195px;max-height:195px;max-width:550px;" alt=" " height="201" src="https://devzone.nordicsemi.com/resized-image/__size/1100x390/__key/communityserver-discussions-components-files/4/Screenshot_5F00_2023_2D00_12_2D00_08_5F00_18_2D00_01_2D00_52.png" width="550" /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;the code which i changed&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;static uint32_t app_activate(void)
{
    // This function is only in use when new app is present in Bank 1
    uint32_t const image_size  = s_dfu_settings.bank_1.image_size;

    uint32_t src_addr    = s_dfu_settings.progress.update_start_address;
    uint32_t ret_val     = NRF_SUCCESS;
    uint32_t target_addr = nrf_dfu_bank0_start_addr() + s_dfu_settings.write_offset;
    uint32_t length_left = (image_size - s_dfu_settings.write_offset);
    uint32_t crc;

    NRF_LOG_DEBUG(&amp;quot;Enter nrf_dfu_app_continue&amp;quot;);

    src_addr += s_dfu_settings.write_offset;

    if (src_addr == target_addr)
    {
        length_left = 0;
    }

    ret_val = image_copy(target_addr, src_addr, length_left, NRF_BL_FW_COPY_PROGRESS_STORE_STEP);
    if (ret_val != NRF_SUCCESS)
    {
        NRF_LOG_ERROR(&amp;quot;Failed to copy firmware.&amp;quot;);
        return ret_val;
    }

    // Check the CRC of the copied data. Enable if so.
    crc = crc32_compute((uint8_t*)nrf_dfu_bank0_start_addr(), image_size, NULL);
    
    //qspi read
    uint32_t read_buffer[1]; // Buffer to store the read value

    // Read the value from QSPI memory into read_buffer (assumed nrf_drv_qspi_read is used)
    if (nrf_drv_qspi_read(read_buffer, sizeof(read_buffer), FIRMWARE_CRC_ADDR) != NRFX_SUCCESS)
    {
        // Error handling if read fails
        WAIT_FOR_PERIPH();
        NRF_LOG_INFO(&amp;quot;\r\nFailed reading initial firmware crc.\r\n&amp;quot;);
    }
    else
    {
        // Successful read
        WAIT_FOR_PERIPH();

        CRC_VAL_INI = read_buffer[0]; // Extract the read value from the buffer
        NRF_LOG_INFO(&amp;quot;Succsessfully reead initial firmware crc=0x%X  at: 0x%X\r\n&amp;quot;, CRC_VAL_INI, FIRMWARE_CRC_ADDR);
    }



    if (crc == s_dfu_settings.bank_1.image_crc || crc == CRC_VAL_INI)
    {
        NRF_LOG_DEBUG(&amp;quot;Setting app as valid&amp;quot;);
        s_dfu_settings.bank_0.bank_code = NRF_DFU_BANK_VALID_APP;
        s_dfu_settings.bank_0.image_crc = crc;
        s_dfu_settings.bank_0.image_size = image_size;
    }
    else
    {
        NRF_LOG_ERROR(&amp;quot;CRC computation failed for copied app: &amp;quot;
                      &amp;quot;src crc: 0x%08x, res crc: 0x%08x&amp;quot;,
                      s_dfu_settings.bank_1.image_crc,
                      crc);
    }

    return ret_val;
}&lt;/pre&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;As of now i have done this &lt;span style="font-size:12px;"&gt;process four times and it&amp;#39;s working&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img style="height:94px;max-height:94px;max-width:555px;" alt=" " height="96" src="https://devzone.nordicsemi.com/resized-image/__size/1110x188/__key/communityserver-discussions-components-files/4/Screenshot_5F00_2023_2D00_12_2D00_08_5F00_18_2D00_06_2D00_22.png" width="555" /&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;I&amp;#39;ve nearly completed the task at hand, and currently, everything is functioning smoothly. I&amp;#39;m in the process of conducting final tests to ensure everything is perfect. If any difficulties arise, I&amp;#39;ll return here for further assistance. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Thank you for your support throughout this process.&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: OFF CHIP OTA UPDATE using external flash</title><link>https://devzone.nordicsemi.com/thread/459509?ContentTypeID=1</link><pubDate>Fri, 08 Dec 2023 11:46:33 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:9ddcd0b6-0edd-4954-9c46-a744c3e55f57</guid><dc:creator>Vidar Berg</dc:creator><description>&lt;p&gt;It is the FW images that are interesting to compare in this case. If they are identical, then that indicates that everything from receiving the FW image to the QSPI to storing it to bank 0 is being handled correctly.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Another thing you can try is to generate the settings page with nrfutil and see if it gives the same CRC value as the one computed by the bootloader.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;$ nrfutil nrf5sdk-tools settings generate --application &amp;lt;your application hex&amp;gt; --application-version 2 --bl-settings-version 2 --bootloader-version 1 --family NRF52840 settings.hex&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:240px;max-width:320px;" src="https://devzone.nordicsemi.com/resized-image/__size/640x480/__key/communityserver-discussions-components-files/4/pastedimage1702035990388v1.png" alt=" " /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: OFF CHIP OTA UPDATE using external flash</title><link>https://devzone.nordicsemi.com/thread/459469?ContentTypeID=1</link><pubDate>Fri, 08 Dec 2023 07:25:35 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:32628e05-fcab-4b7b-b51e-f5d88f2c1377</guid><dc:creator>Priyesh Shahi</dc:creator><description>&lt;p&gt;&lt;span&gt;Sorry, I was using different build files for comparison. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;After using the same build files, there is no difference in the application area. The only distinction lies in the settings area of the flash. This time, I&amp;#39;m comparing direct flash and flash after DFU. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Perhaps the reason for this difference is that I generate different setting files to flash this app on my device.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;dnk124 ~ nrfjprog --memrd 0x0 --n 1048576 &amp;gt; qspi_flash.hex&lt;br /&gt; dnk124 ~ nrfjprog --memrd 0x0 --n 1048576 &amp;gt; flash.hex&lt;br /&gt; dnk124 ~ cmp qspi_flash.hex flash.hex&lt;br /&gt;qspi_flash.hex flash.hex differ: byte 4204678, line 60938&lt;br /&gt; dnk124 ~ 1 diff qspi_flash.hex flash.hex&lt;br /&gt;60938,61027c60938,61027&lt;br /&gt;&amp;lt; 0x000EE090: FFFF0026 C4100402 00000000 000003EA |&amp;amp;...............|&lt;br /&gt;&amp;lt; 0x000EE0A0: 000003EC 1D049C28 65E2F7EE 146DA9C1 |....(......e..m.|&lt;br /&gt;&amp;lt; 0x000EE0B0: 656F9674 B15B635F 0AB10002 FFF40007 |t.oe_c[.........|&lt;br /&gt;&amp;lt; 0x000EE0C0: FFFF0020 BFFD8B82 80573BF0 52DF1B7E | ........;W.~..R|&lt;br /&gt;&amp;lt; 0x000EE0D0: 9B630F2F EEDEFAAB EC74EBE6 9C0D6EED |/.c.......t..n..|&lt;br /&gt;&amp;lt; 0x000EE0E0: C2E2718D FFF40003 FFFF0026 C4100402 |.q......&amp;amp;.......|&lt;br /&gt;&amp;lt; 0x000EE0F0: 00000000 000003EB 000007D4 1D049C28 |............(...|&lt;br /&gt;&amp;lt; 0x000EE100: 65E2F7EE 146DA9C1 656F9674 B15B635F |...e..m.t.oe_c[.|&lt;br /&gt;&amp;lt; 0x000EE110: 146D0002 FFF40003 FFFF0026 C4100402 |..m.....&amp;amp;.......|&lt;br /&gt;&amp;lt; 0x000EE120: 00000000 000003EB 00000BBC 1D049C28 |............(...|&lt;br /&gt;&amp;lt; 0x000EE130: 65E2F7EE 146DA9C1 656F9674 B15B635F |...e..m.t.oe_c[.|&lt;br /&gt;&amp;lt; 0x000EE140: 146D0002 FFF40003 FFFF0026 C4100402 |..m.....&amp;amp;.......|&lt;br /&gt;&amp;lt; 0x000EE150: 00000000 000003EB 00000FA4 1D049C28 |............(...|&lt;br /&gt;&amp;lt; 0x000EE160: 65E2F7EE 146DA9C1 656F9674 B15B635F |...e..m.t.oe_c[.|&lt;br /&gt;&amp;lt; 0x000EE170: 146D0002 FFF40003 FFFF0026 C4100402 |..m.....&amp;amp;.......|&lt;br /&gt;&amp;lt; 0x000EE180: 00000000 000003EB 0000138C 1D049C28 |............(...|&lt;br /&gt;&amp;lt; 0x000EE190: 65E2F7EE 146DA9C1 656F9674 B15B635F |...e..m.t.oe_c[.|&lt;br /&gt;&amp;lt; 0x000EE1A0: 20030002 FFF40003 FFFF0026 C4100402 |... ....&amp;amp;.......|&lt;br /&gt;&amp;lt; 0x000EE1B0: 00000000 000003EB 00001774 1D049C28 |........t...(...|&lt;br /&gt;&amp;lt; 0x000EE1C0: 65E2F7EE 146DA9C1 656F9674 B15B635F |...e..m.t.oe_c[.|&lt;br /&gt;&amp;lt; 0x000EE1D0: 20030002 FFF40003 FFFF0026 C4100402 |... ....&amp;amp;.......|&lt;br /&gt;&amp;lt; 0x000EE1E0: 00000000 000003EB 00001B5C 1D049C28 |........\...(...|&lt;br /&gt;&amp;lt; 0x000EE1F0: 65E2F7EE 146DA9C1 656F9674 B15B635F |...e..m.t.oe_c[.|&lt;br /&gt;&amp;lt; 0x000EE200: 20030002 FFF40003 FFFF0026 C4100402 |... ....&amp;amp;.......|&lt;br /&gt;&amp;lt; 0x000EE210: 00000000 000003EB 00001F44 1D049C28 |........D...(...|&lt;br /&gt;&amp;lt; 0x000EE220: 65E2F7EE 146DA9C1 656F9674 B15B635F |...e..m.t.oe_c[.|&lt;br /&gt;&amp;lt; 0x000EE230: 20030002 FFF40003 FFFF0026 C4100402 |... ....&amp;amp;.......|&lt;br /&gt;&amp;lt; 0x000EE240: 00000000 000003EB 0000232C 1D049C28 |........,#..(...|&lt;br /&gt;&amp;lt; 0x000EE250: 65E2F7EE 146DA9C1 656F9674 B15B635F |...e..m.t.oe_c[.|&lt;br /&gt;&amp;lt; 0x000EE260: 20030002 FFF40003 FFFF0026 C4100402 |... ....&amp;amp;.......|&lt;br /&gt;&amp;lt; 0x000EE270: 00000000 000003EB 00002714 1D049C28 |.........&amp;#39;..(...|&lt;br /&gt;&amp;lt; 0x000EE280: 65E2F7EE 146DA9C1 656F9674 B15B635F |...e..m.t.oe_c[.|&lt;br /&gt;&amp;lt; 0x000EE290: 00000002 FFF40003 FFFF0026 C4100402 |........&amp;amp;.......|&lt;br /&gt;&amp;lt; 0x000EE2A0: 00000000 000003EB 00002AFC 1D049C28 |.........*..(...|&lt;br /&gt;&amp;lt; 0x000EE2B0: 65E2F7EE 146DA9C1 656F9674 B15B635F |...e..m.t.oe_c[.|&lt;br /&gt;&amp;lt; 0x000EE2C0: 20030002 FFF40003 FFFF0026 C4100402 |... ....&amp;amp;.......|&lt;br /&gt;&amp;lt; 0x000EE2D0: 00000000 000003EB 00002EE4 1D049C28 |............(...|&lt;br /&gt;&amp;lt; 0x000EE2E0: 65E2F7EE 146DA9C1 656F9674 B15B635F |...e..m.t.oe_c[.|&lt;br /&gt;&amp;lt; 0x000EE2F0: 00000002 FFF40003 FFFF0026 C4100402 |........&amp;amp;.......|&lt;br /&gt;&amp;lt; 0x000EE300: 00000000 000003EB 000032CC 1D049C28 |.........2..(...|&lt;br /&gt;&amp;lt; 0x000EE310: 65E2F7EE 146DA9C1 656F9674 B15B635F |...e..m.t.oe_c[.|&lt;br /&gt;&amp;lt; 0x000EE320: 20030002 FFF40003 FFFF0026 C4100402 |... ....&amp;amp;.......|&lt;br /&gt;&amp;lt; 0x000EE330: 00000000 000003EB 000036B4 1D049C28 |.........6..(...|&lt;br /&gt;&amp;lt; 0x000EE340: 65E2F7EE 146DA9C1 656F9674 B15B635F |...e..m.t.oe_c[.|&lt;br /&gt;&amp;lt; 0x000EE350: 19130002 FFF40003 FFFF0026 C4100402 |........&amp;amp;.......|&lt;br /&gt;&amp;lt; 0x000EE360: 00000000 000003EB 00003A9C 1D049C28 |.........:..(...|&lt;br /&gt;&amp;lt; 0x000EE370: 65E2F7EE 146DA9C1 656F9674 B15B635F |...e..m.t.oe_c[.|&lt;br /&gt;&amp;lt; 0x000EE380: 20030002 FFF40003 FFFF0026 C4100402 |... ....&amp;amp;.......|&lt;br /&gt;&amp;lt; 0x000EE390: 00000000 000003EB 00003E84 1D049C28 |.........&amp;gt;..(...|&lt;br /&gt;&amp;lt; 0x000EE3A0: 65E2F7EE 146DA9C1 656F9674 B15B635F |...e..m.t.oe_c[.|&lt;br /&gt;&amp;lt; 0x000EE3B0: 20030002 FFF40003 FFFF0026 C4100402 |... ....&amp;amp;.......|&lt;br /&gt;&amp;lt; 0x000EE3C0: 00000000 000003EB 0000426C 1D049C28 |........lB..(...|&lt;br /&gt;&amp;lt; 0x000EE3D0: 65E2F7EE 146DA9C1 656F9674 B15B635F |...e..m.t.oe_c[.|&lt;br /&gt;&amp;lt; 0x000EE3E0: 00000002 FFF40003 FFFF0026 C4100402 |........&amp;amp;.......|&lt;br /&gt;&amp;lt; 0x000EE3F0: 00000000 000003EB 00004654 1D049C28 |........TF..(...|&lt;br /&gt;&amp;lt; 0x000EE400: 65E2F7EE 146DA9C1 656F9674 B15B635F |...e..m.t.oe_c[.|&lt;br /&gt;&amp;lt; 0x000EE410: 20030002 FFF40003 FFFF0026 C4100402 |... ....&amp;amp;.......|&lt;br /&gt;&amp;lt; 0x000EE420: 00000000 000003EB 00004A3C 1D049C28 |........&amp;lt;J..(...|&lt;br /&gt;&amp;lt; 0x000EE430: 65E2F7EE 146DA9C1 656F9674 B15B635F |...e..m.t.oe_c[.|&lt;br /&gt;&amp;lt; 0x000EE440: 00000002 FFF40003 FFFF0026 C4100402 |........&amp;amp;.......|&lt;br /&gt;&amp;lt; 0x000EE450: 00000000 000003EB 00004E24 1D049C28 |........$N..(...|&lt;br /&gt;&amp;lt; 0x000EE460: 65E2F7EE 146DA9C1 656F9674 B15B635F |...e..m.t.oe_c[.|&lt;br /&gt;&amp;lt; 0x000EE470: 146D0002 FFF40003 FFFF0026 C4100402 |..m.....&amp;amp;.......|&lt;br /&gt;&amp;lt; 0x000EE480: 00000000 000003EB 0000520C 1D049C28 |.........R..(...|&lt;br /&gt;&amp;lt; 0x000EE490: 65E2F7EE 146DA9C1 656F9674 B15B635F |...e..m.t.oe_c[.|&lt;br /&gt;&amp;lt; 0x000EE4A0: 146D0002 FFF40003 FFFF0026 C4100402 |..m.....&amp;amp;.......|&lt;br /&gt;&amp;lt; 0x000EE4B0: 00000000 000003EB 000055F4 1D049C28 |.........U..(...|&lt;br /&gt;&amp;lt; 0x000EE4C0: 65E2F7EE 146DA9C1 656F9674 B15B635F |...e..m.t.oe_c[.|&lt;br /&gt;&amp;lt; 0x000EE4D0: 20030002 FFF40003 FFFF0026 C4100402 |... ....&amp;amp;.......|&lt;br /&gt;&amp;lt; 0x000EE4E0: 00000000 000007D4 000059DC 1D049C28 |.........Y..(...|&lt;br /&gt;&amp;lt; 0x000EE4F0: 65E2F7EE 146DA9C1 656F9674 B15B635F |...e..m.t.oe_c[.|&lt;br /&gt;&amp;lt; 0x000EE500: 00000002 FFF40003 FFFF0026 C4100402 |........&amp;amp;.......|&lt;br /&gt;&amp;lt; 0x000EE510: 00000000 000007D5 000059DF 1D049C28 |.........Y..(...|&lt;br /&gt;&amp;lt; 0x000EE520: 65E2F7EE 146DA9C1 656F9674 B15B635F |...e..m.t.oe_c[.|&lt;br /&gt;&amp;lt; 0x000EE530: 00000002 FFF40003 FFFF0026 C4100402 |........&amp;amp;.......|&lt;br /&gt;&amp;lt; 0x000EE540: 00000000 000007D7 00005DC7 1D049C28 |.........]..(...|&lt;br /&gt;&amp;lt; 0x000EE550: 65E2F7EE 146DA9C1 656F9674 B15B635F |...e..m.t.oe_c[.|&lt;br /&gt;&amp;lt; 0x000EE560: 146D0002 FFF40003 FFFF0026 C4100402 |..m.....&amp;amp;.......|&lt;br /&gt;&amp;lt; 0x000EE570: 00000000 000007D7 000061AF 1D049C28 |.........a..(...|&lt;br /&gt;&amp;lt; 0x000EE580: 65E2F7EE 146DA9C1 656F9674 B15B635F |...e..m.t.oe_c[.|&lt;br /&gt;&amp;lt; 0x000EE590: 146D0002 FFF40003 FFFF0026 C4100402 |..m.....&amp;amp;.......|&lt;br /&gt;&amp;lt; 0x000EE5A0: 00000000 000007D7 00006597 1D049C28 |.........e..(...|&lt;br /&gt;&amp;lt; 0x000EE5B0: 65E2F7EE 146DA9C1 656F9674 B15B635F |...e..m.t.oe_c[.|&lt;br /&gt;&amp;lt; 0x000EE5C0: 146D0002 FFF40003 FFFF0026 C4100402 |..m.....&amp;amp;.......|&lt;br /&gt;&amp;lt; 0x000EE5D0: 00000000 000007D7 0000697F 1D049C28 |.........i..(...|&lt;br /&gt;&amp;lt; 0x000EE5E0: 65E2F7EE 146DA9C1 656F9674 B15B635F |...e..m.t.oe_c[.|&lt;br /&gt;&amp;lt; 0x000EE5F0: 146D0002 FFF40003 FFFF0026 C4100402 |..m.....&amp;amp;.......|&lt;br /&gt;&amp;lt; 0x000EE600: 00000000 000007D7 00006D67 1D049C28 |........gm..(...|&lt;br /&gt;&amp;lt; 0x000EE610: 65E2F7EE 146DA9C1 656F9674 B15B635F |...e..m.t.oe_c[.|&lt;br /&gt;&amp;lt; 0x000EE620: 146D0002 FFFFFFFF FFFFFFFF FFFFFFFF |..m.............|&lt;br /&gt;---&lt;br /&gt;&amp;gt; 0x000EE090: FFFF0026 C4110402 00000000 000003EB |&amp;amp;...............|&lt;br /&gt;&amp;gt; 0x000EE0A0: 000003EC 1D049C28 6538672A C7766CA3 |....(...*g8e.lv.|&lt;br /&gt;&amp;gt; 0x000EE0B0: 3307B21B B45FB38F 0AB10002 FFF40007 |...3.._.........|&lt;br /&gt;&amp;gt; 0x000EE0C0: FFFF0020 F4338CEC 094B7121 1C369312 | .....3.!qK...6.|&lt;br /&gt;&amp;gt; 0x000EE0D0: 3218A5D4 A1FD3457 87E9CB2B 13F752D6 |...2W4..+....R..|&lt;br /&gt;&amp;gt; 0x000EE0E0: 17361FE3 FFF40003 FFFF0026 C4110402 |..6.....&amp;amp;.......|&lt;br /&gt;&amp;gt; 0x000EE0F0: 00000000 000007D4 000007D4 1D049C28 |............(...|&lt;br /&gt;&amp;gt; 0x000EE100: 6538672A C7766CA3 3307B21B B45FB38F |*g8e.lv....3.._.|&lt;br /&gt;&amp;gt; 0x000EE110: 00000002 FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE120: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE130: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE140: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE150: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE160: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE170: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE180: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE190: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE1A0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE1B0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE1C0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE1D0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE1E0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE1F0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE200: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE210: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE220: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE230: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE240: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE250: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE260: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE270: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE280: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE290: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE2A0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE2B0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE2C0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE2D0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE2E0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE2F0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE300: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE310: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE320: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE330: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE340: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE350: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE360: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE370: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE380: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE390: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE3A0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE3B0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE3C0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE3D0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE3E0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE3F0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE400: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE410: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE420: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE430: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE440: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE450: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE460: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE470: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE480: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE490: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE4A0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE4B0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE4C0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE4D0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE4E0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE4F0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE500: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE510: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE520: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE530: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE540: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE550: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE560: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE570: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE580: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE590: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE5A0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE5B0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE5C0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE5D0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE5E0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE5F0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE600: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE610: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;gt; 0x000EE620: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;65025c65025&lt;br /&gt;&amp;lt; 0x000FE000: CB0B2FB5 00000002 00000002 00000001 |./..............|&lt;br /&gt;---&lt;br /&gt;&amp;gt; 0x000FE000: 40FFE85D 00000002 00000001 00000001 |]..@............|&lt;br /&gt;65029,65062c65029,65062&lt;br /&gt;&amp;lt; 0x000FE040: 00000000 00000000 00066000 00000000 |.........`......|&lt;br /&gt;&amp;lt; 0x000FE050: 00000000 00000000 00000000 FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FE060: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FE070: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FE080: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FE090: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FE0A0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FE0B0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FE0C0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FE0D0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FE0E0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FE0F0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FE100: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FE110: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FE120: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FE130: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FE140: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FE150: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FE160: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FE170: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FE180: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FE190: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FE1A0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FE1B0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FE1C0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FE1D0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FE1E0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FE1F0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FE200: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FE210: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FE220: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FE230: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FE240: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FE250: FFFFFFFF FFFFFFFF FFFFFFFF F0678FEF |..............g.|&lt;br /&gt;---&lt;br /&gt;&amp;gt; 0x000FE040: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FE050: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FE060: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FE070: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FE080: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FE090: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FE0A0: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FE0B0: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FE0C0: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FE0D0: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FE0E0: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FE0F0: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FE100: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FE110: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FE120: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FE130: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FE140: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FE150: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FE160: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FE170: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FE180: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FE190: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FE1A0: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FE1B0: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FE1C0: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FE1D0: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FE1E0: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FE1F0: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FE200: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FE210: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FE220: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FE230: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FE240: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FE250: 00000000 00000000 00000000 CE832C27 |............&amp;#39;,..|&lt;br /&gt;65067c65067&lt;br /&gt;&amp;lt; 0x000FE2A0: 805A0100 00001EC7 00000000 00000000 |..Z.............|&lt;br /&gt;---&lt;br /&gt;&amp;gt; 0x000FE2A0: 60720100 0000CED2 00000000 00000000 |..r`............|&lt;br /&gt;65281c65281&lt;br /&gt;&amp;lt; 0x000FF000: CB0B2FB5 00000002 00000002 00000001 |./..............|&lt;br /&gt;---&lt;br /&gt;&amp;gt; 0x000FF000: 40FFE85D 00000002 00000001 00000001 |]..@............|&lt;br /&gt;65285,65318c65285,65318&lt;br /&gt;&amp;lt; 0x000FF040: 00000000 00000000 00066000 00000000 |.........`......|&lt;br /&gt;&amp;lt; 0x000FF050: 00000000 00000000 00000000 FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FF060: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FF070: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FF080: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FF090: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FF0A0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FF0B0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FF0C0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FF0D0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FF0E0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FF0F0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FF100: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FF110: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FF120: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FF130: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FF140: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FF150: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FF160: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FF170: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FF180: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FF190: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FF1A0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FF1B0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FF1C0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FF1D0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FF1E0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FF1F0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FF200: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FF210: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FF220: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FF230: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FF240: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF |................|&lt;br /&gt;&amp;lt; 0x000FF250: FFFFFFFF FFFFFFFF FFFFFFFF F0678FEF |..............g.|&lt;br /&gt;---&lt;br /&gt;&amp;gt; 0x000FF040: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FF050: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FF060: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FF070: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FF080: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FF090: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FF0A0: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FF0B0: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FF0C0: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FF0D0: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FF0E0: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FF0F0: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FF100: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FF110: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FF120: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FF130: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FF140: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FF150: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FF160: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FF170: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FF180: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FF190: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FF1A0: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FF1B0: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FF1C0: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FF1D0: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FF1E0: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FF1F0: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FF200: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FF210: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FF220: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FF230: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FF240: 00000000 00000000 00000000 00000000 |................|&lt;br /&gt;&amp;gt; 0x000FF250: 00000000 00000000 00000000 CE832C27 |............&amp;#39;,..|&lt;br /&gt;65323c65323&lt;br /&gt;&amp;lt; 0x000FF2A0: 805A0100 00001EC7 00000000 00000000 |..Z.............|&lt;br /&gt;---&lt;br /&gt;&amp;gt; 0x000FF2A0: 60720100 0000CED2 00000000 00000000 |..r`............|&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: OFF CHIP OTA UPDATE using external flash</title><link>https://devzone.nordicsemi.com/thread/459462?ContentTypeID=1</link><pubDate>Fri, 08 Dec 2023 05:47:40 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:4bfd5952-7e89-4489-b656-15ac3fa5245b</guid><dc:creator>Vidar Berg</dc:creator><description>[quote user="Priyesh Shahi"]&amp;lt; 0x00063C60: 20206365 30322037 31203332 39313A38 |ec 7 2023 18:19|&lt;br /&gt;&amp;lt; 0x00063C70: 0038323A 6F727245 6E692072 61687320 |:28.Error in sha|&lt;br /&gt;---&lt;br /&gt;&amp;gt; 0x00063C60: 20206365 30322037 31203332 33323A38 |ec 7 2023 18:23|&lt;br /&gt;&amp;gt; 0x00063C70: 0035353A 6F727245 6E692072 61687320 |:55.Error in sha|[/quote]
&lt;p&gt;I see there&amp;#39;s a timestamp here.&amp;nbsp;I guess it might be showing when the firmware was built? Regardless, you need to ensure you are programming the same hex file ever time. The DFU image must also be from the same build.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: OFF CHIP OTA UPDATE using external flash</title><link>https://devzone.nordicsemi.com/thread/459365?ContentTypeID=1</link><pubDate>Thu, 07 Dec 2023 13:00:37 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:7f37e31e-756d-40db-90c2-0e71dd63586d</guid><dc:creator>Priyesh Shahi</dc:creator><description>&lt;p&gt;I simply flashed the same application twice using j link(not dfu) by following all the steps .&lt;/p&gt;
&lt;p&gt;and still there is difference in both hex files.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt; dnk124 ~ nrfjprog --memrd 0x0 --n 1048576 &amp;gt; flash_on_board.hex&lt;br /&gt; dnk124 ~ nrfjprog --memrd 0x0 --n 1048576 &amp;gt; flash_on_board2.hex&lt;br /&gt; dnk124 ~ cmp flash_on_board.hex flash_on_board2.hex&lt;br /&gt;flash_on_board.hex flash_on_board2.hex differ: byte 1762439, line 25543&lt;br /&gt; dnk124 ~ 1 diff flash_on_board.hex flash_on_board2.hex&lt;br /&gt;25543,25544c25543,25544&lt;br /&gt;&amp;lt; 0x00063C60: 20206365 30322037 31203332 39313A38 |ec 7 2023 18:19|&lt;br /&gt;&amp;lt; 0x00063C70: 0038323A 6F727245 6E692072 61687320 |:28.Error in sha|&lt;br /&gt;---&lt;br /&gt;&amp;gt; 0x00063C60: 20206365 30322037 31203332 33323A38 |ec 7 2023 18:23|&lt;br /&gt;&amp;gt; 0x00063C70: 0035353A 6F727245 6E692072 61687320 |:55.Error in sha|&lt;br /&gt;60938,60943c60938,60943&lt;br /&gt;&amp;lt; 0x000EE090: FFFF0026 C4320402 00000000 000003EA |&amp;amp;.....2.........|&lt;br /&gt;&amp;lt; 0x000EE0A0: 000003EB 0504C84E 147D016A 2D24DB7D |....N...j.}.}.$-|&lt;br /&gt;&amp;lt; 0x000EE0B0: 7A2DC0CC DC4F0076 0AB10002 FFF40007 |..-zv.O.........|&lt;br /&gt;&amp;lt; 0x000EE0C0: FFFF0020 3D33E0D3 C5638CC0 E76FBB73 | .....3=..c.s.o.|&lt;br /&gt;&amp;lt; 0x000EE0D0: 8D48228A 5967488E D7E90C97 8F3891A9 |.&amp;quot;H..HgY......8.|&lt;br /&gt;&amp;lt; 0x000EE0E0: 3F784A25 FFFFFFFF FFFFFFFF FFFFFFFF |%Jx?............|&lt;br /&gt;---&lt;br /&gt;&amp;gt; 0x000EE090: FFFF0026 C4330402 00000000 000003EA |&amp;amp;.....3.........|&lt;br /&gt;&amp;gt; 0x000EE0A0: 000003EB 0504C84E E9DEB6BA AEDF0E4C |....N.......L...|&lt;br /&gt;&amp;gt; 0x000EE0B0: 8B4A8FCE 8EEED222 0AB10002 FFF40007 |..J.&amp;quot;...........|&lt;br /&gt;&amp;gt; 0x000EE0C0: FFFF0020 787E306D 482D2AD0 06EE9446 | ...m0~x.*-HF...|&lt;br /&gt;&amp;gt; 0x000EE0D0: 062B3A5A 0069BE23 1EA55933 1806B761 |Z:+.#.i.3Y..a...|&lt;br /&gt;&amp;gt; 0x000EE0E0: 56F8A127 FFFFFFFF FFFFFFFF FFFFFFFF |&amp;#39;..V............|&lt;br /&gt;65025,65026c65025,65026&lt;br /&gt;&amp;lt; 0x000FE000: 1341AA60 00000002 00000001 00000001 |`.A.............|&lt;br /&gt;&amp;lt; 0x000FE010: 00000000 00000000 00064F38 895C458F |........8O...E\.|&lt;br /&gt;---&lt;br /&gt;&amp;gt; 0x000FE000: AD7C8D5D 00000002 00000001 00000001 |].|.............|&lt;br /&gt;&amp;gt; 0x000FE010: 00000000 00000000 00064F38 C9CBBF5C |........8O..\...|&lt;br /&gt;65062c65062&lt;br /&gt;&amp;lt; 0x000FE250: 00000000 00000000 00000000 37CD1E9A |...............7|&lt;br /&gt;---&lt;br /&gt;&amp;gt; 0x000FE250: 00000000 00000000 00000000 151DE479 |............y...|&lt;br /&gt;65067c65067&lt;br /&gt;&amp;lt; 0x000FE2A0: 458F0100 0000895C 00000000 00000000 |...E\...........|&lt;br /&gt;---&lt;br /&gt;&amp;gt; 0x000FE2A0: BF5C0100 0000C9CB 00000000 00000000 |..\.............|&lt;br /&gt;65281,65282c65281,65282&lt;br /&gt;&amp;lt; 0x000FF000: 1341AA60 00000002 00000001 00000001 |`.A.............|&lt;br /&gt;&amp;lt; 0x000FF010: 00000000 00000000 00064F38 895C458F |........8O...E\.|&lt;br /&gt;---&lt;br /&gt;&amp;gt; 0x000FF000: AD7C8D5D 00000002 00000001 00000001 |].|.............|&lt;br /&gt;&amp;gt; 0x000FF010: 00000000 00000000 00064F38 C9CBBF5C |........8O..\...|&lt;br /&gt;65318c65318&lt;br /&gt;&amp;lt; 0x000FF250: 00000000 00000000 00000000 37CD1E9A |...............7|&lt;br /&gt;---&lt;br /&gt;&amp;gt; 0x000FF250: 00000000 00000000 00000000 151DE479 |............y...|&lt;br /&gt;65323c65323&lt;br /&gt;&amp;lt; 0x000FF2A0: 458F0100 0000895C 00000000 00000000 |...E\...........|&lt;br /&gt;---&lt;br /&gt;&amp;gt; 0x000FF2A0: BF5C0100 0000C9CB 00000000 00000000 |..\.............|&lt;br /&gt; dnk124 ~ 1&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: OFF CHIP OTA UPDATE using external flash</title><link>https://devzone.nordicsemi.com/thread/459209?ContentTypeID=1</link><pubDate>Wed, 06 Dec 2023 14:29:27 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:a624ab0e-5a2c-45e6-a22a-a2429ba25741</guid><dc:creator>Vidar Berg</dc:creator><description>&lt;p&gt;I would still like you to verify that the updated binary stored in the bank 0 matches the binary you uploaded through DFU. Since you are not able to read data from your external flash, you can program the hex file of your new application to the device, then read out the memory. Then, repeat the same steps but when loading the image through DFU and not via the debug interface.&lt;/p&gt;
&lt;p&gt;If the images are identical, then that suggests that the CRC computed by the application and the one computed by the bootloader were not computed over the same area.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: OFF CHIP OTA UPDATE using external flash</title><link>https://devzone.nordicsemi.com/thread/459185?ContentTypeID=1</link><pubDate>Wed, 06 Dec 2023 13:06:57 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:a270cf4d-0401-4004-b1ce-3fe571205cb8</guid><dc:creator>Priyesh Shahi</dc:creator><description>&lt;p&gt;hey I tried all possible commands to read external qspi flash, but as I am using custom board none of them worked.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;so i tried another way. even though crc calculation fails, i jumped to start the app directly buy changing the code in&amp;nbsp;nrf_bootloader_init() function and my dfu is complete after this.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;return NRF_ERROR_INTERNAL; // Should not reach this.&lt;/p&gt;
&lt;p&gt;case ACTIVATION_ERROR:&lt;br /&gt; default:&lt;br /&gt; return NRF_ERROR_INTERNAL;&lt;br /&gt; }&lt;/p&gt;
&lt;p&gt;if (dfu_enter)&lt;br /&gt; {&lt;br /&gt; nrf_bootloader_app_start();&lt;br /&gt; nrf_bootloader_wdt_init();&lt;br /&gt; scheduler_init();&lt;br /&gt; dfu_enter_flags_clear();&lt;/p&gt;
&lt;p&gt;// Call user-defined init function if implemented&lt;br /&gt; ret_val = nrf_dfu_init_user();&lt;br /&gt; if (ret_val != NRF_SUCCESS)&lt;br /&gt; {&lt;br /&gt; return NRF_ERROR_INTERNAL;&lt;br /&gt; }&lt;/p&gt;
&lt;p&gt;nrf_bootloader_dfu_inactivity_timer_restart(initial_timeout, inactivity_timeout);&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;in above juggad code&amp;nbsp;&lt;span&gt;nrf_bootloader_app_start(); function is used to start the app code. and it works and my app version 2 is working perfectlly.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;my device sends&amp;nbsp;&lt;/span&gt;Payloads on server and on the server i can see the update and ota version as well.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;in this payload you can see at the last 2 is wrrten which represents the app version.&lt;img style="height:134px;max-height:134px;max-width:536px;" alt=" " height="134" src="https://devzone.nordicsemi.com/resized-image/__size/1072x268/__key/communityserver-discussions-components-files/4/Screenshot_5F00_2023_2D00_12_2D00_06_5F00_18_2D00_23_2D00_05.png" width="535" /&gt;&lt;/p&gt;
&lt;p&gt;and in another payload ota done message is visible.&lt;img style="height:130px;max-height:130px;max-width:529px;" alt=" " height="154" src="https://devzone.nordicsemi.com/resized-image/__size/1058x260/__key/communityserver-discussions-components-files/4/Screenshot_5F00_2023_2D00_12_2D00_06_5F00_18_2D00_23_2D00_23.png" width="528" /&gt;&lt;/p&gt;
&lt;p&gt;and also in j link it is visible&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img style="height:317px;max-height:317px;max-width:579px;" alt=" " height="284" src="https://devzone.nordicsemi.com/resized-image/__size/1158x634/__key/communityserver-discussions-components-files/4/Screenshot_5F00_2023_2D00_12_2D00_06_5F00_18_2D00_35_2D00_05.png" width="578" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;even this ota is done but still why that crc calculation fails? and if let this run then without crc verification this ota process is just like the single bank dfu process.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;so please help me in this crc calculation&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: OFF CHIP OTA UPDATE using external flash</title><link>https://devzone.nordicsemi.com/thread/458474?ContentTypeID=1</link><pubDate>Fri, 01 Dec 2023 10:14:29 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:a29f5af7-f6fe-40a5-a1c1-3e8230009fb8</guid><dc:creator>Vidar Berg</dc:creator><description>&lt;p&gt;You can use regex or a text processing tool like &amp;#39;awk&amp;#39; to filter out the address column from the output.&lt;/p&gt;
&lt;p&gt;Example of using regex in Vs code:&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:240px;max-width:320px;" src="https://devzone.nordicsemi.com/resized-image/__size/640x480/__key/communityserver-discussions-components-files/4/pastedimage1701425644939v1.png" alt=" " /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: OFF CHIP OTA UPDATE using external flash</title><link>https://devzone.nordicsemi.com/thread/458451?ContentTypeID=1</link><pubDate>Fri, 01 Dec 2023 08:06:53 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:cd49ebb3-3e95-445c-8452-e9d12df00c47</guid><dc:creator>Priyesh Shahi</dc:creator><description>&lt;p&gt;To read from the external flash, a specific command is required by the nrfprog tool. Unfortunately, while retrieving data from the external flash, this command appends the address to each line, thereby impeding the direct comparison between the data retrieved from the internal and external flash sources.&lt;/p&gt;
&lt;p&gt;Furthermore, regarding the progress of the DFU process, I&amp;#39;d like to inform you that we have reached the final stages:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The application has been successfully downloaded to the external flash.&lt;/li&gt;
&lt;li&gt;Hash verification has been completed without any issues.&lt;/li&gt;
&lt;li&gt;DFU bank 1 has been appropriately configured.&lt;/li&gt;
&lt;li&gt;The bootloader has been reset as per the protocol.&lt;/li&gt;
&lt;li&gt;The bootloader is effectively replacing the entire code from the external flash to the internal flash.&lt;/li&gt;
&lt;li&gt;Upon replacement, a CRC computation over the image in the internal flash is conducted. However, this step encounters failure, and despite diligent efforts, the root cause behind this failure remains elusive.&lt;/li&gt;
&lt;/ol&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: OFF CHIP OTA UPDATE using external flash</title><link>https://devzone.nordicsemi.com/thread/457913?ContentTypeID=1</link><pubDate>Tue, 28 Nov 2023 14:53:58 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:27c7554c-9514-49a7-a1aa-4b90313c0a0c</guid><dc:creator>Vidar Berg</dc:creator><description>&lt;p&gt;It looks like you are using the QSPI flash API correctly. Could you please read out the image stored in the QSPI flash and compare it to the image stored in Bank 1 to see if they match?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: OFF CHIP OTA UPDATE using external flash</title><link>https://devzone.nordicsemi.com/thread/457727?ContentTypeID=1</link><pubDate>Tue, 28 Nov 2023 04:13:23 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:dde4b1d1-869b-4dab-94a7-b0d742a2081c</guid><dc:creator>Priyesh Shahi</dc:creator><description>[quote userid="129185" url="~/f/nordic-q-a/105096/off-chip-ota-update-using-external-flash/457265"]i have changed the image_copy function and in logs i can see it is working and writes my image completely[/quote]
&lt;p&gt;after this i have shared a code snippet of image_copy() inside that i have changed this&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;// Flash one page&lt;/p&gt;
&lt;p&gt;uint32_t m_buffer_rx[bytes];&lt;/p&gt;
&lt;p&gt;if(nrf_drv_qspi_read(m_buffer_rx, bytes,firmware_flash_addr ) != NRFX_SUCCESS)&lt;br /&gt; {&lt;br /&gt; NRF_LOG_INFO(&amp;quot;Failed read application for bootloader reset in Ext Flash.\r\n&amp;quot;);&lt;br /&gt; }&lt;br /&gt; else&lt;br /&gt; {&lt;br /&gt; NRF_LOG_INFO(&amp;quot;Succsessfully read application for bootloader reset from: 0x%lX\r\n&amp;quot;,firmware_flash_addr);&lt;br /&gt; WAIT_FOR_PERIPH();&lt;br /&gt; NRF_LOG_DEBUG(&amp;quot;Copying 0x%x to 0x%x, size: 0x%x&amp;quot;, src_addr, dst_addr, bytes);&lt;br /&gt; ret_val = nrf_dfu_flash_store(dst_addr,&lt;br /&gt; (uint32_t *)m_buffer_rx,&lt;br /&gt; ALIGN_NUM(sizeof(uint32_t), bytes),&lt;br /&gt; NULL);&lt;br /&gt; }&lt;/p&gt;
&lt;p&gt;and code which was earlier copying the image is here:&lt;/p&gt;
&lt;p&gt;&lt;br /&gt; //NRF_LOG_DEBUG(&amp;quot;Copying 0x%x to 0x%x, size: 0x%x&amp;quot;, src_addr, dst_addr, bytes);&lt;br /&gt; //ret_val = nrf_dfu_flash_store(dst_addr,&lt;br /&gt; // (uint32_t *)src_addr,&lt;br /&gt; // ALIGN_NUM(sizeof(uint32_t), bytes),&lt;br /&gt; // NULL);&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: OFF CHIP OTA UPDATE using external flash</title><link>https://devzone.nordicsemi.com/thread/457563?ContentTypeID=1</link><pubDate>Mon, 27 Nov 2023 12:55:30 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:42b0bade-2be1-4a3f-bc8c-018486ff0d96</guid><dc:creator>Vidar Berg</dc:creator><description>&lt;p&gt;Yes, but you are not showing how you adapted the copy function to read the image from external flash.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: OFF CHIP OTA UPDATE using external flash</title><link>https://devzone.nordicsemi.com/thread/457561?ContentTypeID=1</link><pubDate>Mon, 27 Nov 2023 12:54:37 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:64701281-aaa9-496b-8e10-70359b45c757</guid><dc:creator>Priyesh Shahi</dc:creator><description>&lt;p&gt;Bank 1 is the temporary address where the app was initially supposed to be downloaded, but I changed it to external flash.&lt;/p&gt;
&lt;p&gt;Bank 0 is the address in the internal flash where the app runs after the download completes. In the bootloader, we erase the old image from bank 0 and replace it with bank 1 (in this case, external flash) after performing a CRC check.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: OFF CHIP OTA UPDATE using external flash</title><link>https://devzone.nordicsemi.com/thread/457555?ContentTypeID=1</link><pubDate>Mon, 27 Nov 2023 12:40:14 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:61014278-da66-4305-bf00-b22ca6f17973</guid><dc:creator>Vidar Berg</dc:creator><description>&lt;p&gt;Are you copying the image from bank 1 in external flash? I can&amp;#39;t tell from your code snippet where the image is copied from.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: OFF CHIP OTA UPDATE using external flash</title><link>https://devzone.nordicsemi.com/thread/457265?ContentTypeID=1</link><pubDate>Fri, 24 Nov 2023 07:53:14 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:9f17544c-6f9a-436b-ba19-7a29d2dba2f6</guid><dc:creator>Priyesh Shahi</dc:creator><description>&lt;p&gt;Hi&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I have solved the above problems. from last conversation to till today&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1: now both size matches&amp;nbsp;&lt;/p&gt;
&lt;p&gt;2: download is complete.&lt;/p&gt;
&lt;p&gt;3: Hash verification and crc is completed and it working fine&lt;/p&gt;
&lt;p&gt;4:&amp;nbsp;i have started log in bootloader&amp;nbsp; so now i am able to see the problem of bootloader reset.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;i have changed the image_copy function and in logs i can see it is working and writes my image completely .&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;static uint32_t image_copy(uint32_t dst_addr,
                           uint32_t src_addr,
                           uint32_t size,
                           uint32_t progress_update_step)
{
    if (src_addr == dst_addr)
    {
        NRF_LOG_DEBUG(&amp;quot;No copy needed&amp;quot;);
        return NRF_SUCCESS;
    }

    ASSERT(src_addr &amp;gt;= dst_addr);
    ASSERT(progress_update_step &amp;gt; 0);
    ASSERT((dst_addr % CODE_PAGE_SIZE) == 0);

    uint32_t max_safe_progress_upd_step = (src_addr - dst_addr)/CODE_PAGE_SIZE;
    ASSERT(max_safe_progress_upd_step &amp;gt; 0);

    uint32_t ret_val = NRF_SUCCESS;
    uint32_t pages_left = CEIL_DIV(size, CODE_PAGE_SIZE);

    //Firmware copying is time consuming operation thus watchdog handling is started
    nrf_bootloader_wdt_init();

    progress_update_step = MIN(progress_update_step, max_safe_progress_upd_step);

    while (size &amp;gt; 0)
    {
        uint32_t pages;
        uint32_t bytes;
        if (pages_left &amp;lt;= progress_update_step)
        {
            pages = pages_left;
            bytes = size;
        }
        else
        {
            pages = progress_update_step;
            bytes = progress_update_step * CODE_PAGE_SIZE;
        }
        // Erase the target pages
        ret_val = nrf_dfu_flash_erase(dst_addr, pages, NULL);
        if (ret_val != NRF_SUCCESS)
        {
            return ret_val;
        }

        // Flash one page

        uint32_t m_buffer_rx[bytes];

        if(nrf_drv_qspi_read(m_buffer_rx, bytes,firmware_flash_addr ) != NRFX_SUCCESS)
        {
          NRF_LOG_INFO(&amp;quot;Failed read application for bootloader reset in Ext Flash.\r\n&amp;quot;);
        }
        else
        {
          NRF_LOG_INFO(&amp;quot;Succsessfully read application for bootloader reset from: 0x%lX\r\n&amp;quot;,firmware_flash_addr);
          WAIT_FOR_PERIPH();
          NRF_LOG_DEBUG(&amp;quot;Copying 0x%x to 0x%x, size: 0x%x&amp;quot;, src_addr, dst_addr, bytes);
          ret_val = nrf_dfu_flash_store(dst_addr,
                                      (uint32_t *)m_buffer_rx,
                                      ALIGN_NUM(sizeof(uint32_t), bytes),
                                      NULL);
        }
        //NRF_LOG_DEBUG(&amp;quot;Copying 0x%x to 0x%x, size: 0x%x&amp;quot;, src_addr, dst_addr, bytes);
        //ret_val = nrf_dfu_flash_store(dst_addr,
        //                              (uint32_t *)src_addr,
        //                              ALIGN_NUM(sizeof(uint32_t), bytes),
        //                              NULL);


        if (ret_val != NRF_SUCCESS)
        {
            return ret_val;
        }
        else
        {
          NRF_LOG_INFO(&amp;quot;flash store successfull...\r\n&amp;quot;);
        }

        pages_left  -= pages;
        size        -= bytes;
        dst_addr    += bytes;
        src_addr    += bytes;
        s_dfu_settings.write_offset += bytes;
        firmware_flash_addr += bytes; 

        //store progress in flash on every successful chunk write
        ret_val = nrf_dfu_settings_write_and_backup(NULL);
        if (ret_val != NRF_SUCCESS)
        {
            NRF_LOG_ERROR(&amp;quot;Failed to write image copying progress to settings page.&amp;quot;);
            return ret_val;
        }
    }

    return ret_val;
}&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;here is the log of that&amp;nbsp;&lt;br /&gt;&lt;img style="height:286px;max-height:286px;max-width:561px;" alt=" " height="204" src="https://devzone.nordicsemi.com/resized-image/__size/1122x572/__key/communityserver-discussions-components-files/4/Screenshot_5F00_2023_2D00_11_2D00_24_5F00_13_2D00_11_2D00_35.png_2D00_1250x638.png" width="560" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;but after this in app_activate() function there is crc calculation on bank 0 and&amp;nbsp; crc calculation fails and there is an error.&lt;/p&gt;
&lt;p&gt;the code of &lt;span&gt;app_activate() function&lt;pre class="ui-code" data-mode="c_cpp"&gt;static uint32_t app_activate(void)
{
    // This function is only in use when new app is present in Bank 1
    uint32_t const image_size  = s_dfu_settings.bank_1.image_size;

    uint32_t src_addr    = s_dfu_settings.progress.update_start_address;
    uint32_t ret_val     = NRF_SUCCESS;
    uint32_t target_addr = nrf_dfu_bank0_start_addr() + s_dfu_settings.write_offset;
    uint32_t length_left = (image_size - s_dfu_settings.write_offset);
    uint32_t crc;

    NRF_LOG_DEBUG(&amp;quot;Enter nrf_dfu_app_continue&amp;quot;);

    src_addr += s_dfu_settings.write_offset;

    if (src_addr == target_addr)
    {
        length_left = 0;
    }

    ret_val = image_copy(target_addr, src_addr, length_left, NRF_BL_FW_COPY_PROGRESS_STORE_STEP);
    if (ret_val != NRF_SUCCESS)
    {
        NRF_LOG_ERROR(&amp;quot;Failed to copy firmware.&amp;quot;);
        return ret_val;
    }

    // Check the CRC of the copied data. Enable if so.
    crc = crc32_compute((uint8_t*)nrf_dfu_bank0_start_addr(), image_size, NULL);

    if (crc == s_dfu_settings.bank_1.image_crc)
    {
        NRF_LOG_DEBUG(&amp;quot;Setting app as valid&amp;quot;);
        s_dfu_settings.bank_0.bank_code = NRF_DFU_BANK_VALID_APP;
        s_dfu_settings.bank_0.image_crc = crc;
        s_dfu_settings.bank_0.image_size = image_size;
    }
    else
    {
        NRF_LOG_ERROR(&amp;quot;CRC computation failed for copied app: &amp;quot;
                      &amp;quot;src crc: 0x%08x, res crc: 0x%08x&amp;quot;,
                      s_dfu_settings.bank_1.image_crc,
                      crc);
    }

    return ret_val;
}
&lt;/pre&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="height:30px;max-height:30px;max-width:564px;" alt=" " height="29" src="https://devzone.nordicsemi.com/resized-image/__size/1128x60/__key/communityserver-discussions-components-files/4/Screenshot_5F00_2023_2D00_11_2D00_24_5F00_11_2D00_26_2D00_30.png" width="563" /&gt;&lt;/p&gt;
&lt;p&gt;i want to know why this crc calculation fails because before bootloader reset same crc calculation is correct.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;here is more log which is from bootloader&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;0&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; app: Copying 0xBE000 to 0x59000, size: 0x8000
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_flash: nrf_fstorage_write(addr=0x00059000, src=0x2001FED8, len=32768 bytes), queue usage: 1
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_flash: Flash write success: addr=0x00059000, pending 0
00&amp;gt; 
00&amp;gt; &amp;lt;info&amp;gt; app: flash store successfull...
00&amp;gt; 
00&amp;gt; 
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_settings: Writing settings...
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_settings: Erasing old settings at: 0x000FF000
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_flash: nrf_fstorage_erase(addr=0x0x000FF000, len=1 pages), queue usage: 1
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_flash: Flash erase success: addr=0x000FF000, pending 0
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_flash: nrf_fstorage_write(addr=0x000FF000, src=0x200012EC, len=896 bytes), queue usage: 1
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_flash: Flash write success: addr=0x000FF000, pending 0
00&amp;gt; 
00&amp;gt; &amp;lt;info&amp;gt; nrf_dfu_settings: Backing up settings page to address 0xFE000.
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_settings: Writing settings...
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_settings: Erasing old settings at: 0x000FE000
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_flash: nrf_fstorage_erase(addr=0x0x000FE000, len=1 pages), queue usage: 1
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_flash: Flash erase success: addr=0x000FE000, pending 0
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_flash: nrf_fstorage_write(addr=0x000FE000, src=0x20000F68, len=896 bytes), queue usage: 1
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_flash: Flash write success: addr=0x000FE000, pending 0
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_flash: nrf_fstorage_erase(addr=0x0x00061000, len=5 pages), queue usage: 1
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_flash: Flash erase success: addr=0x00061000, pending 0
00&amp;gt; 
00&amp;gt; &amp;lt;info&amp;gt; app: Succsessfully read application for bootloader reset from: 0x160000
00&amp;gt; 
00&amp;gt; 
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; app: Copying 0xC6000 to 0x61000, size: 0x4F30
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_flash: nrf_fstorage_write(addr=0x00061000, src=0x2002C218, len=20272 bytes), queue usage: 1
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_flash: Flash write success: addr=0x00061000, pending 0
00&amp;gt; 
00&amp;gt; &amp;lt;info&amp;gt; app: flash store successfull...
00&amp;gt; 
00&amp;gt; 
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_settings: Writing settings...
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_settings: Erasing old settings at: 0x000FF000
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_flash: nrf_fstorage_erase(addr=0x0x000FF000, len=1 pages), queue usage: 1
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_flash: Flash erase success: addr=0x000FF000, pending 0
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_flash: nrf_fstorage_write(addr=0x000FF000, src=0x200012EC, len=896 bytes), queue usage: 1
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_flash: Flash write success: addr=0x000FF000, pending 0
00&amp;gt; 
00&amp;gt; &amp;lt;info&amp;gt; nrf_dfu_settings: Backing up settings page to address 0xFE000.
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_settings: Writing settings...
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_settings: Erasing old settings at: 0x000FE000
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_flash: nrf_fstorage_erase(addr=0x0x000FE000, len=1 pages), queue usage: 1
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_flash: Flash erase success: addr=0x000FE000, pending 0
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_flash: nrf_fstorage_write(addr=0x000FE000, src=0x20000F68, len=896 bytes), queue usage: 1
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_flash: Flash write success: addr=0x000FE000, pending 0
00&amp;gt; 
00&amp;gt; &amp;lt;error&amp;gt; app: CRC computation failed for copied app: src crc: 0xBF28E606, res crc: 0x5B2DA0B8
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_settings: Writing settings...
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_settings: Erasing old settings at: 0x000FF000
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_flash: nrf_fstorage_erase(addr=0x0x000FF000, len=1 pages), queue usage: 1
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_flash: Flash erase success: addr=0x000FF000, pending 0
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_flash: nrf_fstorage_write(addr=0x000FF000, src=0x200012EC, len=896 bytes), queue usage: 1
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_flash: Flash write success: addr=0x000FF000, pending 0
00&amp;gt; 
00&amp;gt; &amp;lt;info&amp;gt; nrf_dfu_settings: Backing up settings page to address 0xFE000.
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_settings: Writing settings...
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_settings: Erasing old settings at: 0x000FE000
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_flash: nrf_fstorage_erase(addr=0x0x000FE000, len=1 pages), queue usage: 1
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_flash: Flash erase success: addr=0x000FE000, pending 0
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_flash: nrf_fstorage_write(addr=0x000FE000, src=0x20000F68, len=896 bytes), queue usage: 1
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_flash: Flash write success: addr=0x000FE000, pending 0
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; app: Resetting bootloader.
00&amp;gt; 
00&amp;gt; &amp;lt;info&amp;gt; nrf_dfu_settings: B&amp;lt;info&amp;gt; app: Inside main
00&amp;gt; 
00&amp;gt; 
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; app: In nrf_bootloader_init
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_settings: Calling nrf_dfu_settings_init()...
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_flash: Initializing nrf_fstorage_nvmc backend.
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_settings: Using settings page.
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_settings: Copying forbidden parts from backup page.
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_settings: Destination settings are identical to source, write not needed. Skipping.
00&amp;gt; 
00&amp;gt; &amp;lt;info&amp;gt; nrf_dfu_settings: Backing up settings page to address 0xFE000.
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_settings: Destination settings are identical to source, write not needed. Skipping.
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; app: Enter nrf_bootloader_fw_activate
00&amp;gt; 
00&amp;gt; &amp;lt;info&amp;gt; app: No firmware to activate.
00&amp;gt; 
00&amp;gt;  feeding watchdog.
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; app: timer_activate (0x20000018)
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; app: in weak nrf_dfu_init_user
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; app: timer_stop (0x20000008)
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; app: timer_activate (0x20000008)
00&amp;gt; 
00&amp;gt; &amp;lt;info&amp;gt; app: Entering DFU mode.
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; app: Initializing transports (found: 0)
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; nrf_dfu_flash: Initializing nrf_fstorage_nvmc backend.
00&amp;gt; 
00&amp;gt; &amp;lt;debug&amp;gt; app: Enter main loop
00&amp;gt; &lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: OFF CHIP OTA UPDATE using external flash</title><link>https://devzone.nordicsemi.com/thread/454894?ContentTypeID=1</link><pubDate>Thu, 09 Nov 2023 12:05:22 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:53e46e70-6c1f-40d2-8495-cf6c8b6caad5</guid><dc:creator>Vidar Berg</dc:creator><description>&lt;p&gt;I&amp;nbsp;thought the issue had been resolved since the last log you posted&amp;nbsp;showed&amp;nbsp;that both the transfer and post-validation were successful.&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:240px;max-width:320px;" src="https://devzone.nordicsemi.com/resized-image/__size/640x480/__key/communityserver-discussions-components-files/4/pastedimage1699531389070v1.png" alt=" " /&gt;&lt;/p&gt;
[quote user="Priyesh Shahi"]download to external flash is not getting completed and there are two types of error during download . either Object size must be page aligned or &amp;quot;Creating the object with size 0x%08x would overflow firmware size.\r\n&amp;quot;&lt;br /&gt; &amp;quot;Offset is 0x%08x and firmware size is 0x%08x.&amp;quot;[/quote]
&lt;p&gt;My suggestion then is that you retrace the changes you&amp;#39;ve made to pinpoint what caused this problem. I assume you don&amp;#39;t encounter this issue when you run the unmodified SDK application, correct?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>