<?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>debug bootloader for thread examples</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/43978/debug-bootloader-for-thread-examples</link><description>Hi, 
 I wonder if there exists a debug bootloader for thread examples. There is a bootloader in the secure DFU example, but it is not for debugging. &amp;quot;examples/thread/dfu/bootloader&amp;quot; . I appreciate if you can point me to the right direction. 
 Best regards</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Tue, 19 Mar 2019 12:58:09 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/43978/debug-bootloader-for-thread-examples" /><item><title>RE: debug bootloader for thread examples</title><link>https://devzone.nordicsemi.com/thread/177014?ContentTypeID=1</link><pubDate>Tue, 19 Mar 2019 12:58:09 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:156035a5-9032-4184-856e-399f0765252d</guid><dc:creator>ozanoner</dc:creator><description>&lt;p&gt;it works! Thanks Edvin.&lt;/p&gt;
&lt;p&gt;Best wishes,&lt;/p&gt;
&lt;p&gt;Vedat&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: debug bootloader for thread examples</title><link>https://devzone.nordicsemi.com/thread/176908?ContentTypeID=1</link><pubDate>Tue, 19 Mar 2019 09:16:21 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:1f2265c5-54e3-4a58-b039-88a44dd35922</guid><dc:creator>ozanoner</dc:creator><description>&lt;p&gt;Thank you, Edvin! I will try your suggestions.&lt;/p&gt;
&lt;p&gt;Best wishes,&lt;/p&gt;
&lt;p&gt;Vedat&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: debug bootloader for thread examples</title><link>https://devzone.nordicsemi.com/thread/176888?ContentTypeID=1</link><pubDate>Tue, 19 Mar 2019 08:42:59 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:09bbaf74-7597-4247-b765-4265cba708cc</guid><dc:creator>Edvin</dc:creator><description>&lt;p&gt;I am not sure what that needs to be changed in the flash placement file. I don&amp;#39;t think you need to change anything in this file, to be honest. What you should do is to change your&amp;nbsp;nrf_bootloader_init() to something like this:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;ret_code_t nrf_bootloader_init(nrf_dfu_observer_t observer)
{
    NRF_LOG_DEBUG(&amp;quot;In nrf_bootloader_init&amp;quot;);

    ret_code_t                            ret_val;
    nrf_bootloader_fw_activation_result_t activation_result;
    uint32_t                              initial_timeout;
    bool                                  dfu_enter = false;

    m_user_observer = observer;

    if (NRF_BL_DFU_ENTER_METHOD_BUTTON)
    {
        dfu_enter_button_init();
    }

    ret_val = nrf_dfu_settings_init(false);
    if (ret_val != NRF_SUCCESS)
    {
        return NRF_ERROR_INTERNAL;
    }

    // Check if an update needs to be activated and activate it.
    activation_result = nrf_bootloader_fw_activate();

    switch (activation_result)
    {
        case ACTIVATION_NONE:
            initial_timeout = NRF_BOOTLOADER_MS_TO_TICKS(NRF_BL_DFU_INACTIVITY_TIMEOUT_MS);
            dfu_enter       = dfu_enter_check();
            break;

        case ACTIVATION_SUCCESS_EXPECT_ADDITIONAL_UPDATE:
            initial_timeout = NRF_BOOTLOADER_MS_TO_TICKS(NRF_BL_DFU_CONTINUATION_TIMEOUT_MS);
            dfu_enter       = true;
            break;

        case ACTIVATION_SUCCESS:
            bootloader_reset();
            NRF_LOG_ERROR(&amp;quot;Should never come here: After bootloader_reset()&amp;quot;);
            return NRF_ERROR_INTERNAL; // Should not reach this.

        case ACTIVATION_ERROR:
        default:
            return NRF_ERROR_INTERNAL;
    }

    //if (dfu_enter)
    if (false)               //This will always start application, regardless of the state of dfu_enter.
    {
        nrf_bootloader_wdt_init();

        scheduler_init();

        // Clear all DFU stop flags.
        dfu_enter_flags_clear();

        // Call user-defined init function if implemented
        ret_val = nrf_dfu_init_user();
        if (ret_val != NRF_SUCCESS)
        {
            return NRF_ERROR_INTERNAL;
        }

        nrf_bootloader_dfu_inactivity_timer_restart(initial_timeout, inactivity_timeout);

        ret_val = nrf_dfu_init(dfu_observer);
        if (ret_val != NRF_SUCCESS)
        {
            return NRF_ERROR_INTERNAL;
        }

        NRF_LOG_DEBUG(&amp;quot;Enter main loop&amp;quot;);
        loop_forever(); // This function will never return.
        NRF_LOG_ERROR(&amp;quot;Should never come here: After looping forever.&amp;quot;);
    }
    else
    {
        // Erase additional data like peer data or advertisement name
        ret_val = nrf_dfu_settings_additional_erase();
        if (ret_val != NRF_SUCCESS)
        {
            return NRF_ERROR_INTERNAL;
        }

        m_flash_write_done = false;
        nrf_dfu_settings_backup(flash_write_callback);
        ASSERT(m_flash_write_done);

        nrf_bootloader_app_start();
        NRF_LOG_ERROR(&amp;quot;Should never come here: After nrf_bootloader_app_start()&amp;quot;);
    }

    // Should not be reached.
    return NRF_ERROR_INTERNAL;
}&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;You can see that I changed the &amp;quot;if (dfu_enter)&amp;quot; to &amp;quot;if (false)&amp;quot;.&lt;/p&gt;
&lt;p&gt;Note that with this very simple approach, it will never enter bootloader mode, but always start the application.&lt;/p&gt;
&lt;p&gt;If you want to filter on your own premises, e.g. work as a normal bootloader, but not check the CRC, you need to study the bootloader project found in examples\thread\dfu\bootloader.&lt;/p&gt;
&lt;p&gt;Inside the nrf_bootloader_init() there is a state machine:&lt;/p&gt;
&lt;p&gt;nrf_bootloader_fw_activate checks whether it has received any new application that it needs to move around. If not, it will return ACTIVATION_NONE. In this case, it will check&amp;nbsp;dfu_enter_check(). If you want to disable the CRC here, just comment out the first check inside. nrf_dfu_app_is_valid(). If you skip this check, you should be able to debug your application, because the bootloader skips the CRC check. However, the rest of the bootloader and DFU procedure requires the keys as normal.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Edvin&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: debug bootloader for thread examples</title><link>https://devzone.nordicsemi.com/thread/176807?ContentTypeID=1</link><pubDate>Mon, 18 Mar 2019 17:07:49 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:9274eb21-2e82-4257-a43f-846874a4f68e</guid><dc:creator>ozanoner</dc:creator><description>&lt;p&gt;Hi Edvin,&lt;/p&gt;
&lt;p&gt;I made some tests, but no success with bootloader in debug mode. Anyways, I continue to work on DFU. The thing is that DFU update library gives fatal error and resets the device. I appreciate if you can check the following log:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;&amp;lt;info&amp;gt; COAP_DFU: DFU trigger request received
&amp;lt;info&amp;gt; background_dfu: DFU trigger: init (sz=140, crc=3CE37F4) image (sz=357152, crc=76D6FA45)
&amp;lt;info&amp;gt; background_dfu: state=DFU_DOWNLOAD_TRIG event=DFU_EVENT_TRANSFER_COMPLETE
&amp;lt;warning&amp;gt; background_dfu: Installed image CRC is different
&amp;lt;error&amp;gt; nrf_dfu_validation: Failed to decode init packet
&amp;lt;error&amp;gt; background_dfu: Init commad has changed
&amp;lt;info&amp;gt; background_dfu: Init complete. Multicast Mode.
&amp;lt;info&amp;gt; background_dfu: state=DFU_DOWNLOAD_INIT_CMD event=DFU_EVENT_TRANSFER_CONTINUE
&amp;lt;info&amp;gt; COAP_DFU: DFU trigger request received
&amp;lt;error&amp;gt; background_dfu: Validate trigger: DFU already in progress (s:DFU_DOWNLOAD_INIT_CMD).
&amp;lt;info&amp;gt; COAP_DFU: DFU trigger request received
&amp;lt;error&amp;gt; background_dfu: Validate trigger: DFU already in progress (s:DFU_DOWNLOAD_INIT_CMD).
&amp;lt;info&amp;gt; background_dfu: Storing block (b:0 c:0).
&amp;lt;info&amp;gt; background_dfu: state=DFU_DOWNLOAD_INIT_CMD event=DFU_EVENT_TRANSFER_CONTINUE
&amp;lt;info&amp;gt; background_dfu: Storing block (b:1 c:1).
&amp;lt;info&amp;gt; background_dfu: state=DFU_DOWNLOAD_INIT_CMD event=DFU_EVENT_TRANSFER_CONTINUE
&amp;lt;info&amp;gt; background_dfu: Storing block (b:2 c:2).
&amp;lt;info&amp;gt; nrf_dfu_validation: Signature required. Checking signature.
&amp;lt;info&amp;gt; nrf_dfu_validation: Calculating init packet hash (init packet len: 63)
&amp;lt;info&amp;gt; nrf_dfu_validation: Verify signature
&amp;lt;info&amp;gt; nrf_dfu_validation: Image verified
&amp;lt;info&amp;gt; background_dfu: state=DFU_DOWNLOAD_INIT_CMD event=DFU_EVENT_TRANSFER_COMPLETE
&amp;lt;info&amp;gt; background_dfu: state=DFU_DOWNLOAD_FIRMWARE event=DFU_EVENT_TRANSFER_CONTINUE
&amp;lt;info&amp;gt; background_dfu: Storing block (b:0 c:0).

