<?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>S12 / MagniV MicrocontrollersのトピックRe: Flash Sector Erase Issue</title>
    <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Flash-Sector-Erase-Issue/m-p/707351#M14658</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;How do i verify this function is work?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ex. erase 0x7FF000~0x7FFFFF&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 30 Aug 2017 01:41:51 GMT</pubDate>
    <dc:creator>tafengchung</dc:creator>
    <dc:date>2017-08-30T01:41:51Z</dc:date>
    <item>
      <title>Flash Sector Erase Issue</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Flash-Sector-Erase-Issue/m-p/707349#M14656</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;My MCU is 9S12XEP100() , I try to Erase a part(sector) of Flash.&amp;nbsp;&lt;/P&gt;&lt;P&gt;when I erase address 0x7A0000, it's ok&lt;/P&gt;&lt;P&gt;but erase address 0x7C0000, program will run out(crash)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//************************************************************************************************************&lt;/P&gt;&lt;P&gt;source code as below :&amp;nbsp;&lt;/P&gt;&lt;P&gt;PFlash_EraseSector(address){&lt;/P&gt;&lt;P&gt;&amp;nbsp;while((FSTAT &amp;amp; FSTAT_CCIF_MASK) == 0){&lt;BR /&gt; _FEED_COP();&lt;BR /&gt; };&amp;nbsp; &lt;BR /&gt; FSTAT = 0x30; //clear ACCERR and PVIOL&lt;BR /&gt; &lt;BR /&gt; FCCOBIX = 0x00; &lt;BR /&gt; &lt;BR /&gt; FCCOB = 0x0A00 | ((address &amp;amp; 0x007F0000)&amp;gt;&amp;gt;16);&lt;BR /&gt; &lt;BR /&gt; FCCOBIX = 0x01;&lt;BR /&gt; &lt;BR /&gt; FCCOB = (address &amp;amp; 0x0000FFF8);&lt;BR /&gt; &lt;BR /&gt; FSTAT = 0x80; //launch command&lt;BR /&gt; while((FSTAT &amp;amp; FSTAT_CCIF_MASK) == 0){&lt;BR /&gt; _FEED_COP();&lt;BR /&gt; }; //wait for done&lt;BR /&gt; &lt;BR /&gt; if((FSTAT &amp;amp; (FSTAT_ACCERR_MASK | FSTAT_FPVIOL_MASK)) != 0)&lt;BR /&gt; return FlashEraseError; //error&lt;BR /&gt; else&lt;BR /&gt; return noErr;&amp;nbsp;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 25 Aug 2017 06:59:09 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Flash-Sector-Erase-Issue/m-p/707349#M14656</guid>
      <dc:creator>tafengchung</dc:creator>
      <dc:date>2017-08-25T06:59:09Z</dc:date>
    </item>
    <item>
      <title>Re: Flash Sector Erase Issue</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Flash-Sector-Erase-Issue/m-p/707350#M14657</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;the issue I see in the following lines:&lt;/P&gt;&lt;P&gt;while((FSTAT &amp;amp; FSTAT_CCIF_MASK) == 0){&lt;BR /&gt; _FEED_COP();&lt;BR /&gt; }; //wait for done&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;There is a rule for command processing: The command must not be executed from the Flash block containing space which is Erased/Written.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Because of this, the part of the code waiting for CCIF is executed out of the RAM to avoid accidental E/W of the bock from which the code is executed.&lt;/P&gt;&lt;P&gt;Plese look into an example&amp;nbsp;XEP100-FLASH-PFLASH-CW51.ZIP which can be found in &lt;A href="https://community.nxp.com/docs/DOC-329209"&gt;LAMA's S12XE unofficial examples&lt;/A&gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;There is function stored in RAM (see module main.c)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//==============================================================================&lt;BR /&gt;//PFLASH Send_Command&lt;BR /&gt;//==============================================================================&lt;BR /&gt;//this function is stored in nonbanked RAM memory. Must be called by JSR&lt;BR /&gt;//in C language:&lt;BR /&gt;//&amp;nbsp; {&lt;BR /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp; FSTAT_CCIF = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //launch command&lt;BR /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp; while(FSTAT_CCIF == 0); //wait for done&lt;BR /&gt;//&amp;nbsp; }&lt;BR /&gt;static unsigned char Send_Command[]=&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; 0x1C, 0x01, 0x06, 0x80, 0x1F, 0x01, 0x06, 0x80, 0xFB, 0x3D&lt;BR /&gt;};&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The function is then called:&lt;/P&gt;&lt;P&gt;asm JSR Send_Command;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Moreover, I suggest you to disable interrupts during execution of this critical part.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Note: Of course the CodeWarrior IDE provides also possibility to create critical function directly in the RAM space by means of placement "#pragma CODE_SEG DEFAULT_RAM". The you do not have to use assembler instructions. Moreover, the function can be called in standard way&amp;nbsp; PFLASH_Send_command(void); .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#pragma CODE_SEG DEFAULT_RAM&lt;/P&gt;&lt;P&gt;PFLASH_Send_command(void)&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm PSHC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // store CCR&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DisableInterrupts;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // asm SEI&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FSTAT_CCIF = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //launch command&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(FSTAT_CCIF == 0); //wait for done&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm PULC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // restore CCR&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;#pragma CODE_SEG DEFAULT&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;As you can see I made small modification and moved interrupts handling from flash command preparation function to this function.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have attache mentioned example also here.&lt;/P&gt;&lt;P&gt;Best regards,&lt;/P&gt;&lt;P&gt;Ladislav&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 25 Aug 2017 08:12:09 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Flash-Sector-Erase-Issue/m-p/707350#M14657</guid>
      <dc:creator>lama</dc:creator>
      <dc:date>2017-08-25T08:12:09Z</dc:date>
    </item>
    <item>
      <title>Re: Flash Sector Erase Issue</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Flash-Sector-Erase-Issue/m-p/707351#M14658</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;How do i verify this function is work?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ex. erase 0x7FF000~0x7FFFFF&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 30 Aug 2017 01:41:51 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Flash-Sector-Erase-Issue/m-p/707351#M14658</guid>
      <dc:creator>tafengchung</dc:creator>
      <dc:date>2017-08-30T01:41:51Z</dc:date>
    </item>
    <item>
      <title>Re: Flash Sector Erase Issue</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Flash-Sector-Erase-Issue/m-p/707352#M14659</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;I am not sure I understand you.&lt;/P&gt;&lt;P&gt;When you erase the given area sector by sector and then use command PFLASH_Erase_Verify_Section for entire erased part step by step you will get info about flash status erased/programmed. Simply read the command description in the data sheet.&lt;/P&gt;&lt;P&gt;In the example,I sent to you, there are lines&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;err = PFLASH_Erase_Verify_Section(0x700000, 4);&amp;nbsp;&amp;nbsp; //check if 4 words are erased - we will receive ERASED message&lt;BR /&gt;err = PFLASH_Program(0x700000, &amp;amp;buffer[0]);&amp;nbsp; //write some data&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;err = PFLASH_Erase_Verify_Section(0x700000, 4);&amp;nbsp;&amp;nbsp; //check if 4 words are erased - we will receive NON_ERASED message&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;which use what I has written.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best regards,&lt;/P&gt;&lt;P&gt;Ladislav&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 31 Aug 2017 10:15:42 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Flash-Sector-Erase-Issue/m-p/707352#M14659</guid>
      <dc:creator>lama</dc:creator>
      <dc:date>2017-08-31T10:15:42Z</dc:date>
    </item>
    <item>
      <title>Re: Flash Sector Erase Issue</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Flash-Sector-Erase-Issue/m-p/707353#M14660</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Ladislav,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;err = PFLASH_Erase_Verify_Section(0x700000, 4);&amp;nbsp;&amp;nbsp; //check if 4 words are erased - we will receive ERASED message&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Comments are wrong. Not 4 words but 4 phrases. One phrase is 8 bytes long. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Tafeng,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;if you wonder why don't you see changes in flash in Hiwave debugger, then the answer is because debugger treats it as read only memory and doesn't update from flash. You need to go&amp;nbsp;IIRC P&amp;amp;E Multilink menu, then debugger memory map, find your flash block of interest and change it to make updated when debugger stops.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Edward&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 01 Sep 2017 13:28:24 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Flash-Sector-Erase-Issue/m-p/707353#M14660</guid>
      <dc:creator>kef2</dc:creator>
      <dc:date>2017-09-01T13:28:24Z</dc:date>
    </item>
  </channel>
</rss>

