<?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 MK10FX512 Setting Partition Info for FLEXNVM in Kinetis Microcontrollers</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/MK10FX512-Setting-Partition-Info-for-FLEXNVM/m-p/599161#M35152</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I"m having problems getting my MK10 to set the Partition information correclty .&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I've created code&amp;nbsp; that has worked perfectly on a MK70FX512 system and am porting this code to the MK10FX512 system.&lt;/P&gt;&lt;P&gt;I've modified the code slightly to add the EEERST bit to the partition information.&amp;nbsp; When running this code it actully completes the SetPartitionInfo command with&amp;nbsp; success = 1, but when it tries to Printf the message that it was sucessful the system prints out part of the message.. and then begins spitting out garbage.&amp;nbsp; If I put an incorrect value for EEESPLIT the&lt;/P&gt;&lt;P&gt;SetPartitionInfo command does fail with success = 0, and the printf failure message prints as expected.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#define&amp;nbsp; EEESIZE_VALUE&amp;nbsp; 0x03&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//Size of EEPROM is 2K &lt;BR /&gt;#define&amp;nbsp; EEESPLIT_VALUE 0x00&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//Read Only (Always read as a one) &lt;BR /&gt;#define&amp;nbsp; DEPART_VALUE&amp;nbsp;&amp;nbsp; 0x04&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 64K of Backup EEPROM bytes. &lt;BR /&gt;#define&amp;nbsp; EEERST_VALUE&amp;nbsp;&amp;nbsp; 1 &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Flex Ram is Loaded with valid data after reset &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//*****************This is the code I'm calling when I want to partition the device.&amp;nbsp; The triggerFCCOBinRAM has been setup appropriately and copied to RAM to run. &amp;nbsp;&amp;nbsp; This exact code functions perfectly in an MK70FX512 system.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Partition the memory now.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (SetPartitionInfo(EEERST_VALUE,EEESIZE_VALUE, EEESPLIT_VALUE, DEPART_VALUE, triggerFCCOBinRAM))&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("FlexNVM_Init() Device partitioning successful.\r\n");&lt;BR /&gt;&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; printf("FlexNVM_Init() Device partitioning FAILED.\r\n");&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//***********************This is the SetPartitionInfo Subrotine&lt;/P&gt;&lt;P&gt;// Set new partition information.&lt;BR /&gt;static boolean SetPartitionInfo(uint8 eeerst, uint8 eeesize, uint8 eeesplit, uint8 depart, TriggerFn_t triggerFn)&lt;BR /&gt;{&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; // To set a new partition scheme, use the Program Partition command.&lt;BR /&gt;&amp;nbsp;&amp;nbsp; boolean success = false;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; // First step of any command sequence is wait for ready, then clear faults.&lt;BR /&gt;&amp;nbsp;&amp;nbsp; while (!(FTFE_FSTAT &amp;amp; FTFE_FSTAT_CCIF_MASK))&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Do nothing as long as the CCIF flag is clear.&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; // If flash protection violation is set, clear it by writing 1 to the bit&lt;BR /&gt;&amp;nbsp;&amp;nbsp; if (FTFE_FSTAT &amp;amp; FTFE_FSTAT_FPVIOL_MASK)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FTFE_FSTAT |= FTFE_FSTAT_FPVIOL_MASK;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; // If access error is set, clear it by writing 1 to the bit&lt;BR /&gt;&amp;nbsp;&amp;nbsp; if (FTFE_FSTAT &amp;amp; FTFE_FSTAT_ACCERR_MASK)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FTFE_FSTAT |= FTFE_FSTAT_ACCERR_MASK;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; // If read collision error is set, clear it by writing 1 to the bit&lt;BR /&gt;&amp;nbsp;&amp;nbsp; if (FTFE_FSTAT &amp;amp; FTFE_FSTAT_RDCOLERR_MASK)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FTFE_FSTAT |= FTFE_FSTAT_RDCOLERR_MASK;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; // Housekeeping done, set up command structure.&lt;BR /&gt;&amp;nbsp;&amp;nbsp; FTFE_FCCOB0 = PROGRAM_PARTITION_CMD;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; FTFE_FCCOB1 = 0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Address 23-16 not used&lt;BR /&gt;&amp;nbsp;&amp;nbsp; FTFE_FCCOB2 = 0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Address 15- 8 not used&lt;BR /&gt;&amp;nbsp;&amp;nbsp; FTFE_FCCOB3 = 0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Address&amp;nbsp; 7- 0 not used&lt;BR /&gt;&amp;nbsp;&amp;nbsp; FTFE_FCCOB4 = ( ((eeerst &amp;amp; 0x01) &amp;lt;&amp;lt; 6) | (eeesplit &amp;amp; 0x03) &amp;lt;&amp;lt; 4) | (eeesize &amp;amp; 0x0f);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; FTFE_FCCOB5 = (depart &amp;amp; 0x0f);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; // Trigger the function and wait for it to complete.&lt;BR /&gt;&amp;nbsp;&amp;nbsp; // Trigger/wait code must run from RAM.&lt;BR /&gt;&amp;nbsp;&amp;nbsp; // Don't allow interrupts to run, they could access flash.&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Enter_Critical_Section();&amp;nbsp;&amp;nbsp; //MACRO that turns off interrupts - Defination below&lt;BR /&gt;&amp;nbsp;&amp;nbsp; triggerFn(&amp;amp;FTFE_FSTAT);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Leave_Critical_Section();&amp;nbsp; //MACRO that restores interrupts.&amp;nbsp; - Defination below&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; // Operation is successful if there are no errors.&lt;BR /&gt;&amp;nbsp;&amp;nbsp; success = (!(FTFE_FSTAT &amp;amp; (FTFE_FSTAT_FPVIOL_MASK | FTFE_FSTAT_ACCERR_MASK | FTFE_FSTAT_RDCOLERR_MASK | FTFE_FSTAT_MGSTAT0_MASK)));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; return success;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#define Enter_Critical_Section()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Begin local code block&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; static unsigned char saveFAULTMASK;&amp;nbsp; /* Local storage for FAULTMASK&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */ \&lt;BR /&gt;&amp;nbsp;&amp;nbsp; asm(PUSH {R0,R1});&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Save registers that will be used */ \&lt;BR /&gt;&amp;nbsp;&amp;nbsp; asm(MRS R0, FAULTMASK);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Move FAULTMASK to temp regiser&amp;nbsp;&amp;nbsp; */ \&lt;BR /&gt;&amp;nbsp;&amp;nbsp; asm(CPSID f);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Disable all interrupts but NMI&amp;nbsp;&amp;nbsp; */ \&lt;BR /&gt;&amp;nbsp;&amp;nbsp; asm(LDA R1, saveFAULTMASK);&amp;nbsp;&amp;nbsp; /* Get address of local storage&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */ \&lt;BR /&gt;&amp;nbsp;&amp;nbsp; asm(STRB R0, [R1]);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Save original FAULTMASK value&amp;nbsp;&amp;nbsp;&amp;nbsp; */ \&lt;BR /&gt;&amp;nbsp;&amp;nbsp; asm(POP {R0,R1});&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 original register values */&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;#define Leave_Critical_Section()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; asm(PUSH {R0,R1});&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Save registers that will be used */ \&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm(LDA R1, saveFAULTMASK);&amp;nbsp; /* Get address of local storage&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */ \&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm(LDRB R0, [R1]);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Get original FAULTMASK value&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */ \&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm(MSR FAULTMASK,R0;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore original FAULTMASK value */ \&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm(POP {R0,R1});&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore original register values */ \&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; /* End local code block&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;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sun, 26 Feb 2017 03:57:35 GMT</pubDate>
    <dc:creator>Ali2006</dc:creator>
    <dc:date>2017-02-26T03:57:35Z</dc:date>
    <item>
      <title>MK10FX512 Setting Partition Info for FLEXNVM</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/MK10FX512-Setting-Partition-Info-for-FLEXNVM/m-p/599161#M35152</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I"m having problems getting my MK10 to set the Partition information correclty .&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I've created code&amp;nbsp; that has worked perfectly on a MK70FX512 system and am porting this code to the MK10FX512 system.&lt;/P&gt;&lt;P&gt;I've modified the code slightly to add the EEERST bit to the partition information.&amp;nbsp; When running this code it actully completes the SetPartitionInfo command with&amp;nbsp; success = 1, but when it tries to Printf the message that it was sucessful the system prints out part of the message.. and then begins spitting out garbage.&amp;nbsp; If I put an incorrect value for EEESPLIT the&lt;/P&gt;&lt;P&gt;SetPartitionInfo command does fail with success = 0, and the printf failure message prints as expected.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#define&amp;nbsp; EEESIZE_VALUE&amp;nbsp; 0x03&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//Size of EEPROM is 2K &lt;BR /&gt;#define&amp;nbsp; EEESPLIT_VALUE 0x00&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//Read Only (Always read as a one) &lt;BR /&gt;#define&amp;nbsp; DEPART_VALUE&amp;nbsp;&amp;nbsp; 0x04&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 64K of Backup EEPROM bytes. &lt;BR /&gt;#define&amp;nbsp; EEERST_VALUE&amp;nbsp;&amp;nbsp; 1 &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Flex Ram is Loaded with valid data after reset &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//*****************This is the code I'm calling when I want to partition the device.&amp;nbsp; The triggerFCCOBinRAM has been setup appropriately and copied to RAM to run. &amp;nbsp;&amp;nbsp; This exact code functions perfectly in an MK70FX512 system.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Partition the memory now.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (SetPartitionInfo(EEERST_VALUE,EEESIZE_VALUE, EEESPLIT_VALUE, DEPART_VALUE, triggerFCCOBinRAM))&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("FlexNVM_Init() Device partitioning successful.\r\n");&lt;BR /&gt;&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; printf("FlexNVM_Init() Device partitioning FAILED.\r\n");&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;//***********************This is the SetPartitionInfo Subrotine&lt;/P&gt;&lt;P&gt;// Set new partition information.&lt;BR /&gt;static boolean SetPartitionInfo(uint8 eeerst, uint8 eeesize, uint8 eeesplit, uint8 depart, TriggerFn_t triggerFn)&lt;BR /&gt;{&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; // To set a new partition scheme, use the Program Partition command.&lt;BR /&gt;&amp;nbsp;&amp;nbsp; boolean success = false;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; // First step of any command sequence is wait for ready, then clear faults.&lt;BR /&gt;&amp;nbsp;&amp;nbsp; while (!(FTFE_FSTAT &amp;amp; FTFE_FSTAT_CCIF_MASK))&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Do nothing as long as the CCIF flag is clear.&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; // If flash protection violation is set, clear it by writing 1 to the bit&lt;BR /&gt;&amp;nbsp;&amp;nbsp; if (FTFE_FSTAT &amp;amp; FTFE_FSTAT_FPVIOL_MASK)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FTFE_FSTAT |= FTFE_FSTAT_FPVIOL_MASK;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; // If access error is set, clear it by writing 1 to the bit&lt;BR /&gt;&amp;nbsp;&amp;nbsp; if (FTFE_FSTAT &amp;amp; FTFE_FSTAT_ACCERR_MASK)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FTFE_FSTAT |= FTFE_FSTAT_ACCERR_MASK;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; // If read collision error is set, clear it by writing 1 to the bit&lt;BR /&gt;&amp;nbsp;&amp;nbsp; if (FTFE_FSTAT &amp;amp; FTFE_FSTAT_RDCOLERR_MASK)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FTFE_FSTAT |= FTFE_FSTAT_RDCOLERR_MASK;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; // Housekeeping done, set up command structure.&lt;BR /&gt;&amp;nbsp;&amp;nbsp; FTFE_FCCOB0 = PROGRAM_PARTITION_CMD;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; FTFE_FCCOB1 = 0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Address 23-16 not used&lt;BR /&gt;&amp;nbsp;&amp;nbsp; FTFE_FCCOB2 = 0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Address 15- 8 not used&lt;BR /&gt;&amp;nbsp;&amp;nbsp; FTFE_FCCOB3 = 0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Address&amp;nbsp; 7- 0 not used&lt;BR /&gt;&amp;nbsp;&amp;nbsp; FTFE_FCCOB4 = ( ((eeerst &amp;amp; 0x01) &amp;lt;&amp;lt; 6) | (eeesplit &amp;amp; 0x03) &amp;lt;&amp;lt; 4) | (eeesize &amp;amp; 0x0f);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; FTFE_FCCOB5 = (depart &amp;amp; 0x0f);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; // Trigger the function and wait for it to complete.&lt;BR /&gt;&amp;nbsp;&amp;nbsp; // Trigger/wait code must run from RAM.&lt;BR /&gt;&amp;nbsp;&amp;nbsp; // Don't allow interrupts to run, they could access flash.&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Enter_Critical_Section();&amp;nbsp;&amp;nbsp; //MACRO that turns off interrupts - Defination below&lt;BR /&gt;&amp;nbsp;&amp;nbsp; triggerFn(&amp;amp;FTFE_FSTAT);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Leave_Critical_Section();&amp;nbsp; //MACRO that restores interrupts.&amp;nbsp; - Defination below&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; // Operation is successful if there are no errors.&lt;BR /&gt;&amp;nbsp;&amp;nbsp; success = (!(FTFE_FSTAT &amp;amp; (FTFE_FSTAT_FPVIOL_MASK | FTFE_FSTAT_ACCERR_MASK | FTFE_FSTAT_RDCOLERR_MASK | FTFE_FSTAT_MGSTAT0_MASK)));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; return success;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#define Enter_Critical_Section()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Begin local code block&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; static unsigned char saveFAULTMASK;&amp;nbsp; /* Local storage for FAULTMASK&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */ \&lt;BR /&gt;&amp;nbsp;&amp;nbsp; asm(PUSH {R0,R1});&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Save registers that will be used */ \&lt;BR /&gt;&amp;nbsp;&amp;nbsp; asm(MRS R0, FAULTMASK);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Move FAULTMASK to temp regiser&amp;nbsp;&amp;nbsp; */ \&lt;BR /&gt;&amp;nbsp;&amp;nbsp; asm(CPSID f);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Disable all interrupts but NMI&amp;nbsp;&amp;nbsp; */ \&lt;BR /&gt;&amp;nbsp;&amp;nbsp; asm(LDA R1, saveFAULTMASK);&amp;nbsp;&amp;nbsp; /* Get address of local storage&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */ \&lt;BR /&gt;&amp;nbsp;&amp;nbsp; asm(STRB R0, [R1]);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Save original FAULTMASK value&amp;nbsp;&amp;nbsp;&amp;nbsp; */ \&lt;BR /&gt;&amp;nbsp;&amp;nbsp; asm(POP {R0,R1});&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 original register values */&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;#define Leave_Critical_Section()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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; asm(PUSH {R0,R1});&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Save registers that will be used */ \&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm(LDA R1, saveFAULTMASK);&amp;nbsp; /* Get address of local storage&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */ \&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm(LDRB R0, [R1]);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Get original FAULTMASK value&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */ \&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm(MSR FAULTMASK,R0;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore original FAULTMASK value */ \&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm(POP {R0,R1});&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Restore original register values */ \&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; /* End local code block&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;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 26 Feb 2017 03:57:35 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/MK10FX512-Setting-Partition-Info-for-FLEXNVM/m-p/599161#M35152</guid>
      <dc:creator>Ali2006</dc:creator>
      <dc:date>2017-02-26T03:57:35Z</dc:date>
    </item>
    <item>
      <title>Re: MK10FX512 Setting Partition Info for FLEXNVM</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/MK10FX512-Setting-Partition-Info-for-FLEXNVM/m-p/599162#M35153</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 would recommend customer to refer TFS Flash Driver software from &lt;A href="http://www.nxp.com/assets/downloads/data/en/device-drivers/C90TFS_FLASH_DRIVER.exe"&gt;here&lt;/A&gt;.&lt;/P&gt;&lt;P&gt;The project could be found from below folder:&lt;/P&gt;&lt;P&gt;..\Standard_Software_Driver_v1.03\C90TFS\Demos\build\MK53DX256Zxxx10\IAR\demo_normal&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Wish it helps.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Have a great day,&lt;BR /&gt;Ma Hui&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;BR /&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 03 Mar 2017 07:17:28 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/MK10FX512-Setting-Partition-Info-for-FLEXNVM/m-p/599162#M35153</guid>
      <dc:creator>Hui_Ma</dc:creator>
      <dc:date>2017-03-03T07:17:28Z</dc:date>
    </item>
    <item>
      <title>Re: MK10FX512 Setting Partition Info for FLEXNVM</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/MK10FX512-Setting-Partition-Info-for-FLEXNVM/m-p/599163#M35154</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I'll take a look at the code.. I've downloaded it but didn't really see any&lt;/P&gt;&lt;P&gt;files specific to the Mk10FX512.&amp;nbsp; I am using Codewarrior not IAR.. so I can't use the demo project file you pointed me too.&lt;/P&gt;&lt;P&gt;Can you just point me to some specific code files..&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Also. based on my findings, I'm just wondering&amp;nbsp; is it true then on the MK10FX512 that&amp;nbsp; since you can't set the EEESPLIT values.. and they are specified as being 11.. Does that mean that the FlexNVM is partitioned into two section each 1/2 the size of the memory?&amp;nbsp;&amp;nbsp; Or is there just one FlexNVM section in this chip? &lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="pastedImage_2.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/14993i5E60D4DF0D3F910A/image-size/large?v=v2&amp;amp;px=999" role="button" title="pastedImage_2.png" alt="pastedImage_2.png" /&gt;&lt;/span&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="pastedImage_1.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/14952i31AF002845B6F761/image-size/large?v=v2&amp;amp;px=999" role="button" title="pastedImage_1.png" alt="pastedImage_1.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 10 Mar 2017 02:44:49 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/MK10FX512-Setting-Partition-Info-for-FLEXNVM/m-p/599163#M35154</guid>
      <dc:creator>Ali2006</dc:creator>
      <dc:date>2017-03-10T02:44:49Z</dc:date>
    </item>
    <item>
      <title>Re: MK10FX512 Setting Partition Info for FLEXNVM</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/MK10FX512-Setting-Partition-Info-for-FLEXNVM/m-p/599164#M35155</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;The Flash Driver software also provide project based on CodeWarrior IDE.&lt;/P&gt;&lt;P&gt;Customer could refer the [demo_normal] of MK70FX512xxx12 product, the default path is:&lt;/P&gt;&lt;P&gt;C:\Program Files\Freescale\Standard_Software_Driver_v1.03\C90TFS\Demos\build\MK70FX512xxx12\CW10.4\demo_normal&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I will check with Kinetis product team about the EEPROM Data Set Size Field [EEESPLIT] bits description.&lt;/P&gt;&lt;P&gt;I will post the comments, when there with any feedback.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Thank you for the attention.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Have a great day,&lt;BR /&gt;Ma Hui&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;BR /&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 10 Mar 2017 05:13:25 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/MK10FX512-Setting-Partition-Info-for-FLEXNVM/m-p/599164#M35155</guid>
      <dc:creator>Hui_Ma</dc:creator>
      <dc:date>2017-03-10T05:13:25Z</dc:date>
    </item>
    <item>
      <title>Re: MK10FX512 Setting Partition Info for FLEXNVM</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/MK10FX512-Setting-Partition-Info-for-FLEXNVM/m-p/599165#M35156</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;Thank you for the patience.&lt;/P&gt;&lt;P&gt;In fact, the below description should be incorrect, the EESPLIT could be 0b00, 0b01 and 0b10.&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="pastedImage_1.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/15215i8A5972152B7A49F9/image-size/large?v=v2&amp;amp;px=999" role="button" title="pastedImage_1.png" alt="pastedImage_1.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;So, the Flash command [Program Partition Command] EEPROM Data Set Size Code (FCCOB4) related value, please refer reference manual table Table 30-70. Valid EEPROM Data Set Size Codes:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="pastedImage_2.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/15256i22F211BE3221B80A/image-size/large?v=v2&amp;amp;px=999" role="button" title="pastedImage_2.png" alt="pastedImage_2.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;The Kinetis document team will fix that document issue.&lt;/P&gt;&lt;P&gt;Sorry for that bring any inconvenience to you.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Wish it helps.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Have a great day,&lt;BR /&gt;Ma Hui&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;BR /&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Mar 2017 23:35:45 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/MK10FX512-Setting-Partition-Info-for-FLEXNVM/m-p/599165#M35156</guid>
      <dc:creator>Hui_Ma</dc:creator>
      <dc:date>2017-03-15T23:35:45Z</dc:date>
    </item>
  </channel>
</rss>