&amp;lt;info&amp;gt; app: Thread version: OPENTHREAD/20180926-00368-gf01e3f34; NRF52840; Feb 28 2019 11:11:40
&amp;lt;info&amp;gt; COAP_DFU: Endpoints initialized
&amp;lt;info&amp;gt; background_dfu: Current DFU Diag version: Mar 18 2019 16:39:48, 0x99E68F38
&amp;lt;warning&amp;gt; COAP_DFU: Image data received in invalid state: (m:0 s:5).
&amp;lt;warning&amp;gt; COAP_DFU: Image data received in invalid state: (m:0 s:5).
&amp;lt;warning&amp;gt; COAP_DFU: Image data received in invalid state: (m:0 s:5).
&amp;lt;warning&amp;gt; COAP_DFU: Image data received in invalid state: (m:0 s:5).
&amp;lt;warning&amp;gt; COAP_DFU: Image data received in invalid state: (m:0 s:5).
&amp;lt;warning&amp;gt; COAP_DFU: Image data received in invalid state: (m:0 s:5).
&amp;lt;warning&amp;gt; COAP_DFU: Image data received in invalid state: (m:0 s:5).
&amp;lt;warning&amp;gt; COAP_DFU: Image data received in invalid state: (m:0 s:5).
&amp;lt;warning&amp;gt; COAP_DFU: Image data received in invalid state: (m:0 s:5).
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;I followed the steps in the thread dfu example&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;#initial client
nrfutil settings generate --family NRF52840 --application tnode.hex --application-version 1 --bootloader-version 1 --bl-settings-version 1 settings.hex
mergehex -m tnode.hex settings.hex -o dfu_client.hex

