<?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: problem about flash programing on 9S12XDT256! Thanks all! in S12 / MagniV Microcontrollers</title>
    <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/problem-about-flash-programing-on-9S12XDT256-Thanks-all/m-p/175393#M6117</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;First of all this is wrong:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; FSTAT = FSTAT | 0x80;&lt;/P&gt;&lt;P&gt;^^ this is attempt to clear not only CBEIF flag, but also all other FSTAT flags, which are set at the time CPU reads FSTAT.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;You flash routines, or atlest part of them from the moment you clear CBEIF until CCIF is set, should execute from always available memory like RAM. Flash array is not readable while it is being erased or programmed. XDT256 has more then one flash bank and this explains why your routines work from one page and don't work from another. Why wrong attempt to use 8-bit writes to flash array didn't hand or reset MCU is also clear (&lt;FONT color="#3366FF"&gt;uint8&amp;nbsp; FLASHDrv_SectorErase(&lt;FONT color="#ff0000"&gt;uint8 * __far addrFLASHPUW&lt;/FONT&gt;&lt;FONT color="#808080"&gt;). Doing so is banned by flash memory controller. You should see some error flags set.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#3366FF"&gt;&lt;FONT color="#808080"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#3366FF"&gt;&lt;FONT color="#808080"&gt;So either program/erase﻿ flash from different flash array or EEPROM, or run you routines or above mentioned part of them from RAM. Don't forget to disable interrupts if vectors or interrupt handlers are placed in array that you are going to program/erase.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#3366FF"&gt;&lt;FONT color="#808080"&gt;This thread explains how you could put your routine to RAM:&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#3366FF"&gt;&lt;FONT color="#808080"&gt;&lt;A __default_attr="96286" class="jive_macro jive_macro_thread default_title" href="https://community.freescale.com/thread/96286" jivemacro="thread" title="https://community.freescale.com/thread/96286"&gt;https://community.freescale.com/thread/96286&lt;/A&gt;﻿&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 20 Oct 2011 13:32:43 GMT</pubDate>
    <dc:creator>kef</dc:creator>
    <dc:date>2011-10-20T13:32:43Z</dc:date>
    <item>
      <title>problem about flash programing on 9S12XDT256! Thanks all!</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/problem-about-flash-programing-on-9S12XDT256-Thanks-all/m-p/175392#M6116</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;hi:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I wrote a flash driver like this:&lt;/P&gt;&lt;P&gt;In FlashDrv.c&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;#pragma CONST_SEG __GPAGE_SEG SYS_InfoFlash&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; volatile const uint16&amp;nbsp; FLASHDrv_dataTestUB; //定义在这里，用于占位&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;#pragma CONST_SEG DEFAULT&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;void&amp;nbsp; FLASHDrv_Init(void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(FCLKDIV_FDIVLD == 0)&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; FCLKDIV = 39;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;uint8&amp;nbsp; FLASHDrv_ProgramOneWord(uint16 * __far addrFLASHPUW , uint16 dataProgramUW)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(FSTAT_ACCERR == 1)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FSTAT = 0x10;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(FSTAT_PVIOL == 1)&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; FSTAT = 0x20;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;while (!FSTAT_CBEIF)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;FSTAT = 0x30;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;*addrFLASHPUW = dataProgramUW;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;FCMD = 0x20;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;FSTAT = FSTAT | 0x80;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;while (!FSTAT_CCIF)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if ((FSTAT_ACCERR == 1) || (FSTAT_PVIOL == 1))&lt;BR /&gt;&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; return 0;&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return&amp;nbsp; 1;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;uint8&amp;nbsp; FLASHDrv_SectorErase(uint16 * __far addrFLASHPUW)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (FSTAT_ACCERR == 1)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FSTAT = 0x10;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;if (FSTAT_PVIOL == 1)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FSTAT = 0x20;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;while (!FSTAT_CBEIF)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;FSTAT = 0x30;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;*addrFLASHPUW = 0xffff;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;FCMD = 0x40;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;FSTAT = FSTAT | 0x80;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;while (!FSTAT_CCIF)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;if ((FSTAT_ACCERR == 1) || (FSTAT_PVIOL == 1))&lt;BR /&gt;&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;return 0;&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;return 1;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;uint8&amp;nbsp; FLASHDrv_MassWrite(uint16 * __far addrFLASHPUW, uint16 numByteUW, uint16 * __far addrDataPUW)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint16&amp;nbsp; numCycleCntUW;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint16 *__far&amp;nbsp; addrFlashArrayPUW = addrFLASHPUW;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint16 *__far&amp;nbsp; addrDataArrayPUW = addrDataPUW;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint16 numDataUW = *addrDataArrayPUW;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint8&amp;nbsp; numReturn = 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if((((uint32)addrFLASHPUW%1024)==0)&amp;amp;&amp;amp;(numByteUW&amp;gt;0))&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #ff0000;"&gt;if(FLASHDrv_SectorErase(addrFLASHPUW))&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&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; if(numByteUW &amp;lt;= 2)&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; {&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; if(FLASHDrv_ProgramOneWord(addrFlashArrayPUW , numDataUW))&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; numReturn = 1;&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; else&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; numReturn = 0;&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; }&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; else&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; {&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; for(numCycleCntUW=2;numCycleCntUW&amp;lt;=numByteUW&lt;A href="http://freescale.i.lithium.com/i/smilies/16x16_smiley-wink.gif"&gt;&lt;IMG alt=":smileywink:" class="emoticon emoticon-smileywink" src="http://freescale.i.lithium.com/i/smilies/16x16_smiley-wink.gif" title="Smiley Wink" /&gt;&lt;/A&gt;&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; {&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; numCycleCntUW += 2;&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; if(FLASHDrv_ProgramOneWord(addrFlashArrayPUW , numDataUW))&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; addrFlashArrayPUW++;&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; addrDataArrayPUW++;&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; numDataUW = *addrDataArrayPUW;&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; else&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; numReturn = 0;&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; break;&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;&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; }&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; }&lt;BR /&gt;&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; else&lt;BR /&gt;&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; numReturn = 0;&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;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return&amp;nbsp; numReturn;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;In prm file&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;SYS_InfoFlash&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INTO&amp;nbsp; PAGE_FC;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;In main.c&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;typedef struct&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint16&amp;nbsp;&amp;nbsp; a;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint8&amp;nbsp;&amp;nbsp;&amp;nbsp; b;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sint16&amp;nbsp;&amp;nbsp; c;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint16&amp;nbsp;&amp;nbsp; d;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint16&amp;nbsp;&amp;nbsp; e;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint8&amp;nbsp;&amp;nbsp;&amp;nbsp; f;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint8&amp;nbsp;&amp;nbsp;&amp;nbsp; g;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32&amp;nbsp;&amp;nbsp; h;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;}flashteststruct;&lt;/P&gt;&lt;P&gt;flashteststruct&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; flashtest;&lt;BR /&gt;flashteststruct&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; flashtest2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;BR /&gt;void main(void)&lt;BR /&gt;{&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FLASHDrv_Init();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; flashtest.a = 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; flashtest.b = 3;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; flashtest.c = 0xfa03;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; flashtest.d = 0xc005;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; flashtest.e = 0xe043;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; flashtest.f = 0xbb;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; flashtest.g = 0xdc;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; flashtest.h = 0x1fa45;&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;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FLASHDrv_MassWrite((uint16 *__far)&amp;amp;FLASHDrv_dataTestUB,sizeof(flashteststruct), (uint16 *__far)&amp;amp;flashtest);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FLASHDrv_MassRead((uint8 *__far)&amp;amp;FLASHDrv_dataTestUB,sizeof(flashteststruct), (uint8 *__far)&amp;amp;flashtest2);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(;&lt;A href="http://freescale.i.lithium.com/i/smilies/16x16_smiley-wink.gif"&gt;&lt;IMG alt=":smileywink:" class="emoticon emoticon-smileywink" src="http://freescale.i.lithium.com/i/smilies/16x16_smiley-wink.gif" title="Smiley Wink" /&gt;&lt;/A&gt;&lt;BR /&gt;&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;&lt;/P&gt;&lt;P&gt;my problem is when&amp;nbsp;&amp;nbsp;i run this program , the program can not run into for(;&lt;A href="http://freescale.i.lithium.com/i/smilies/16x16_smiley-wink.gif"&gt;&lt;IMG alt=":smileywink:" class="emoticon emoticon-smileywink" src="http://freescale.i.lithium.com/i/smilies/16x16_smiley-wink.gif" title="Smiley Wink" /&gt;&lt;/A&gt; loop , the program is error, but when i allocate&lt;/P&gt;&lt;P&gt;SYS_InfoFlash&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INTO&amp;nbsp; PAGE_E2; in prm file, the program run ok. i debuged this program in step mode, i found function FLASHDrv_MassWrite((uint16 *__far)&amp;amp;FLASHDrv_dataTestUB,sizeof(flashteststruct), (uint16 *__far)&amp;amp;flashtest) can't run correctly when i allocate SYS_InfoFlash&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INTO&amp;nbsp; PAGE_FC. the program error is&amp;nbsp;in function &lt;SPAN style="color: #ff0000;"&gt;if(FLASHDrv_SectorErase(addrFLASHPUW))&lt;/SPAN&gt; .&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; another problem is when i changeed function &lt;SPAN style="color: #00ff00;"&gt;uint8&amp;nbsp; FLASHDrv_SectorErase(&lt;SPAN style="color: #ff0000;"&gt;uint16 * __far addrFLASHPUW&lt;/SPAN&gt;)&lt;/SPAN&gt; into&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #3366FF;"&gt;uint8&amp;nbsp; FLASHDrv_SectorErase(&lt;SPAN style="color: #ff0000;"&gt;uint8 * __far addrFLASHPUW&lt;/SPAN&gt;),&lt;/SPAN&gt; no matter i allocate SYS_InfoFlash&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INTO&amp;nbsp; PAGE_FC or&lt;/P&gt;&lt;P&gt;allocate SYS_InfoFlash&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INTO&amp;nbsp; PAGE_E2,&amp;nbsp; in two cases , the program all run correctly.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;can anyone help me about this program,&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;&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;&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; thanks!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 20 Oct 2011 08:33:58 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/problem-about-flash-programing-on-9S12XDT256-Thanks-all/m-p/175392#M6116</guid>
      <dc:creator>jeffzxg</dc:creator>
      <dc:date>2011-10-20T08:33:58Z</dc:date>
    </item>
    <item>
      <title>Re: problem about flash programing on 9S12XDT256! Thanks all!</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/problem-about-flash-programing-on-9S12XDT256-Thanks-all/m-p/175393#M6117</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;First of all this is wrong:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; FSTAT = FSTAT | 0x80;&lt;/P&gt;&lt;P&gt;^^ this is attempt to clear not only CBEIF flag, but also all other FSTAT flags, which are set at the time CPU reads FSTAT.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;You flash routines, or atlest part of them from the moment you clear CBEIF until CCIF is set, should execute from always available memory like RAM. Flash array is not readable while it is being erased or programmed. XDT256 has more then one flash bank and this explains why your routines work from one page and don't work from another. Why wrong attempt to use 8-bit writes to flash array didn't hand or reset MCU is also clear (&lt;FONT color="#3366FF"&gt;uint8&amp;nbsp; FLASHDrv_SectorErase(&lt;FONT color="#ff0000"&gt;uint8 * __far addrFLASHPUW&lt;/FONT&gt;&lt;FONT color="#808080"&gt;). Doing so is banned by flash memory controller. You should see some error flags set.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#3366FF"&gt;&lt;FONT color="#808080"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#3366FF"&gt;&lt;FONT color="#808080"&gt;So either program/erase﻿ flash from different flash array or EEPROM, or run you routines or above mentioned part of them from RAM. Don't forget to disable interrupts if vectors or interrupt handlers are placed in array that you are going to program/erase.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#3366FF"&gt;&lt;FONT color="#808080"&gt;This thread explains how you could put your routine to RAM:&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#3366FF"&gt;&lt;FONT color="#808080"&gt;&lt;A __default_attr="96286" class="jive_macro jive_macro_thread default_title" href="https://community.freescale.com/thread/96286" jivemacro="thread" title="https://community.freescale.com/thread/96286"&gt;https://community.freescale.com/thread/96286&lt;/A&gt;﻿&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 20 Oct 2011 13:32:43 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/problem-about-flash-programing-on-9S12XDT256-Thanks-all/m-p/175393#M6117</guid>
      <dc:creator>kef</dc:creator>
      <dc:date>2011-10-20T13:32:43Z</dc:date>
    </item>
  </channel>
</rss>

