<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: MKW30Z OTAP demo gUseBootloaderLink_d=1 issue in Wireless MCU</title>
    <link>https://community.nxp.com/t5/Wireless-MCU/MKW30Z-OTAP-demo-gUseBootloaderLink-d-1-issue/m-p/629677#M2075</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;second issue is that the &lt;STRONG&gt;new srec image must have a compliant format&lt;/STRONG&gt;, it must contain at least a special flash zone between &lt;STRONG&gt;0x000014C0 to 0x000014C7&lt;/STRONG&gt; used to interact between app and bootloader&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="pastedImage_1.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/14567iF59FC573C28E2FE7/image-size/large?v=v2&amp;amp;px=999" role="button" title="pastedImage_1.png" alt="pastedImage_1.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;(bootloader struct &lt;STRONG&gt;gpBootInfo&lt;/STRONG&gt;&amp;nbsp; points as same address as app &lt;STRONG&gt;gBootFlags&lt;/STRONG&gt; and has same format)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;framework\Bootloader\Bootloader_OTAP_Serial\src\OtapSerialBootloader\&lt;STRONG&gt;OtapBootloader.c&lt;/STRONG&gt;&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;/*! *********************************************************************************&lt;BR /&gt;&lt;P&gt;* \brief&amp;nbsp;&amp;nbsp; This function will copy the User Application from the external memory&lt;BR /&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; into the program Flash&lt;BR /&gt;*&lt;BR /&gt;********************************************************************************** */&lt;BR /&gt;void Boot_LoadImage (void)&lt;BR /&gt;{&lt;/P&gt;&lt;P&gt;....&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Keep the boot flags set&amp;nbsp; until the all image is downloaded */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for( i=0; i&amp;lt;gEepromParams_WriteAlignment_c; i++ )&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; flags.newBootImageAvailable[i] = gBootValueForFALSE_c;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; flags.bootProcessCompleted[i] = gBootValueForTRUE_c;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;....&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Set the bBootProcessCompleted Flag */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( FLASH_OK != FLASH_Program((uint32_t)gBootImageFlagsAddress_c, (uint32_t)&amp;amp;flags, sizeof(flags)) )&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gHandleBootError_d();&lt;/P&gt;&lt;P&gt;...&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;.....&lt;/P&gt;&lt;P&gt;int main(int argc, char **argv)&lt;BR /&gt;{&lt;/P&gt;&lt;P&gt;...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; gpBootInfo = (bootInfo_t*)gBootImageFlagsAddress_c;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((gpBootInfo-&amp;gt;newBootImageAvailable[0] != gBootValueForTRUE_c) &amp;amp;&amp;amp;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (gpBootInfo-&amp;gt;bootProcessCompleted[0] ==&amp;nbsp; gBootValueForTRUE_c))&lt;/STRONG&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Set the start address of the interrupt vector*/&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SCB_VTOR = gUserFlashStart_d;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JumpToApplication(gUserFlashStart_d);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Write the new image */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Boot_LoadImage();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;.......&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Also some concerns my raise:&lt;/P&gt;&lt;P&gt;- if new image have not the expected structure it can be spoiled by Boot_LoadImage in this ROM zone 0x000014C0 to 0x000014C7 (same as for bootloader zone)&lt;/P&gt;&lt;P&gt;- actual only one flag is absolute necessary flags.newBootImageAvailable ( the other one bootProcessCompleted can be used for debug)&lt;/P&gt;&lt;P&gt;- as the flash erase process starts, it should first erase these particular flag zones in case of accidental reset occurs.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 24 Feb 2017 09:26:53 GMT</pubDate>
    <dc:creator>lucianfiran</dc:creator>
    <dc:date>2017-02-24T09:26:53Z</dc:date>
    <item>
      <title>MKW30Z OTAP demo gUseBootloaderLink_d=1 issue</title>
      <link>https://community.nxp.com/t5/Wireless-MCU/MKW30Z-OTAP-demo-gUseBootloaderLink-d-1-issue/m-p/629675#M2073</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV dir="ltr"&gt;IAR 7.50;&amp;nbsp; KW40Z_Connectivity_Software_1.0.1 (KSDK_1.3.0)&lt;/DIV&gt;&lt;DIV dir="ltr"&gt; &lt;/DIV&gt;&lt;DIV dir="ltr"&gt;The issue is generated when&lt;STRONG&gt; gUseBootloaderLink_d=1&lt;/STRONG&gt; is present in Linker section.&lt;/DIV&gt;&lt;DIV dir="ltr"&gt;The leds don't flash; callback functions on timers are not executed (on LED.c &lt;STRONG&gt;LED_FlashTimeout&lt;/STRONG&gt; not triggered).&lt;/DIV&gt;&lt;DIV dir="ltr"&gt;The advertising works, but no BT connection is possible (&lt;STRONG&gt;BleApp_ConnectionCallback&lt;/STRONG&gt; is not triggered)&lt;/DIV&gt;&lt;DIV dir="ltr"&gt; &lt;/DIV&gt;&lt;DIV dir="ltr"&gt; &lt;/DIV&gt;&lt;DIV dir="ltr"&gt;When that setting is removed - timers works,callbacks work, leds flash as they should,&lt;/DIV&gt;&lt;DIV dir="ltr"&gt;but no chip update at end of file upload.&lt;/DIV&gt;&lt;DIV&gt;&lt;IMG alt="Inline image" class="image-guid-7192f0f1-c0d2-9dbc-225a-bcb259c888d1" src="https://us-mg42.mail.yahoo.com/ya/download?mid=2%5f0%5f0%5f2%5f1422408%5fACpKyAoAADHeWKI2dwE8aMstWME&amp;amp;m=YaDownload&amp;amp;pid=3&amp;amp;fid=Sent&amp;amp;inline=1&amp;amp;appid=YahooMailNeo&amp;amp;uploadId=aW1hZ2UucG5n" style="width: 100%; overflow-x: auto; max-width: 511px; overflow-y: auto; max-height: 182px;" /&gt;&lt;/DIV&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;DIV dir="ltr"&gt;I can connect to Kinetis BLE Toolbox - OTAP, I can upload a file to the MKW30Z.&lt;/DIV&gt;&lt;DIV dir="ltr"&gt;Te phone confirms transfer complete.&lt;/DIV&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;DIV class=""&gt;&lt;IMG alt="Inline image" class="image-guid-d998542d-b8b4-5633-e57f-e9c32c232f73" src="https://us-mg42.mail.yahoo.com/ya/download?mid=2%5f0%5f0%5f2%5f1422408%5fACpKyAoAADHeWKI2dwE8aMstWME&amp;amp;m=YaDownload&amp;amp;pid=2&amp;amp;fid=Sent&amp;amp;inline=1&amp;amp;appid=YahooMailNeo&amp;amp;uploadId=aW1hZ2UucG5n" style="width: 100%; overflow-x: auto; max-width: 800px; overflow-y: auto; max-height: 704px;" /&gt;&lt;BR clear="none" /&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;DIV dir="ltr"&gt;The code exit clean via ResetMCU (breakpoint on it), but that's all, &lt;STRONG&gt;the MKW30Z is not updated with new image&lt;/STRONG&gt; !&lt;/DIV&gt;&lt;DIV dir="ltr"&gt;(either bootloader does not kick in or&amp;nbsp; OTA_SetNewImageFlag does not work properly, or ...)&lt;/DIV&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;DIV dir="ltr"&gt;static void OtapClient_ContinueImageDownload (deviceId_t deviceId)&lt;BR clear="none" /&gt;{&lt;/DIV&gt;&lt;DIV dir="ltr"&gt;...........&lt;/DIV&gt;&lt;DIV dir="ltr"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case mOtapClientStateImageDownloadComplete_c:&lt;BR clear="none" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*! If the image download is complete try to set the new image flag&lt;BR clear="none" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&amp;nbsp; and reset the MCU for the bootloader ot kick in. */&lt;BR clear="none" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Gap_Disconnect (deviceId);&lt;BR clear="none" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OTA_SetNewImageFlag ();&lt;BR clear="none" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ResetMCU ();&lt;/STRONG&gt;&lt;BR clear="none" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;BR clear="none" /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; default:&lt;DIV class=""&gt; &lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV class=""&gt;&lt;DIV class="" style="display: block;"&gt;&lt;DIV style="font-family: HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif; font-size: 16px;"&gt;&lt;DIV style="font-family: HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, Sans-Serif; font-size: 16px;"&gt;&lt;DIV&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;DIV&gt;References:&lt;/DIV&gt;&lt;DIV&gt;&lt;A href="https://community.nxp.com/thread/438958"&gt;MKW30Z rebuild Bootloader OTAP KW40Z4&lt;/A&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;A href="https://community.nxp.com/thread/438834"&gt;Porting From MKW40Z to MKW30Z MKW30Z160xxx4_connectivity.icf&lt;/A&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;A href="https://community.nxp.com/thread/438906"&gt;https://community.nxp.com/thread/438906&lt;/A&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;DIV&gt;Best Regards,&lt;/DIV&gt;&lt;DIV&gt;Lucian&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 13 Feb 2017 23:01:42 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Wireless-MCU/MKW30Z-OTAP-demo-gUseBootloaderLink-d-1-issue/m-p/629675#M2073</guid>
      <dc:creator>lucianfiran</dc:creator>
      <dc:date>2017-02-13T23:01:42Z</dc:date>
    </item>
    <item>
      <title>Re: MKW30Z OTAP demo gUseBootloaderLink_d=1 issue</title>
      <link>https://community.nxp.com/t5/Wireless-MCU/MKW30Z-OTAP-demo-gUseBootloaderLink-d-1-issue/m-p/629676#M2074</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;some updates&lt;/P&gt;&lt;P&gt;it is very likely that the &lt;STRONG&gt;Flash Config registers are overwritten by bootloader bin own set-up&lt;/STRONG&gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/platform/devices/MKW30Z4/linker/iar/&lt;STRONG&gt;MKW30Z160xxx4_connectivity.icf&lt;/STRONG&gt;&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;&lt;EM&gt;if (&lt;STRONG&gt;gUseBootloaderLink_d&lt;/STRONG&gt;) &lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;{&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp; define symbol m_bootloader_start&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = __region_ROM_start__;&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp; define symbol m_bootloader_end&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = ((__region_ROM_end__ + 1) / 32) - 1;&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;&amp;nbsp; define symbol m_interrupts_start&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = m_bootloader_end + 1;&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp; define symbol m_interrupts_end&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = m_interrupts_start + __vector_table_size__ - 1;&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;&amp;nbsp; define symbol m_bootFlags_start&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = m_interrupts_end + 1;&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp; define symbol m_bootFlags_end&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = m_bootFlags_start + 7;&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;&amp;nbsp; define exported symbol __BootFlags_Start__ = m_bootFlags_start;&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;}&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;else&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;{&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp; define symbol m_interrupts_start&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = __region_ROM_start__;&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp; define symbol m_interrupts_end&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = m_interrupts_start + __vector_table_size__ - 1;&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp; define symbol &lt;STRONG&gt;m_flash_config_start&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0x00000400;&lt;/STRONG&gt;&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp; define symbol &lt;STRONG&gt;m_flash_config_end&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0x0000040F;&lt;/STRONG&gt;&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;}&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="pastedImage_5.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/13575i28449A84B2592533/image-size/large?v=v2&amp;amp;px=999" role="button" title="pastedImage_5.png" alt="pastedImage_5.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;\platform\devices\MKW30Z4\startup\iar\&lt;STRONG&gt;startup_MKW30Z4.s&lt;/STRONG&gt;&lt;EM&gt;&lt;BR /&gt;&lt;/EM&gt;&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SECTION FlashConfig:CODE&lt;BR /&gt;&lt;STRONG&gt;__FlashConfig&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;DCD&amp;nbsp;&amp;nbsp; &amp;nbsp;0xFFFFFFFF&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;DCD&amp;nbsp;&amp;nbsp; &amp;nbsp;0xFFFFFFFF&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;DCD&amp;nbsp;&amp;nbsp; &amp;nbsp;0xFFFFFFFF&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;DCD&amp;nbsp;&amp;nbsp; &amp;nbsp;0xFFFF&lt;/STRONG&gt;FB&lt;STRONG&gt;FE&amp;nbsp;&amp;nbsp;&amp;nbsp; ;0xFFFFFFFE&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;__FlashConfig_End&lt;/STRONG&gt;&lt;BR /&gt;....&lt;BR /&gt;NMI_Handler&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B .&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PUBWEAK HardFault_Handler&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SECTION .text:CODE:REORDER:NOROOT(1)&lt;/EM&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;the booloader has a build-in set of flash config's:&lt;/P&gt;&lt;P&gt;\framework\Bootloader\Bootloader_OTAP_Serial\Linker_cfg\&lt;STRONG&gt;BootloaderOTAP.icf&lt;/STRONG&gt;&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;&lt;EM&gt;/*-Sizes-*/&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;define symbol __size_cstack__ = 0x1000;&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;define symbol __IntVectTable_start__ = __region_BOOT_ROM_start__;&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;define symbol __IntVectTable_end__&amp;nbsp;&amp;nbsp; = __region_BOOT_ROM_start__ + 0x3F;&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;define symbol &lt;STRONG&gt;__FlashConfig_start__&amp;nbsp;&amp;nbsp; = 0x00000400&lt;/STRONG&gt;;&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;define symbol &lt;STRONG&gt;__FlashConfig_end__&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0x0000040f&lt;/STRONG&gt;;&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;define exported symbol __BOOT_STACK_ADDRESS = __region_RAM_end__ - 7;&amp;nbsp;&amp;nbsp; &amp;nbsp;//0x20007FF8;&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;define symbol __code_start__&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = __IntVectTable_end__+1;&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;from Linker set-up: gRomSize_c=0x28000&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="pastedImage_22.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/13609i94057D8CDA6A02E1/image-size/large?v=v2&amp;amp;px=999" role="button" title="pastedImage_22.png" alt="pastedImage_22.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;Bootloader ROM map seems to be:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="pastedImage_28.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/13643i48D736008CFF2DFD/image-size/large?v=v2&amp;amp;px=999" role="button" title="pastedImage_28.png" alt="pastedImage_28.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;(a strange thing is that bootloader table vectors are &lt;STRONG&gt;less&lt;/STRONG&gt; than main application &lt;STRONG&gt;63 vs 192&lt;/STRONG&gt;)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;\framework\Bootloader\Bootloader_OTAP_Serial\src\OtapSerialBootloader\&lt;STRONG&gt;OtapBootloader.c&lt;/STRONG&gt;&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;&lt;EM&gt;/*&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;* Name: gFlashProtection_c&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;* Description: The value for FPROT register. By default the Flash is not Protected&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;*/&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;#define gFlashProtection_c 0xFFFFFFFF /* Flash is not write protected */&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;// #define gFlashProtection_c 0xFFFFFFFE /* The first Flash region is write protected */&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;.......&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;#if defined(__IAR_SYSTEMS_ICC__)&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;#pragma location = "&lt;STRONG&gt;FlashConfig&lt;/STRONG&gt;"&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;__root const FlashConfig_t gFlashConfig @ "FlashConfig" =&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;{&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {0xFFFFFFFF,&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; 0xFFFFFFFF,&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; gFlashProtection_c,&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; 0xFFFFFFFE}&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;};&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;MKW40Z/30Z/20Z Reference Manual, Rev. 1.2, 10/2015&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;6.3.2 FOPT boot options&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;The &lt;STRONG&gt;Flash Option (FOPT)&lt;/STRONG&gt; register in the Flash Memory module (&lt;STRONG&gt;FTFA_FOPT&lt;/STRONG&gt;) allows the user to customize the operation of the MCU at boot time.&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt; The register contains readonly bits that are loaded from the NVM's option byte in the flash configuration field. The default setting for all values in the FTFA_FOPT register is logic 1 since it is copied from the option byte residing in flash, which has all bits as logic 1 in the flash erased state. To&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;configure for alternate settings, program the appropriate bits in the NVM option byte. &lt;STRONG&gt;The new settings will take effect on subsequent POR, VLLSx recoveries, and any system &lt;/STRONG&gt;&lt;STRONG&gt;reset. &amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/STRONG&gt;&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;6.3.3 Boot sequence&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;...&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;When the system exits reset, the processor sets up the stack, program counter (PC), and link register (LR). The processor reads the start SP (SP_main) from vector-table offset 0. The core reads the start PC from vector-table offset 4. LR is set to 0xFFFF_FFFF. The next sequence of events depends on the&lt;STRONG&gt; NMI input&lt;/STRONG&gt; and &lt;STRONG&gt;FTFA_FOPT[NMI_DIS]&lt;/STRONG&gt; (See Table 6-2) :&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;• If the NMI input is high or the &lt;STRONG&gt;NMI function is disabled in FTFA_FOPT&lt;/STRONG&gt;, the CPU begins execution at the PC location.&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;• If the NMI input is low and the NMI function is enabled in FTFA_FOPT, this results in an NMI interrupt. The processor executes an Exception Entry and&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;reads the NMI interrupt handler address from vector-table offset 8. The CPU begins execution at the NMI interrupt handler.&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;....&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;27.3.1 Flash Configuration Field Description&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;The program flash memory contains a &lt;STRONG&gt;16-byte flash configuration field that stores default protection settings (loaded on reset)&lt;/STRONG&gt; and security information that allows the MCU to restrict access to the flash memory module.&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;As in main application you wold like to disable the &lt;STRONG&gt;NMI&lt;/STRONG&gt; interrupt by setting&amp;nbsp; &lt;STRONG&gt;NMI_DIS&lt;/STRONG&gt; to 0 the bootloader must be rebuild with the flash zone updated corresponding to application. Or the linker application mechanism updated to not permit the change of flash config.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 19 Feb 2017 08:57:52 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Wireless-MCU/MKW30Z-OTAP-demo-gUseBootloaderLink-d-1-issue/m-p/629676#M2074</guid>
      <dc:creator>lucianfiran</dc:creator>
      <dc:date>2017-02-19T08:57:52Z</dc:date>
    </item>
    <item>
      <title>Re: MKW30Z OTAP demo gUseBootloaderLink_d=1 issue</title>
      <link>https://community.nxp.com/t5/Wireless-MCU/MKW30Z-OTAP-demo-gUseBootloaderLink-d-1-issue/m-p/629677#M2075</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;second issue is that the &lt;STRONG&gt;new srec image must have a compliant format&lt;/STRONG&gt;, it must contain at least a special flash zone between &lt;STRONG&gt;0x000014C0 to 0x000014C7&lt;/STRONG&gt; used to interact between app and bootloader&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="pastedImage_1.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/14567iF59FC573C28E2FE7/image-size/large?v=v2&amp;amp;px=999" role="button" title="pastedImage_1.png" alt="pastedImage_1.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;(bootloader struct &lt;STRONG&gt;gpBootInfo&lt;/STRONG&gt;&amp;nbsp; points as same address as app &lt;STRONG&gt;gBootFlags&lt;/STRONG&gt; and has same format)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;framework\Bootloader\Bootloader_OTAP_Serial\src\OtapSerialBootloader\&lt;STRONG&gt;OtapBootloader.c&lt;/STRONG&gt;&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;/*! *********************************************************************************&lt;BR /&gt;&lt;P&gt;* \brief&amp;nbsp;&amp;nbsp; This function will copy the User Application from the external memory&lt;BR /&gt;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; into the program Flash&lt;BR /&gt;*&lt;BR /&gt;********************************************************************************** */&lt;BR /&gt;void Boot_LoadImage (void)&lt;BR /&gt;{&lt;/P&gt;&lt;P&gt;....&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Keep the boot flags set&amp;nbsp; until the all image is downloaded */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for( i=0; i&amp;lt;gEepromParams_WriteAlignment_c; i++ )&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; flags.newBootImageAvailable[i] = gBootValueForFALSE_c;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; flags.bootProcessCompleted[i] = gBootValueForTRUE_c;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;....&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Set the bBootProcessCompleted Flag */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( FLASH_OK != FLASH_Program((uint32_t)gBootImageFlagsAddress_c, (uint32_t)&amp;amp;flags, sizeof(flags)) )&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; gHandleBootError_d();&lt;/P&gt;&lt;P&gt;...&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;.....&lt;/P&gt;&lt;P&gt;int main(int argc, char **argv)&lt;BR /&gt;{&lt;/P&gt;&lt;P&gt;...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; gpBootInfo = (bootInfo_t*)gBootImageFlagsAddress_c;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((gpBootInfo-&amp;gt;newBootImageAvailable[0] != gBootValueForTRUE_c) &amp;amp;&amp;amp;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (gpBootInfo-&amp;gt;bootProcessCompleted[0] ==&amp;nbsp; gBootValueForTRUE_c))&lt;/STRONG&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Set the start address of the interrupt vector*/&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SCB_VTOR = gUserFlashStart_d;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JumpToApplication(gUserFlashStart_d);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Write the new image */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Boot_LoadImage();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;.......&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Also some concerns my raise:&lt;/P&gt;&lt;P&gt;- if new image have not the expected structure it can be spoiled by Boot_LoadImage in this ROM zone 0x000014C0 to 0x000014C7 (same as for bootloader zone)&lt;/P&gt;&lt;P&gt;- actual only one flag is absolute necessary flags.newBootImageAvailable ( the other one bootProcessCompleted can be used for debug)&lt;/P&gt;&lt;P&gt;- as the flash erase process starts, it should first erase these particular flag zones in case of accidental reset occurs.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 24 Feb 2017 09:26:53 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Wireless-MCU/MKW30Z-OTAP-demo-gUseBootloaderLink-d-1-issue/m-p/629677#M2075</guid>
      <dc:creator>lucianfiran</dc:creator>
      <dc:date>2017-02-24T09:26:53Z</dc:date>
    </item>
  </channel>
</rss>