nrfjprog -f nrf52 -r --program dfu_data/mbr.hex --snr 683612867 --chiperase
nrfjprog -f nrf52 -r --program dfu_data/bootloader.hex --snr 683612867 --sectoranduicrerase
nrfjprog -f nrf52 -r --program ./dfu_client.hex --snr 683612867 --sectorerase

#new firmware
nrfutil pkg generate --hw-version 52 --sd-req 0x00 --application-version 2 --application tnode.hex --key-file dfu_data/priv.pem app_dfu_package_2.zip
nrfutil --output /dev/stdout dfu thread -pkg app_dfu_package_2.zip -p /dev/ttyACM1 -r 10 -rs 5000 -a FF03::1 -sp 5685
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Related parts of the project file:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;c_preprocessor_definitions=&amp;quot;BOARD_PCA10056;CONFIG_GPIO_AS_PINRESET;FLOAT_ABI_HARD;FREERTOS;INITIALIZE_USER_SECTIONS;NO_VTOR_CONFIG;NRF52840_XXAA;NRF_DFU_NO_TRANSPORT;NRF_DFU_SETTINGS_VERSION=1;OPENTHREAD_ENABLE_APPLICATION_COAP;SVC_INTERFACE_CALL_AS_NORMAL_FUNCTION;SWI_DISABLE0;uECC_ENABLE_VLI_API=0;uECC_OPTIMIZATION_LEVEL=3;uECC_SQUARE_FUNC=0;uECC_SUPPORT_COMPRESSED_POINT=0;uECC_VLI_NATIVE_LITTLE_ENDIAN=1;&amp;quot;

  &amp;lt;configuration
    Name=&amp;quot;Release&amp;quot;
    linker_section_placement_file=&amp;quot;flash_placement-release.xml&amp;quot;
    linker_section_placement_macros=&amp;quot;FLASH_PH_START=0x0;FLASH_PH_SIZE=0x100000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x40000;FLASH_START=0x1000;FLASH_SIZE=0xfb000;RAM_START=0x20000008;RAM_SIZE=0x3fff8&amp;quot;
    linker_section_placements_segments=&amp;quot;FLASH RX 0x0 0x100000;RAM RWX 0x20000000 0x40000;ot_flash_data RX 0x000f4000 0x4000;uicr_bootloader_start_address RX 0x10001014 0x4;bootloader_settings_page RX 0x000FF000 0x1000;uicr_mbr_params_page RX 0x10001018 0x4;mbr_params_page RX 0x000FE000 0x1000&amp;quot;
    c_preprocessor_definitions=&amp;quot;NDEBUG&amp;quot;
    gcc_optimization_level=&amp;quot;Optimize For Size&amp;quot; /&amp;gt;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;And flash placement file (not the same with the example since I added different components in to the project, but merged):&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="xml"&gt;&amp;lt;!DOCTYPE Linker_Placement_File&amp;gt;
