<?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: The user app doesn't run with USB MSD bootloader, but it works in a debugger in Kinetis Microcontrollers</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/The-user-app-doesn-t-run-with-USB-MSD-bootloader-but-it-works-in/m-p/244146#M6237</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;By moving boot_app() to very first place before pll_init() of bootloader, the dowloaded image works.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;It seems the setup of MCG order really makes sense. It can not be setup twice?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 29 Oct 2013 05:11:19 GMT</pubDate>
    <dc:creator>kai_liu</dc:creator>
    <dc:date>2013-10-29T05:11:19Z</dc:date>
    <item>
      <title>The user app doesn't run with USB MSD bootloader, but it works in a debugger</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/The-user-app-doesn-t-run-with-USB-MSD-bootloader-but-it-works-in/m-p/244145#M6236</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;With my USB MSD bootloader, I can download S-rec file successfully. The image file is located at correct address (0x8000) with right content. That could be verified in IAR memory Window.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;But it doesn't run as my expectation.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Since IAR supports &lt;STRONG&gt;debug without download&lt;/STRONG&gt;. And obviously, both bootloader and user code are already programmed into flash memory. So I can debug different program with same flash image.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The main() of user code is not startup code. So I using two breakpoints to enforce debugger to stop at __startup, not _main. It will complain there are too many breakpoints, choose stop to prevent it going to main. By this means, I can debug user code starts at 0x8000.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So I load MSD bootloader in debugger, I found the function boot_app() works. The SP/PC are setup via R0/R1, and it jumps to user application code, runs through regular __startup, and common_startup, and stops at following step.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mcg_clk_hz = pll_init(CLK0_FREQ_HZ,&amp;nbsp; /* CLKIN0 frequency */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LOW_POWER,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Set the oscillator for low power mode */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CLK0_TYPE,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Crystal or canned oscillator clock input */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PLL0_PRDIV,&amp;nbsp;&amp;nbsp;&amp;nbsp; /* PLL predivider value */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PLL0_VDIV,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* PLL multiplier */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCGOUT);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Use the output from this PLL as the MCGOUT */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Check the value returned from pll_init() to make sure there wasn't an error */&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (mcg_clk_hz &amp;lt; 0x100)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // &lt;SPAN style="color: #0000ff;"&gt;It returns as 0x01, presents as FEI&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(1);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;BTW, the user code is FRDM_KL25ZDemo, which comes from FRDM, linked with modified icf.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I double checked my init code in bootloader, it seems pll_init() has been called for USB clock setup before jumping to user code.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Is that make sense?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Maybe we should take care SP/PC/SCB_VTOR as well as MCG and their setup orders?&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;BR /&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;I can share my sources if anyone wants to help.&lt;BR /&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 29 Oct 2013 05:01:33 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/The-user-app-doesn-t-run-with-USB-MSD-bootloader-but-it-works-in/m-p/244145#M6236</guid>
      <dc:creator>kai_liu</dc:creator>
      <dc:date>2013-10-29T05:01:33Z</dc:date>
    </item>
    <item>
      <title>Re: The user app doesn't run with USB MSD bootloader, but it works in a debugger</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/The-user-app-doesn-t-run-with-USB-MSD-bootloader-but-it-works-in/m-p/244146#M6237</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;By moving boot_app() to very first place before pll_init() of bootloader, the dowloaded image works.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;It seems the setup of MCG order really makes sense. It can not be setup twice?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 29 Oct 2013 05:11:19 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/The-user-app-doesn-t-run-with-USB-MSD-bootloader-but-it-works-in/m-p/244146#M6237</guid>
      <dc:creator>kai_liu</dc:creator>
      <dc:date>2013-10-29T05:11:19Z</dc:date>
    </item>
  </channel>
</rss>

