<?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: Mass erasing paged memory</title>
    <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Mass-erasing-paged-memory/m-p/248088#M9638</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;The code was actually fine.&amp;nbsp; My error was in reading the values after the mass erase.&amp;nbsp; Thanks to all!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 11 Jun 2013 18:02:32 GMT</pubDate>
    <dc:creator>robynyost</dc:creator>
    <dc:date>2013-06-11T18:02:32Z</dc:date>
    <item>
      <title>Mass erasing paged memory</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Mass-erasing-paged-memory/m-p/248082#M9632</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Chip: MC9S12C128&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have a program that resides in both paged and unpaged memory.&amp;nbsp; The program loads fine through the IDE.&amp;nbsp; However, I am working on a CAN bootloader and being able to program the chip through a GUI using the P&amp;amp;E unit_12z libraries. Right now, I am having problems with erasing the second page of paged memory.&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I do a mass erase command.&amp;nbsp; That erases the unpaged memory and the first page of paged memory.&amp;nbsp; That makes since as that is all that is in flash.&amp;nbsp; I have tried to set the PPAGE register to 0x39 before a mass erase to erase the second page of paged memory but it doesn't have any effect.&amp;nbsp; Is there something I am missing?&amp;nbsp; How do you mass erase the paged memory?&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The code snipet is:&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV class="j-rte-table"&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD style=""&gt;// Mass erase flash&lt;/TD&gt;&lt;TD style=""&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD style=""&gt; write_data_byte(0x100, 0x49);&lt;/TD&gt;&lt;TD style=""&gt;// set FCLKDIV clock divider&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD style=""&gt; write_data_byte(0x103, 0);&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD style=""&gt;// FCFNG select block 0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD style=""&gt; write_data_byte(0x102, 0x10);&lt;/TD&gt;&lt;TD style=""&gt;// set the WRALL bit in FTSTMOD to affect all blocks&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD style=""&gt; write_data_byte(0x104, 0xFF);&lt;/TD&gt;&lt;TD style=""&gt;// FPROT all protection disabled&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD style=""&gt; write_data_byte(0x105, 0x30);&lt;/TD&gt;&lt;TD style=""&gt;// clear PVIOL and ACCERR in FSTAT register&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD style=""&gt; write_data_byte(0x106, 0x41);&lt;/TD&gt;&lt;TD style=""&gt;// write MASS ERASE command in FCMD register&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD style=""&gt; write_data_byte(0x105, 0x80);&lt;/TD&gt;&lt;TD style=""&gt;// clear CBEIF in FSTAT register to execute the command&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD style=""&gt; Sleep(2000);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;/TD&gt;&lt;TD style=""&gt;// wait for command to complete&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV class="j-rte-table"&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD style=""&gt; // Reprogram Security byte to Unsecure state&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD style=""&gt; write_data_byte(0x100, 0x49);&lt;/TD&gt;&lt;TD style=""&gt;// set FCLKDIV clock divider&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD style=""&gt; write_data_byte(0x103, 0);&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD style=""&gt;// FCFNG select block 0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD style=""&gt; write_data_byte(0x104, 0xFF);&lt;/TD&gt;&lt;TD style=""&gt;&lt;P&gt;// FPROT all protection disabled&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD style=""&gt; write_data_byte(0x105, 0x30);&lt;/TD&gt;&lt;TD style=""&gt;// clear PVIOL and ACCERR in FSTAT register&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD style=""&gt; write_data_word(0xFF0E, 0xFFFE); // write security byte to "Unsecured" state&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD style=""&gt; write_data_byte(0x106, 0x20);&lt;/TD&gt;&lt;TD style=""&gt;// write MEMORY PROGRAM command in FCMD register&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD style=""&gt; write_data_byte(0x105, 0x80);&lt;/TD&gt;&lt;TD style=""&gt;// clear CBEIF in FSTAT register to execute the command&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD style=""&gt; Sleep(2000);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;/TD&gt;&lt;TD style=""&gt;// wait for command to complete&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;DIV class="j-rte-table"&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD style=""&gt;&lt;/TD&gt;&lt;TD style=""&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV class="j-rte-table"&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD style=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD style=""&gt;// Mass erase flash&lt;/TD&gt;&lt;TD style=""&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD style=""&gt; write_data_byte(0x100, 0x49);&lt;/TD&gt;&lt;TD style=""&gt;// set FCLKDIV clock divider&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD style=""&gt; write_data_byte(0x103, 0);&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD style=""&gt;// FCFNG select block 0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD style=""&gt; write_data_byte(0x102, 0x10);&lt;/TD&gt;&lt;TD style=""&gt;// set the WRALL bit in FTSTMOD to affect all blocks&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD style=""&gt; write_data_byte(0x104, 0xFF);&lt;/TD&gt;&lt;TD style=""&gt;// FPROT all protection disabled&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD style=""&gt; write_data_byte(0x105, 0x30);&lt;/TD&gt;&lt;TD style=""&gt;// clear PVIOL and ACCERR in FSTAT register&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD colspan="1" style=""&gt;&lt;/TD&gt;&lt;TD colspan="1" style=""&gt;write_data_byte(0x30, 0x39);&lt;/TD&gt;&lt;TD colspan="1" style=""&gt;// Set the PPAGE register to the next page&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD style=""&gt; write_data_byte(0x106, 0x41);&lt;/TD&gt;&lt;TD style=""&gt;// write MASS ERASE command in FCMD register&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD style=""&gt; write_data_byte(0x105, 0x80);&lt;/TD&gt;&lt;TD style=""&gt;// clear CBEIF in FSTAT register to execute the command&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD style=""&gt; Sleep(2000);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;/TD&gt;&lt;TD style=""&gt;// wait for command to complete&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;DIV class="j-rte-table"&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD style=""&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD style=""&gt; bReturn = set_speed();&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 20 May 2013 20:16:18 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Mass-erasing-paged-memory/m-p/248082#M9632</guid>
      <dc:creator>robynyost</dc:creator>
      <dc:date>2013-05-20T20:16:18Z</dc:date>
    </item>
    <item>
      <title>Re: Mass erasing paged memory</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Mass-erasing-paged-memory/m-p/248083#M9633</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;To speedup debugging and memory browsing, Hiwave debugger caches contents of flash memory. To see what really happens after you execute your erase and program routines, you need to go find Memory mapping dialog in Hiwave debugger and set some checkboxes to enable flash memory refreshing when you halt your MCU.&lt;/P&gt;&lt;P&gt;Mass erase, when it succeeds, erases all the flash on S12C. It can't erase just one flash page or some pages, but all the flash. Also, mass erase command won't erase anything in case any part of flash is write protected, and this makes it not useful for application in bootloader. Good bootloader should be never erased from flash memory, because bad things happen and MCU can be unpowered or reset while bootloader is erased, which will brick your product. Instead of mass erase you should erase your application code sector by sector.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You mass erase snipped has a bug. Even for erase command you need to write dummy data to flash array, like you do when programming security byte&lt;/P&gt;&lt;P&gt;write_data_word(0xFF0E, 0xFFFE); // write security byte to "Unsecured" state.&lt;/P&gt;&lt;P&gt;When using secor erase command, writing to particular flash memory sector specifies which sector of flash is going to be erased.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You can't unprotect flash when operating in normal mode, so you need to review this&lt;/P&gt;&lt;P&gt; write_data_byte(0x104, 0xFF); // FPROT all protection disabled&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Don't forget that flash memory is not readable while any flash command is in progress, or when you are applying backdoor unsecure key. So you need to move part of your code to RAM and execute from there. Use forums search to find how to do that. &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 21 May 2013 07:06:57 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Mass-erasing-paged-memory/m-p/248083#M9633</guid>
      <dc:creator>kef</dc:creator>
      <dc:date>2013-05-21T07:06:57Z</dc:date>
    </item>
    <item>
      <title>Re: Mass erasing paged memory</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Mass-erasing-paged-memory/m-p/248084#M9634</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you for the help!&amp;nbsp; My problem is really two fold.&amp;nbsp; 1) Programming everything (including bootloader) through the BDM using a GUI.&amp;nbsp; 2) Writing the CAN bootloader.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This is mainly about #1.&amp;nbsp; The code was originally this:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;// Mass erase flash&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; write_data_byte(0x100, 0x49);&lt;/TD&gt;&lt;TD&gt;// set FCLKDIV clock divider&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; write_data_byte(0x103, 0);&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;// FCFNG select block 0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; write_data_byte(0x102, 0x10);&lt;/TD&gt;&lt;TD&gt;// set the WRALL bit in FTSTMOD to affect all blocks&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; write_data_byte(0x104, 0xFF);&lt;/TD&gt;&lt;TD&gt;// FPROT all protection disabled&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; write_data_byte(0x105, 0x30);&lt;/TD&gt;&lt;TD&gt;// clear PVIOL and ACCERR in FSTAT register&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD colspan="1"&gt;&lt;/TD&gt;&lt;TD colspan="1"&gt;write_data_byte(0x4000, 0xFF); &lt;/TD&gt;&lt;TD colspan="1"&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; write_data_byte(0x106, 0x41);&lt;/TD&gt;&lt;TD&gt;// write MASS ERASE command in FCMD register&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; write_data_byte(0x105, 0x80);&lt;/TD&gt;&lt;TD&gt;// clear CBEIF in FSTAT register to execute the command&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; Sleep(2000);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;/TD&gt;&lt;TD&gt;// wait for command to complete&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; // Reprogram Security byte to Unsecure state&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; write_data_byte(0x100, 0x49);&lt;/TD&gt;&lt;TD&gt;// set FCLKDIV clock divider&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; write_data_byte(0x103, 0);&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;// FCFNG select block 0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; write_data_byte(0x104, 0xFF);&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;// FPROT all protection disabled&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; write_data_byte(0x105, 0x30);&lt;/TD&gt;&lt;TD&gt;// clear PVIOL and ACCERR in FSTAT register&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; write_data_word(0xFF0E, 0xFFFE); // write security byte to "Unsecured" state&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; write_data_byte(0x106, 0x20);&lt;/TD&gt;&lt;TD&gt;// write MEMORY PROGRAM command in FCMD register&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; write_data_byte(0x105, 0x80);&lt;/TD&gt;&lt;TD&gt;// clear CBEIF in FSTAT register to execute the command&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; Sleep(2000);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;The problem is that it is NOT erasing everything.&amp;nbsp; I read the data bytes after this to verify.&amp;nbsp; 0x400 to 0x7FFF is erased.&amp;nbsp; 0xC000 to 0xFFFF is erased.&amp;nbsp; 0x388000 to 0x38BFFF is erased.&amp;nbsp; But 0x398000 to 0x39BFFF is NOT erased.&amp;nbsp; It is erasing most but not all of the memory.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;I have tried to do a sector erase too.&amp;nbsp; That doesn't seem to work either.&amp;nbsp; Could it be the chip?&amp;nbsp; Or is there something special to erase the paged memory???&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;I'm still confused....&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 22 May 2013 15:27:30 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Mass-erasing-paged-memory/m-p/248084#M9634</guid>
      <dc:creator>robynyost</dc:creator>
      <dc:date>2013-05-22T15:27:30Z</dc:date>
    </item>
    <item>
      <title>Re: Mass erasing paged memory</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Mass-erasing-paged-memory/m-p/248085#M9635</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;UL&gt;&lt;LI&gt;My problem is really two fold.&amp;nbsp; 1) Programming everything (including bootloader) through the BDM using a GUI. &lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;You are on the wrong track then. For secure application, bootloader should be programmed once and write protected.&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;// Mass erase flash&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; write_data_byte(0x100, 0x49); // set FCLKDIV clock divider &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; write_data_byte(0x103, 0);&amp;nbsp;&amp;nbsp;&amp;nbsp; // FCFNG select block 0 &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; write_data_byte(0x102, 0x10); // set the WRALL bit in FTSTMOD to affect all blocks &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; write_data_byte(0x104, 0xFF); // FPROT all protection disabled &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; write_data_byte(0x105, 0x30); // clear PVIOL and ACCERR in FSTAT register &lt;/LI&gt;&lt;LI&gt;&lt;BR /&gt; write_data_byte(0x4000, 0xFF);&amp;nbsp;&amp;nbsp; &lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;^^ this last line is a new bug. You can't write to flash byte or misaligned word.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; write_data_byte(0x106, 0x41); // write MASS ERASE command in FCMD register &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; write_data_byte(0x105, 0x80); // clear CBEIF in FSTAT register to execute the command &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sleep(2000);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // wait for command to complete &lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Instead of waiting here for fixed? amount of time here, you should wait for CCIF&amp;nbsp; flag. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;&lt;BR /&gt;The problem is that it is NOT erasing everything.&amp;nbsp; I read the data bytes after this to verify.&amp;nbsp; 0x400 to 0x7FFF is erased.&amp;nbsp; 0xC000 to 0xFFFF is erased.&amp;nbsp; 0x388000 to 0x38BFFF is erased.&amp;nbsp; But 0x398000 to 0x39BFFF is NOT erased.&amp;nbsp; It is erasing most but not all of the memory.&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Did you check memory mapping in debugger? Isn't debugger fooling you showing you what was there in flash at initial flash programming over BDM? Again, mass erase on S12C128 either fails to erase anything, or erases everything.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;I have tried to do a sector erase too.&amp;nbsp; That doesn't seem to work either. &lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;It could be the same effect of debugger not refreshing memory views from device memory. &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 24 May 2013 05:19:36 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Mass-erasing-paged-memory/m-p/248085#M9635</guid>
      <dc:creator>kef</dc:creator>
      <dc:date>2013-05-24T05:19:36Z</dc:date>
    </item>
    <item>
      <title>Re: Mass erasing paged memory</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Mass-erasing-paged-memory/m-p/248086#M9636</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I really do appreciate the help.&amp;nbsp; I am still having problems.&amp;nbsp; I have changed what you suggested.&amp;nbsp; It now reads:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;/ Mass erase flash&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; write_data_byte(0x100, 0x49);&lt;/TD&gt;&lt;TD&gt;// set FCLKDIV clock divider&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; write_data_byte(0x103, 0);&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;// FCFNG select block 0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; write_data_byte(0x102, 0x10);&lt;/TD&gt;&lt;TD&gt;// set the WRALL bit in FTSTMOD to affect all blocks&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; write_data_byte(0x104, 0xFF);&lt;/TD&gt;&lt;TD&gt;// FPROT all protection disabled&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; write_data_byte(0x105, 0x30);&lt;/TD&gt;&lt;TD&gt;// clear PVIOL and ACCERR in FSTAT register&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD colspan="1"&gt;&lt;/TD&gt;&lt;TD colspan="1"&gt;write_data_word(0x4000, 0xFFFF); &lt;/TD&gt;&lt;TD colspan="1"&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; write_data_byte(0x106, 0x41);&lt;/TD&gt;&lt;TD&gt;// write MASS ERASE command in FCMD register&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; write_data_byte(0x105, 0x80);&lt;/TD&gt;&lt;TD&gt;// clear CBEIF in FSTAT register to execute the command&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;&lt;P&gt;UINT8 cFSTAT = read_data_byte(0x105);&lt;/P&gt;&lt;P&gt;while ((cFSTAT &amp;amp; 0xC0) == 0)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cFSTAT = read_data_byte(0x105);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; // Reprogram Security byte to Unsecure state&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; write_data_byte(0x100, 0x49);&lt;/TD&gt;&lt;TD&gt;// set FCLKDIV clock divider&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; write_data_byte(0x103, 0);&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;// FCFNG select block 0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; write_data_byte(0x104, 0xFF);&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;// FPROT all protection disabled&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; write_data_byte(0x105, 0x30);&lt;/TD&gt;&lt;TD&gt;// clear PVIOL and ACCERR in FSTAT register&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; write_data_word(0xFF0E, 0xFFFE); // write security byte to "Unsecured" state&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; write_data_byte(0x106, 0x20);&lt;/TD&gt;&lt;TD&gt;// write MEMORY PROGRAM command in FCMD register&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt; write_data_byte(0x105, 0x80);&lt;/TD&gt;&lt;TD&gt;// clear CBEIF in FSTAT register to execute the command&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;&lt;P&gt;cFSTAT = read_data_byte(0x105);&lt;/P&gt;&lt;P&gt;while ((cFSTAT &amp;amp; 0xC0) == 0)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cFSTAT = read_data_byte(0x105);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am getting the same results.&amp;nbsp; I am not going through the HIWAVE program.&amp;nbsp; I am using the P&amp;amp;E multilink unit12z libraries.&amp;nbsp; I have no idea what they do under the covers.&amp;nbsp; After all this is over, I am reading the words out of flash and it is cleared for all memory addresses except for page 0x39.&amp;nbsp; Any ideas??&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 24 May 2013 17:43:31 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Mass-erasing-paged-memory/m-p/248086#M9636</guid>
      <dc:creator>robynyost</dc:creator>
      <dc:date>2013-05-24T17:43:31Z</dc:date>
    </item>
    <item>
      <title>Re: Mass erasing paged memory</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Mass-erasing-paged-memory/m-p/248087#M9637</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;There is procedure from datasheet:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Special single chip erase and unsecure sequence:&lt;/P&gt;&lt;P&gt;1. Reset into special single chip mode.&lt;/P&gt;&lt;P&gt;2. Write an appropriate value to the ECLKDIV register for correct timing.&lt;/P&gt;&lt;P&gt;3. Write 0xFF to the EPROT register to disable protection.&lt;/P&gt;&lt;P&gt;4. Write 0x30 to the ESTAT register to clear the PVIOL and ACCERR bits.&lt;/P&gt;&lt;P&gt;5. Write 0x0000 to the EDATA register (0x011A–0x011B).&lt;/P&gt;&lt;P&gt;6. Write 0x0000 to the EADDR register (0x0118–0x0119).&lt;/P&gt;&lt;P&gt;7. Write 0x41 (mass erase) to the ECMD register.&lt;/P&gt;&lt;P&gt;8. Write 0x80 to the ESTAT register to clear CBEIF.&lt;/P&gt;&lt;P&gt;9. Write an appropriate value to the FCLKDIV register for correct timing.&lt;/P&gt;&lt;P&gt;10. Write 0x00 to the FCNFG register to select Flash block 0.&lt;/P&gt;&lt;P&gt;11. Write 0x10 to the FTSTMOD register (0x0102) to set the WRALL bit, so the following writes&lt;/P&gt;&lt;P&gt;affect all Flash blocks.&lt;/P&gt;&lt;P&gt;12. Write 0xFF to the FPROT register to disable protection.&lt;/P&gt;&lt;P&gt;13. Write 0x30 to the FSTAT register to clear the PVIOL and ACCERR bits.&lt;/P&gt;&lt;P&gt;14. Write 0x0000 to the FDATA register (0x010A–0x010B).&lt;/P&gt;&lt;P&gt;15. Write 0x0000 to the FADDR register (0x0108–0x0109).&lt;/P&gt;&lt;P&gt;16. Write 0x41 (mass erase) to the FCMD register.&lt;/P&gt;&lt;P&gt;17. Write 0x80 to the FSTAT register to clear CBEIF.&lt;/P&gt;&lt;P&gt;18. Wait until all CCIF flags are set.&lt;/P&gt;&lt;P&gt;19. Reset back into special single chip mode.&lt;/P&gt;&lt;P&gt;20. Write an appropriate value to the FCLKDIV register for correct timing.&lt;/P&gt;&lt;P&gt;21. Write 0x00 to the FCNFG register to select Flash block 0.&lt;/P&gt;&lt;P&gt;22. Write 0xFF to the FPROT register to disable protection.&lt;/P&gt;&lt;P&gt;23. Write 0xFFBE to Flash address 0xFF0E.&lt;/P&gt;&lt;P&gt;24. Write 0x20 (program) to the FCMD register.&lt;/P&gt;&lt;P&gt;25. Write 0x80 to the FSTAT register to clear CBEIF.&lt;/P&gt;&lt;P&gt;26. Wait until the CCIF flag in FSTAT is are set.&lt;/P&gt;&lt;P&gt;27. Reset into any mode.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Anyway I would like to recommend “copy” mass erase procedure from PEmicro command file (in attachment).&lt;/P&gt;&lt;P&gt;I think that there could be some issue with FAIL flag in FSTAT register.&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 31 May 2013 13:09:32 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Mass-erasing-paged-memory/m-p/248087#M9637</guid>
      <dc:creator>RadekS</dc:creator>
      <dc:date>2013-05-31T13:09:32Z</dc:date>
    </item>
    <item>
      <title>Re: Mass erasing paged memory</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Mass-erasing-paged-memory/m-p/248088#M9638</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;The code was actually fine.&amp;nbsp; My error was in reading the values after the mass erase.&amp;nbsp; Thanks to all!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 11 Jun 2013 18:02:32 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Mass-erasing-paged-memory/m-p/248088#M9638</guid>
      <dc:creator>robynyost</dc:creator>
      <dc:date>2013-06-11T18:02:32Z</dc:date>
    </item>
  </channel>
</rss>