&amp;lt;Root name=&amp;quot;Flash Section Placement&amp;quot;&amp;gt;
  &amp;lt;MemorySegment name=&amp;quot;FLASH&amp;quot; start=&amp;quot;$(FLASH_PH_START)&amp;quot; size=&amp;quot;$(FLASH_PH_SIZE)&amp;quot;&amp;gt;
    &amp;lt;ProgramSection load=&amp;quot;no&amp;quot; name=&amp;quot;.reserved_flash&amp;quot; start=&amp;quot;$(FLASH_PH_START)&amp;quot; size=&amp;quot;$(FLASH_START)-$(FLASH_PH_START)&amp;quot; /&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;0x100&amp;quot; load=&amp;quot;Yes&amp;quot; name=&amp;quot;.vectors&amp;quot; start=&amp;quot;$(FLASH_START)&amp;quot; /&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;4&amp;quot; load=&amp;quot;Yes&amp;quot; name=&amp;quot;.init&amp;quot; /&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;4&amp;quot; load=&amp;quot;Yes&amp;quot; name=&amp;quot;.init_rodata&amp;quot; /&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;4&amp;quot; load=&amp;quot;Yes&amp;quot; name=&amp;quot;.text&amp;quot; /&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;4&amp;quot; keep=&amp;quot;Yes&amp;quot; load=&amp;quot;Yes&amp;quot; name=&amp;quot;.crypto_data&amp;quot; inputsections=&amp;quot;*(SORT(.crypto_data*))&amp;quot; address_symbol=&amp;quot;__start_crypto_data&amp;quot; end_symbol=&amp;quot;__stop_crypto_data&amp;quot; /&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;4&amp;quot; keep=&amp;quot;Yes&amp;quot; load=&amp;quot;Yes&amp;quot; name=&amp;quot;.nrf_queue&amp;quot; inputsections=&amp;quot;*(.nrf_queue*)&amp;quot; address_symbol=&amp;quot;__start_nrf_queue&amp;quot; end_symbol=&amp;quot;__stop_nrf_queue&amp;quot; /&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;4&amp;quot; keep=&amp;quot;Yes&amp;quot; load=&amp;quot;Yes&amp;quot; name=&amp;quot;.log_const_data&amp;quot; inputsections=&amp;quot;*(SORT(.log_const_data*))&amp;quot; address_symbol=&amp;quot;__start_log_const_data&amp;quot; end_symbol=&amp;quot;__stop_log_const_data&amp;quot; /&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;4&amp;quot; keep=&amp;quot;Yes&amp;quot; load=&amp;quot;Yes&amp;quot; name=&amp;quot;.log_backends&amp;quot; inputsections=&amp;quot;*(SORT(.log_backends*))&amp;quot; address_symbol=&amp;quot;__start_log_backends&amp;quot; end_symbol=&amp;quot;__stop_log_backends&amp;quot; /&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;4&amp;quot; keep=&amp;quot;Yes&amp;quot; load=&amp;quot;Yes&amp;quot; name=&amp;quot;.nrf_balloc&amp;quot; inputsections=&amp;quot;*(.nrf_balloc*)&amp;quot; address_symbol=&amp;quot;__start_nrf_balloc&amp;quot; end_symbol=&amp;quot;__stop_nrf_balloc&amp;quot; /&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;4&amp;quot; keep=&amp;quot;Yes&amp;quot; load=&amp;quot;Yes&amp;quot; name=&amp;quot;.dfu_trans&amp;quot; inputsections=&amp;quot;*(SORT(.dfu_trans*))&amp;quot; address_symbol=&amp;quot;__start_dfu_trans&amp;quot; end_symbol=&amp;quot;__stop_dfu_trans&amp;quot; /&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;4&amp;quot; keep=&amp;quot;Yes&amp;quot; load=&amp;quot;No&amp;quot; name=&amp;quot;.nrf_sections&amp;quot; address_symbol=&amp;quot;__start_nrf_sections&amp;quot; /&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;4&amp;quot; keep=&amp;quot;Yes&amp;quot; load=&amp;quot;Yes&amp;quot; name=&amp;quot;.fs_data&amp;quot;  inputsections=&amp;quot;*(.fs_data*)&amp;quot; runin=&amp;quot;.fs_data_run&amp;quot;/&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;4&amp;quot; keep=&amp;quot;Yes&amp;quot; load=&amp;quot;Yes&amp;quot; name=&amp;quot;.log_dynamic_data&amp;quot;  inputsections=&amp;quot;*(SORT(.log_dynamic_data*))&amp;quot; runin=&amp;quot;.log_dynamic_data_run&amp;quot;/&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;4&amp;quot; keep=&amp;quot;Yes&amp;quot; load=&amp;quot;Yes&amp;quot; name=&amp;quot;.log_filter_data&amp;quot;  inputsections=&amp;quot;*(SORT(.log_filter_data*))&amp;quot; runin=&amp;quot;.log_filter_data_run&amp;quot;/&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;4&amp;quot; load=&amp;quot;Yes&amp;quot; name=&amp;quot;.dtors&amp;quot; /&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;4&amp;quot; load=&amp;quot;Yes&amp;quot; name=&amp;quot;.ctors&amp;quot; /&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;4&amp;quot; load=&amp;quot;Yes&amp;quot; name=&amp;quot;.rodata&amp;quot; /&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;4&amp;quot; load=&amp;quot;Yes&amp;quot; name=&amp;quot;.ARM.exidx&amp;quot; address_symbol=&amp;quot;__exidx_start&amp;quot; end_symbol=&amp;quot;__exidx_end&amp;quot; /&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;4&amp;quot; load=&amp;quot;Yes&amp;quot; runin=&amp;quot;.fast_run&amp;quot; name=&amp;quot;.fast&amp;quot; /&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;4&amp;quot; load=&amp;quot;Yes&amp;quot; runin=&amp;quot;.data_run&amp;quot; name=&amp;quot;.data&amp;quot; /&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;4&amp;quot; load=&amp;quot;Yes&amp;quot; runin=&amp;quot;.tdata_run&amp;quot; name=&amp;quot;.tdata&amp;quot; /&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;4&amp;quot; load=&amp;quot;No&amp;quot;  name=&amp;quot;.mev_data&amp;quot; start=&amp;quot;0xf3000&amp;quot; size=&amp;quot;0x1000&amp;quot; /&amp;gt;
  &amp;lt;/MemorySegment&amp;gt;
  &amp;lt;MemorySegment name=&amp;quot;RAM&amp;quot; start=&amp;quot;$(RAM_PH_START)&amp;quot; size=&amp;quot;$(RAM_PH_SIZE)&amp;quot;&amp;gt;
    &amp;lt;ProgramSection load=&amp;quot;no&amp;quot; name=&amp;quot;.reserved_ram&amp;quot; start=&amp;quot;$(RAM_PH_START)&amp;quot; size=&amp;quot;$(RAM_START)-$(RAM_PH_START)&amp;quot; /&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;0x100&amp;quot; load=&amp;quot;No&amp;quot; name=&amp;quot;.vectors_ram&amp;quot; start=&amp;quot;$(RAM_START)&amp;quot; address_symbol=&amp;quot;__app_ram_start__&amp;quot;/&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;4&amp;quot; keep=&amp;quot;Yes&amp;quot; load=&amp;quot;No&amp;quot; name=&amp;quot;.nrf_sections_run&amp;quot; address_symbol=&amp;quot;__start_nrf_sections_run&amp;quot; /&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;4&amp;quot; keep=&amp;quot;Yes&amp;quot; load=&amp;quot;No&amp;quot; name=&amp;quot;.fs_data_run&amp;quot; address_symbol=&amp;quot;__start_fs_data&amp;quot; end_symbol=&amp;quot;__stop_fs_data&amp;quot; /&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;4&amp;quot; keep=&amp;quot;Yes&amp;quot; load=&amp;quot;No&amp;quot; name=&amp;quot;.log_dynamic_data_run&amp;quot; address_symbol=&amp;quot;__start_log_dynamic_data&amp;quot; end_symbol=&amp;quot;__stop_log_dynamic_data&amp;quot; /&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;4&amp;quot; keep=&amp;quot;Yes&amp;quot; load=&amp;quot;No&amp;quot; name=&amp;quot;.log_filter_data_run&amp;quot; address_symbol=&amp;quot;__start_log_filter_data&amp;quot; end_symbol=&amp;quot;__stop_log_filter_data&amp;quot; /&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;4&amp;quot; keep=&amp;quot;Yes&amp;quot; load=&amp;quot;No&amp;quot; name=&amp;quot;.nrf_sections_run_end&amp;quot; address_symbol=&amp;quot;__end_nrf_sections_run&amp;quot; /&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;4&amp;quot; load=&amp;quot;No&amp;quot; name=&amp;quot;.fast_run&amp;quot; /&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;4&amp;quot; load=&amp;quot;No&amp;quot; name=&amp;quot;.data_run&amp;quot; /&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;4&amp;quot; load=&amp;quot;No&amp;quot; name=&amp;quot;.tdata_run&amp;quot; /&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;4&amp;quot; load=&amp;quot;No&amp;quot; name=&amp;quot;.bss&amp;quot; /&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;4&amp;quot; load=&amp;quot;No&amp;quot; name=&amp;quot;.tbss&amp;quot; /&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;4&amp;quot; load=&amp;quot;No&amp;quot; name=&amp;quot;.non_init&amp;quot; /&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;4&amp;quot; size=&amp;quot;__HEAPSIZE__&amp;quot; load=&amp;quot;No&amp;quot; name=&amp;quot;.heap&amp;quot; /&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;8&amp;quot; size=&amp;quot;__STACKSIZE__&amp;quot; load=&amp;quot;No&amp;quot; place_from_segment_end=&amp;quot;Yes&amp;quot; name=&amp;quot;.stack&amp;quot;  address_symbol=&amp;quot;__StackLimit&amp;quot; end_symbol=&amp;quot;__StackTop&amp;quot;/&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;8&amp;quot; size=&amp;quot;__STACKSIZE_PROCESS__&amp;quot; load=&amp;quot;No&amp;quot; name=&amp;quot;.stack_process&amp;quot; /&amp;gt;
  &amp;lt;/MemorySegment&amp;gt;
  &amp;lt;MemorySegment name=&amp;quot;ot_flash_data&amp;quot; start=&amp;quot;0x000f4000&amp;quot; size=&amp;quot;0x4000&amp;quot;&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;4&amp;quot; keep=&amp;quot;Yes&amp;quot; load=&amp;quot;No&amp;quot; name=&amp;quot;.ot_flash_data&amp;quot; address_symbol=&amp;quot;__start_ot_flash_data&amp;quot; end_symbol=&amp;quot;__stop_ot_flash_data&amp;quot; start = &amp;quot;0x000f4000&amp;quot; size=&amp;quot;0x4000&amp;quot; /&amp;gt;
  &amp;lt;/MemorySegment&amp;gt;
  &amp;lt;MemorySegment name=&amp;quot;bootloader_settings_page&amp;quot; start=&amp;quot;0x000FF000&amp;quot; size=&amp;quot;0x1000&amp;quot;&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;4&amp;quot; keep=&amp;quot;Yes&amp;quot; load=&amp;quot;No&amp;quot; name=&amp;quot;.bootloader_settings_page&amp;quot; address_symbol=&amp;quot;__start_bootloader_settings_page&amp;quot; end_symbol=&amp;quot;__stop_bootloader_settings_page&amp;quot; start = &amp;quot;0x000FF000&amp;quot; size=&amp;quot;0x1000&amp;quot; /&amp;gt;
  &amp;lt;/MemorySegment&amp;gt;
  &amp;lt;MemorySegment name=&amp;quot;mbr_params_page&amp;quot; start=&amp;quot;0x000FE000&amp;quot; size=&amp;quot;0x1000&amp;quot;&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;4&amp;quot; keep=&amp;quot;Yes&amp;quot; load=&amp;quot;No&amp;quot; name=&amp;quot;.mbr_params_page&amp;quot; address_symbol=&amp;quot;__start_mbr_params_page&amp;quot; end_symbol=&amp;quot;__stop_mbr_params_page&amp;quot; start = &amp;quot;0x000FE000&amp;quot; size=&amp;quot;0x1000&amp;quot; /&amp;gt;
  &amp;lt;/MemorySegment&amp;gt;
  &amp;lt;MemorySegment name=&amp;quot;uicr_bootloader_start_address&amp;quot; start=&amp;quot;0x10001014&amp;quot; size=&amp;quot;0x4&amp;quot;&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;4&amp;quot; keep=&amp;quot;Yes&amp;quot; load=&amp;quot;Yes&amp;quot; name=&amp;quot;.uicr_bootloader_start_address&amp;quot; address_symbol=&amp;quot;__start_uicr_bootloader_start_address&amp;quot; end_symbol=&amp;quot;__stop_uicr_bootloader_start_address&amp;quot; start = &amp;quot;0x10001014&amp;quot; size=&amp;quot;0x4&amp;quot; /&amp;gt;
  &amp;lt;/MemorySegment&amp;gt;
  &amp;lt;MemorySegment name=&amp;quot;uicr_mbr_params_page&amp;quot; start=&amp;quot;0x10001018&amp;quot; size=&amp;quot;0x4&amp;quot;&amp;gt;
    &amp;lt;ProgramSection alignment=&amp;quot;4&amp;quot; keep=&amp;quot;Yes&amp;quot; load=&amp;quot;Yes&amp;quot; name=&amp;quot;.uicr_mbr_params_page&amp;quot; address_symbol=&amp;quot;__start_uicr_mbr_params_page&amp;quot; end_symbol=&amp;quot;__stop_uicr_mbr_params_page&amp;quot; start = &amp;quot;0x10001018&amp;quot; size=&amp;quot;0x4&amp;quot; /&amp;gt;
  &amp;lt;/MemorySegment&amp;gt;
