<?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>8-bit MicrocontrollersのトピックRe: Very critical problem to save data in SE8 Flash Memory!!!</title>
    <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Very-critical-problem-to-save-data-in-SE8-Flash-Memory/m-p/168854#M11122</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Should I use the burst command instead of using a normal program command, byte to byte?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sat, 11 Dec 2010 01:27:30 GMT</pubDate>
    <dc:creator>cremonezi</dc:creator>
    <dc:date>2010-12-11T01:27:30Z</dc:date>
    <item>
      <title>Very critical problem to save data in SE8 Flash Memory!!!</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Very-critical-problem-to-save-data-in-SE8-Flash-Memory/m-p/168850#M11118</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;In July, 2010, I had the freescale support about how to save data in SE8 Flash Memory. OK.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Actually, I have an application (temperature controller), which has 8 x 4 parameters (a const signed int vector in C language) to be saved in Flash Memory.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;When I program the hardware and enter the "save parameters mode" the first time, it works okay (I'm able to save the data in the memory).&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;However, when I turn it off and turn it on again (the hardware), I'm not able anymore to save the data.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I tried to debug the application, but it has been very difficult to find the problem.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;#include "FLASH.h"&lt;/P&gt;&lt;P&gt;/*&lt;BR /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;#pragma CODE_SEG DEFAULT&lt;BR /&gt;void flash_init(void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(!(FCDIV &amp;amp; 0x80))&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; if(FSTAT &amp;amp; 0x30)&amp;nbsp;&amp;nbsp;&amp;nbsp; //Check to see if FACCERR is set&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; FSTAT |= 0x30;&amp;nbsp; //write a 1 to FACCERR to clear&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; FCDIV = FLASH_CLOCK;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/*&lt;BR /&gt;&amp;nbsp;*&lt;BR /&gt;&amp;nbsp;*/&lt;BR /&gt;#pragma CODE_SEG FLASH_ROUTINES&lt;BR /&gt;unsigned char flash_cmd(unsigned int flashAddress, unsigned int flashDataCounter, unsigned char* pFlashDataPtr, unsigned char flashCommand)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Clear Flags if set*/&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FSTAT = 0x30;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; do&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; /* Wait for the Last Busrt Command to complete */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(!(FSTAT&amp;amp;0x80));&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; /* Write Data into Flash*/&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (*((volatile unsigned char *)(flashAddress++))) = *pFlashDataPtr;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pFlashDataPtr++;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Write Command */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FCMD = flashCommand;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _asm NOP;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _asm NOP;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _asm NOP;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _asm NOP;&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; /* Put FCBEF at 1 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FSTAT = 0x80;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Check if Flash Access Error or Protection Violation Error are Set */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(FSTAT &amp;amp; 0x30)&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; /* If so, finish the function returning 1 to indicate error */&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; return (1);&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; }while (--flashDataCounter);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* wait for the last command to complete */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while((FSTAT &amp;amp; 0x40)==0);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Return zero to indicate that the function executed Ok */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (0);&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;#pragma CODE_SEG DEFAULT&lt;/P&gt;&lt;P&gt;/******************************************************************************************************/&lt;BR /&gt;/******************************************************************************************************/&lt;BR /&gt;/******************************************************************************************************/&lt;BR /&gt;/* This is the implementation to copy a function to RAM; Read Technical Note 228 for more information */&lt;/P&gt;&lt;P&gt;extern char __SEG_START_FLASH_ROUTINES[];&lt;BR /&gt;extern char __SEG_SIZE_FLASH_ROUTINES[];&lt;/P&gt;&lt;P&gt;/*&lt;BR /&gt;&amp;nbsp;* Start_Copy_In_RAM refers to the begining of the segment&lt;BR /&gt;&amp;nbsp;* ToCopyToRAM. This segment contains the functions after&lt;BR /&gt;&amp;nbsp;* they have been copied to RAM.&lt;BR /&gt;&amp;nbsp;*/&lt;BR /&gt;#define START_COPY_IN_RAM __SEG_START_FLASH_ROUTINES&lt;BR /&gt;#define SIZE_COPY_IN_RAM __SEG_SIZE_FLASH_ROUTINES&lt;/P&gt;&lt;P&gt;/*&lt;BR /&gt;&amp;nbsp;* Start_In_ROM refers to the begining of the segment&lt;BR /&gt;&amp;nbsp;* ToCopyToRAM. This segment contains the functions in ROM.&lt;BR /&gt;&amp;nbsp;*/&lt;BR /&gt;void flash_copyInRAM(void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char *srcPtr;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char *dstPtr;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int count;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; srcPtr = (char *)START_COPY_IN_RAM;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dstPtr = (char *)&amp;amp;flash_cmd;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (count = 0; count &amp;lt; (int) SIZE_COPY_IN_RAM;&amp;nbsp; count++, dstPtr++, srcPtr++)&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; *dstPtr = *srcPtr;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;/*&lt;BR /&gt;&amp;nbsp;*&lt;BR /&gt;&amp;nbsp;*/&lt;BR /&gt;void memoryManager_enableMemory(unsigned char status)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(status == MEMORY_ENABLED)&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; RTCSC_RTIE = 0;&amp;nbsp;&amp;nbsp; //Disable Timer Interrupt&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DisableInterrupts;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SOPT1_COPT = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if(status == MEMORY_DISABLED)&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; SOPT1_COPT = 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __RESET_WATCHDOG();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RTCSC_RTIE = 1;&amp;nbsp;&amp;nbsp; //Enable Timer Interrupt&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EnableInterrupts;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Please,&amp;nbsp;could&amp;nbsp;anyone help me?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you in advance.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 10 Dec 2010 21:45:54 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Very-critical-problem-to-save-data-in-SE8-Flash-Memory/m-p/168850#M11118</guid>
      <dc:creator>cremonezi</dc:creator>
      <dc:date>2010-12-10T21:45:54Z</dc:date>
    </item>
    <item>
      <title>Re: Very critical problem to save data in SE8 Flash Memory!!!</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Very-critical-problem-to-save-data-in-SE8-Flash-Memory/m-p/168851#M11119</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;It seems you forgot to erase the flash page.&lt;/P&gt;&lt;P&gt;Before writing to flash it is mandatory that you erase the whole page you're going to write data.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I hope it helps,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Celso&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 10 Dec 2010 22:34:35 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Very-critical-problem-to-save-data-in-SE8-Flash-Memory/m-p/168851#M11119</guid>
      <dc:creator>celsoken</dc:creator>
      <dc:date>2010-12-10T22:34:35Z</dc:date>
    </item>
    <item>
      <title>Re: Very critical problem to save data in SE8 Flash Memory!!!</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Very-critical-problem-to-save-data-in-SE8-Flash-Memory/m-p/168852#M11120</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Celso,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I'm erasing the flash page. Please, see below some lines of my routine. I did some tests today morning, and I got the problem in two scenarios:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Scenario 1:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- Program the hardware&lt;/P&gt;&lt;P&gt;- Save/change two or three parameters (OK)&lt;/P&gt;&lt;P&gt;- Turn the hardware off and on&lt;/P&gt;&lt;P&gt;- Save/change one parameter (Not OK). All the other features of my software works fine, but I'm not able to save the parameters anymore&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Scenario 2:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- Program the hardware&lt;/P&gt;&lt;P&gt;- Save/change two or three parameters (OK)&lt;/P&gt;&lt;P&gt;- Continue saving more and more parameters (Not OK). I had problems to save the 8th or 9th parameters. The microcontroller was reseted once. After, the memory&amp;nbsp;and the software&amp;nbsp;were completely erased.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Conclusion:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;If I don't use the memory, all is okay. However, if I use the memory (erase and program) some times, the software is lost&amp;nbsp;or completely erased.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you, in advance.&lt;/P&gt;&lt;P&gt;Cremonezi&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2010 00:25:49 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Very-critical-problem-to-save-data-in-SE8-Flash-Memory/m-p/168852#M11120</guid>
      <dc:creator>cremonezi</dc:creator>
      <dc:date>2010-12-11T00:25:49Z</dc:date>
    </item>
    <item>
      <title>Re: Very critical problem to save data in SE8 Flash Memory!!!</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Very-critical-problem-to-save-data-in-SE8-Flash-Memory/m-p/168853#M11121</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I forgot to post some lines of my routine. Sorry.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;RTCSC_RTIE = 0;&amp;nbsp;&amp;nbsp; //Disable Timer Interrupt&lt;/P&gt;&lt;P&gt;DisableInterrupts;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Disable global interrupts&lt;BR /&gt;SOPT1_COPT = 0; //Disable WDT&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;if(flash_erase(MEMORY_PAGE) == 0)&amp;nbsp;&amp;nbsp;&amp;nbsp; //If there is no problem during erase process, enter program mode.&lt;BR /&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; for(i = 1; i &amp;lt;= PARAMETERS_NUMBER; i++)&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; memoryManager_saveParamValue(i, menu_parameterNumber, menu_data[PARAM_VALUE]);&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;SOPT1_COPT = 1;&amp;nbsp; //Enable WDT&lt;BR /&gt;__RESET_WATCHDOG(); //Reset WDT&lt;BR /&gt;RTCSC_RTIE = 1;&amp;nbsp;&amp;nbsp; //Enable Timer Interrupt&lt;BR /&gt;EnableInterrupts; //Enable global interrupts&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;//*********************************************************&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;void memoryManager_saveParamValue(unsigned char index, unsigned char paramIndex, signed int value)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned char address;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned char addressAdjust;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; addressAdjust = ((index-1)*4);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; address = ((index-1)*8) + PARAM_VALUE_INDEX;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(index == paramIndex)&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; memoryManager_writeData(address,value);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; memoryManager_bufferData[index-1] = value;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; memoryManager_writeData(address,memoryManager_bufferData[index-1]);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; address += 2;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; memoryManager_writeData(address,memoryManager_parameters[addressAdjust+1]);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; address += 2;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; memoryManager_writeData(address,memoryManager_parameters[addressAdjust+2]);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; address += 2;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; memoryManager_writeData(address,memoryManager_parameters[addressAdjust+3]);&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;void memoryManager_writeData(unsigned char address, signed int singleInt16)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned char index;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned char memData;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; index = address;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; memData = getByte16Bits(singleInt16,1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; memoryManager_writeByte(index, memData);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; index++;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; memData = getByte16Bits(singleInt16,2);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; memoryManager_writeByte(index, memData);&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;void memoryManager_writeByte(unsigned char address, unsigned char singleByte)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned char dataToWrite;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dataToWrite = singleByte;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; memoryAddress = MEMORY_INIT_ADDRESS + (unsigned int)address;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(flash_program(memoryAddress, dataToWrite))&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; memoryErrorCode = MEMORY_WRITE_ERROR;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;}&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2010 00:30:14 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Very-critical-problem-to-save-data-in-SE8-Flash-Memory/m-p/168853#M11121</guid>
      <dc:creator>cremonezi</dc:creator>
      <dc:date>2010-12-11T00:30:14Z</dc:date>
    </item>
    <item>
      <title>Re: Very critical problem to save data in SE8 Flash Memory!!!</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Very-critical-problem-to-save-data-in-SE8-Flash-Memory/m-p/168854#M11122</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Should I use the burst command instead of using a normal program command, byte to byte?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2010 01:27:30 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Very-critical-problem-to-save-data-in-SE8-Flash-Memory/m-p/168854#M11122</guid>
      <dc:creator>cremonezi</dc:creator>
      <dc:date>2010-12-11T01:27:30Z</dc:date>
    </item>
    <item>
      <title>Re: Very critical problem to save data in SE8 Flash Memory!!!</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Very-critical-problem-to-save-data-in-SE8-Flash-Memory/m-p/168855#M11123</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;COPT bits are write once. You can't turn COP off then on. First write to SOPT1 register (setting/clearing any SOPT1 bit) will lock COPT setting.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2010 04:07:47 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Very-critical-problem-to-save-data-in-SE8-Flash-Memory/m-p/168855#M11123</guid>
      <dc:creator>kef</dc:creator>
      <dc:date>2010-12-11T04:07:47Z</dc:date>
    </item>
  </channel>
</rss>

