<?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 Flash Programming in Kinetis Microcontrollers</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Flash-Programming/m-p/396950#M21889</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I used the SWD to program flash in KL05 demo board. In FCCOB I set Program Longword command. But sometimes in several words they return access error (FSTAT[ACCERR]); The read data is 0xFFFFFFFF. I must do the command again for those words. then it is OK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 12 Jun 2015 18:12:05 GMT</pubDate>
    <dc:creator>东升王</dc:creator>
    <dc:date>2015-06-12T18:12:05Z</dc:date>
    <item>
      <title>Flash Programming</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Flash-Programming/m-p/396950#M21889</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I used the SWD to program flash in KL05 demo board. In FCCOB I set Program Longword command. But sometimes in several words they return access error (FSTAT[ACCERR]); The read data is 0xFFFFFFFF. I must do the command again for those words. then it is OK.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 12 Jun 2015 18:12:05 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Flash-Programming/m-p/396950#M21889</guid>
      <dc:creator>东升王</dc:creator>
      <dc:date>2015-06-12T18:12:05Z</dc:date>
    </item>
    <item>
      <title>Re: Flash Programming</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Flash-Programming/m-p/396951#M21890</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Wang Dongsheng,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Please be suggested to check CCIF first to make sure that there is no flash command is complete and then write 1 to this bit to launch the next longword program command.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If the problem still remains, then, please contact me again!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 16 Jun 2015 06:11:12 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Flash-Programming/m-p/396951#M21890</guid>
      <dc:creator>Rick_Li</dc:creator>
      <dc:date>2015-06-16T06:11:12Z</dc:date>
    </item>
    <item>
      <title>Re: Flash Programming</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Flash-Programming/m-p/396952#M21891</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Li Yong&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Actually I already did that in my code.&amp;nbsp; Here are the some code. Sometimes it works well. sometimes in some words it return access error. these position always are 0xffffffff. But if I rewrite these words. it can get the right value.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#define FTFA_STAT_ERROR_MASK&amp;nbsp;&amp;nbsp; 0x70&lt;/P&gt;&lt;P&gt;#define FTFA_STAT_CCIF&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; 0x80&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;static uint32_t writeWordToFlash(uint32_t addr, uint32_t data, uint32_t opt)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int i;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t status;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t val;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint8_t *chVar = (uint8_t *)&amp;amp;data;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; hw_ftfa_fccob_t fccob;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(addr&amp;amp;0x03)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("Invalid address\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return DAP_ERROR_ADDRESS;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; val = readMem(REGS_FTFA_BASE);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*Clear the old error */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if((val &amp;amp; FTFA_STAT_ACCERR_MASK) || (val &amp;amp; FTFA_STAT_FPVIOL_MASK) || (val &amp;amp; FTFA_STAT_RDCOLERR_MASK))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writeMem(REGS_FTFA_BASE, FTFA_STAT_ERROR_MASK);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(opt==FTFA_CMD_PROGRAM_LONGWORD)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Prepare the FTFA FCCOB */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fccob.FCCOB0 = FTFA_CMD_PROGRAM_LONGWORD;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fccob.FCCOB1 = (uint8_t)((addr &amp;gt;&amp;gt; 16) &amp;amp; 0xff);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fccob.FCCOB2 = (uint8_t)((addr &amp;gt;&amp;gt; 8) &amp;amp; 0xff);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fccob.FCCOB3 = (uint8_t)(addr &amp;amp; 0xff);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fccob.FCCOB4 = chVar[3];&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fccob.FCCOB5 = chVar[2];&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fccob.FCCOB6 = chVar[1];&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fccob.FCCOB7 = chVar[0];&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; /* Write FCFOC */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writeMem(FTFA_FCCOB_BASE, *(uint32_t *)(&amp;amp;fccob.FCCOB3));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writeMem(FTFA_FCCOB_BASE+4, *(uint32_t *)(&amp;amp;fccob.FCCOB7));&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if(opt==FTFA_CMD_PROGRAM_CHECK)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*check the flash*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fccob.FCCOB0 = FTFA_CMD_PROGRAM_CHECK;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fccob.FCCOB1 = (uint8_t)((addr &amp;gt;&amp;gt; 16) &amp;amp; 0xff);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fccob.FCCOB2 = (uint8_t)((addr &amp;gt;&amp;gt; 8) &amp;amp; 0xff);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fccob.FCCOB3 = (uint8_t)(addr &amp;amp; 0xff);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fccob.FCCOB4 = 0x2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fccob.FCCOB8 = chVar[3];&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fccob.FCCOB9 = chVar[2];&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fccob.FCCOBA = chVar[1];&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fccob.FCCOBB = chVar[0];&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; /* Write FCFOC */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writeMem(FTFA_FCCOB_BASE, *(uint32_t *)(&amp;amp;fccob.FCCOB3));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writeMem(FTFA_FCCOB_BASE+4, *(uint32_t *)(&amp;amp;fccob.FCCOB7));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writeMem(FTFA_FCCOB_BASE+8, *(uint32_t *)(&amp;amp;fccob.FCCOBB));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Start command */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writeAP(AP_CSW, AP_CSW_8BIT_TRANSFER);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writeMem(REGS_FTFA_BASE, FTFA_STAT_CCIF);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writeAP(AP_CSW, AP_CSW_DEFAULT);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Wait for done */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i=0; i&amp;lt;WAIT_FTFA_CCIF_COUNT; i++)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; val = readMem(REGS_FTFA_BASE);&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; if(val&amp;amp;FTFA_STAT_ACCERR_MASK)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&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; printf("Access Error. val = 0x%08x, i = %d, opt = %d\n", val, i, opt);&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; return DAP_ERROR_ACCESS;&lt;/P&gt;&lt;P&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(val&amp;amp;FTFA_STAT_FPVIOL_MASK)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &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; printf("Protection error. val = 0x%08x, i = %d, opt = %d\n", val, i, opt);&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; return DAP_ERROR_FPVIOL;&lt;/P&gt;&lt;P&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(val&amp;amp;FTFA_STAT_RDCOLERR_MASK)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&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; printf("Read collision error. val = 0x%08x, i = %d, opt = %d\n", val, i, opt);&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; return DAP_ERROR_RDCOLERR;&lt;/P&gt;&lt;P&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(val&amp;amp;FTFA_STAT_ERROR_MGSTAT0)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&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; printf("MGSTAT0 error. val = 0x%08x, i = %d, opt = %d\n", val, i, opt);&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; return DAP_ERROR_MGSTAT0;&lt;/P&gt;&lt;P&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if((val&amp;amp;0xF0)==FTFA_STAT_CCIF)&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; break;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return SWD_ERROR_OK;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 16 Jun 2015 16:28:03 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Flash-Programming/m-p/396952#M21891</guid>
      <dc:creator>东升王</dc:creator>
      <dc:date>2015-06-16T16:28:03Z</dc:date>
    </item>
    <item>
      <title>Re: Flash Programming</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Flash-Programming/m-p/396953#M21892</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Li Yong&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Actually I already did that in my code.  Here are the some code. &lt;/P&gt;&lt;P&gt;Sometimes it works well. sometimes in some words it return access error. &lt;/P&gt;&lt;P&gt;these position always are 0xffffffff. But if I rewrite these words. it &lt;/P&gt;&lt;P&gt;can get the right value.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#define FTFA_STAT_ERROR_MASK   0x70&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#define FTFA_STAT_CCIF                   0x80&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;static uint32_t writeWordToFlash(uint32_t addr, uint32_t data, uint32_t opt)&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 i;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;     uint32_t status;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;     uint32_t val;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;     uint8_t *chVar = (uint8_t *)&amp;amp;data;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;     ftfa_fccob_t fccob;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;     if(addr&amp;amp;0x03)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;     {&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         printf("Invalid address\n");&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         return DAP_ERROR_ADDRESS;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;     }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;     val = readMem(REGS_FTFA_BASE);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;     /*Clear the old error */&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;     if((val &amp;amp; FTFA_STAT_ACCERR_MASK) || (val &amp;amp; FTFA_STAT_FPVIOL_MASK) &lt;/P&gt;&lt;P&gt;|| (val &amp;amp; FTFA_STAT_RDCOLERR_MASK))&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         writeMem(REGS_FTFA_BASE, FTFA_STAT_ERROR_MASK);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;     if(opt==FTFA_CMD_PROGRAM_LONGWORD)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;     {&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         /* Prepare the FTFA FCCOB */&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         fccob.FCCOB0 = FTFA_CMD_PROGRAM_LONGWORD;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         fccob.FCCOB1 = (uint8_t)((addr &amp;gt;&amp;gt; 16) &amp;amp; 0xff);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         fccob.FCCOB2 = (uint8_t)((addr &amp;gt;&amp;gt; 8) &amp;amp; 0xff);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         fccob.FCCOB3 = (uint8_t)(addr &amp;amp; 0xff);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         fccob.FCCOB4 = chVar[3];&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         fccob.FCCOB5 = chVar[2];&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         fccob.FCCOB6 = chVar[1];&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         fccob.FCCOB7 = chVar[0];&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         /* Write FCFOC */&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         writeMem(FTFA_FCCOB_BASE, *(uint32_t *)(&amp;amp;fccob.FCCOB3));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         writeMem(FTFA_FCCOB_BASE+4, *(uint32_t *)(&amp;amp;fccob.FCCOB7));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;     }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;     else if(opt==FTFA_CMD_PROGRAM_CHECK)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;     {&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         /&lt;STRONG&gt;check the flash&lt;/STRONG&gt;/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         fccob.FCCOB0 = FTFA_CMD_PROGRAM_CHECK;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         fccob.FCCOB1 = (uint8_t)((addr &amp;gt;&amp;gt; 16) &amp;amp; 0xff);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         fccob.FCCOB2 = (uint8_t)((addr &amp;gt;&amp;gt; 8) &amp;amp; 0xff);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         fccob.FCCOB3 = (uint8_t)(addr &amp;amp; 0xff);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         fccob.FCCOB4 = 0x2;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         fccob.FCCOB8 = chVar[3];&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         fccob.FCCOB9 = chVar[2];&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         fccob.FCCOBA = chVar[1];&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         fccob.FCCOBB = chVar[0];&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         /* Write FCFOC */&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         writeMem(FTFA_FCCOB_BASE, *(uint32_t *)(&amp;amp;fccob.FCCOB3));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         writeMem(FTFA_FCCOB_BASE+4, *(uint32_t *)(&amp;amp;fccob.FCCOB7));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         writeMem(FTFA_FCCOB_BASE+8, *(uint32_t *)(&amp;amp;fccob.FCCOBB));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;     }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;     /* Start command */&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;     writeAP(AP_CSW, AP_CSW_8BIT_TRANSFER);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;     writeMem(REGS_FTFA_BASE, FTFA_STAT_CCIF);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;     writeAP(AP_CSW, AP_CSW_DEFAULT);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;     /* Wait for done */&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;     for(i=0; i&amp;lt;WAIT_FTFA_CCIF_COUNT; i++)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;     {&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         val = readMem(REGS_FTFA_BASE);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         if(val&amp;amp;FTFA_STAT_ACCERR_MASK)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         {&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;             printf("Access Error. val = 0x%08x, i = %d, opt = %d\n", &lt;/P&gt;&lt;P&gt;val, i, opt);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;             return DAP_ERROR_ACCESS;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         }&lt;/P&gt;&lt;P&gt;      if(val&amp;amp;FTFA_STAT_FPVIOL_MASK)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         {&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;             printf("Protection error. val = 0x%08x, i = %d, opt = &lt;/P&gt;&lt;P&gt;%d\n", val, i, opt);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;             return DAP_ERROR_FPVIOL;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         if(val&amp;amp;FTFA_STAT_RDCOLERR_MASK)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         {&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;             printf("Read collision error. val = 0x%08x, i = %d, opt = &lt;/P&gt;&lt;P&gt;%d\n", val, i, opt);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;             return DAP_ERROR_RDCOLERR;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         if(val&amp;amp;FTFA_STAT_ERROR_MGSTAT0)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         {&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;             printf("MGSTAT0 error. val = 0x%08x, i = %d, opt = %d\n", &lt;/P&gt;&lt;P&gt;val, i, opt);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;             return DAP_ERROR_MGSTAT0;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;         if((val&amp;amp;0xF0)==FTFA_STAT_CCIF)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;             break;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;     }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;     return SWD_ERROR_OK;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 17 Jun 2015 13:59:44 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Flash-Programming/m-p/396953#M21892</guid>
      <dc:creator>东升王</dc:creator>
      <dc:date>2015-06-17T13:59:44Z</dc:date>
    </item>
  </channel>
</rss>