&amp;lt;/Root&amp;gt;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;And the code where DFU monitored and processed:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;static void thread_stack_task(void * arg)
{
    UNUSED_PARAMETER(arg);

    uint32_t now, before = otPlatAlarmMilliGetNow();

    while (1)
    {
#ifdef NDEBUG
        coap_dfu_process();
        thread_process();

        now = otPlatAlarmMilliGetNow();
        if (now - before &amp;gt; 1000)
        {
            coap_time_tick();
            before = now;
        }

        if (m_app.trigger_dfu)
        {
            m_app.trigger_dfu = false;
            coap_dfu_trigger(NULL);
        }
#else
        thread_process();
#endif

        UNUSED_VARIABLE(ulTaskNotifyTake(pdTRUE, portMAX_DELAY));
    }
}
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Any help is highly appreciated! I think I am doing wrong with the flash placement, but I just merged the example with my current version of placement file.&lt;/p&gt;
&lt;p&gt;I know that this info may not be enough to pinpoint the problem, but if you can give me some clues/checkpoints then I can continue.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Vedat&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: debug bootloader for thread examples</title><link>https://devzone.nordicsemi.com/thread/172814?ContentTypeID=1</link><pubDate>Mon, 25 Feb 2019 14:44:08 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:ea6c1036-1c71-46d2-ba60-f5f5f35df178</guid><dc:creator>ozanoner</dc:creator><description>&lt;p&gt;Thank you,&amp;nbsp; Edvin. I will let you know when I apply &amp;amp; test your suggestions.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Best wishes&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: debug bootloader for thread examples</title><link>https://devzone.nordicsemi.com/thread/172758?ContentTypeID=1</link><pubDate>Mon, 25 Feb 2019 13:01:30 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:4e0b2cb8-0d2d-4672-989a-5588b6b6dc15</guid><dc:creator>Edvin</dc:creator><description>&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;I have not tested,&amp;nbsp; but yes, that is the correct approach.&lt;/p&gt;
&lt;p&gt;If you don&amp;#39;t need to debug anything in the bootloader, you may try to just comment out the two lines in main() of the bootloader&amp;#39;s main.c file:&lt;/p&gt;
&lt;p&gt;ret_val = nrf_bootloader_init(dfu_observer);&lt;br /&gt;APP_ERROR_CHECK(ret_val);&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;As I mentioned, I haven&amp;#39;t tested it, but it may be a bit more complex than that, but as long as the bootloader is flashed, it should run into nrf_bootloader_app_start() if there is nothing wrong with the app (which is checked inside nrf_bootloader_init().&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Alternatively, if this doesn&amp;#39;t work, look at nrf_bootloader_init() in nrf_bootloader.c:&lt;/p&gt;
&lt;p&gt;In the switch (activation result), just make sure that dfu_enter is set to false before if (dfu_enter). If this is false, it will run the application. I believe that this should work.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Edvin&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: debug bootloader for thread examples</title><link>https://devzone.nordicsemi.com/thread/172493?ContentTypeID=1</link><pubDate>Fri, 22 Feb 2019 11:49:23 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:39d7a28d-716e-4f7b-8b31-f69e40cc40e6</guid><dc:creator>ozanoner</dc:creator><description>&lt;p&gt;Hi Edvin,&lt;/p&gt;
&lt;p&gt;Thanks for the reply! I want to debug the actual application. I&amp;#39;m adding&amp;nbsp;DFU feature to my application&amp;nbsp;and using the following example as basis&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.nordicsemi.com/DocLib/Content/SDK_Doc/Thread_SDK/v2-0-0/thread_example_dfu"&gt;https://www.nordicsemi.com/DocLib/Content/SDK_Doc/Thread_SDK/v2-0-0/thread_example_dfu&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;At that point, I&amp;nbsp;can&amp;#39;t debug my app because of the bootloader.&amp;nbsp;As I understand&amp;nbsp;I need to recompile the bootloader in the example above&amp;nbsp;with no-CRC check. Right? Can you tell me how to do that please?&lt;/p&gt;
&lt;p&gt;Best wishes&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: debug bootloader for thread examples</title><link>https://devzone.nordicsemi.com/thread/172336?ContentTypeID=1</link><pubDate>Thu, 21 Feb 2019 14:38:28 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:fa8b85ea-ae25-44ed-93d0-4a31073ea456</guid><dc:creator>Edvin</dc:creator><description>&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;I am sorry. At this point in time there are no Thread Bootloader examples. I don&amp;#39;t know whether you want to debug the bootloader or the actual application, but you may be able to disable the CRC check in the bootloader project if you want to debug the application. I have not tried this in the Thread Bootloader, so I wouldn&amp;#39;t know exactly how to do it, but please specify what you are looking for, and we can see if we can find a usable approach.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Edvin&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>