<?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: S12XDP512 - EEPROM Programming</title>
    <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/S12XDP512-EEPROM-Programming/m-p/144638#M3781</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;I have a problem in trying to reprogram the EEPROM.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I am using the MC9S12XDT256CAG and trying to test code to erase and write to the EEPROM space.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I set up the linker file as shown below:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;EEPROM_13_GLOBAL&amp;nbsp;= READ_ONLY&amp;nbsp;0x13F000'G TO 0x13F3FF'G;&amp;nbsp;// 1 KByte global space covering PAGES F8 - FB&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //EEPROM_FC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = READ_ONLY&amp;nbsp;&amp;nbsp; 0xFC0800 TO 0xFC0BFF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EEPROM_FD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = READ_ONLY&amp;nbsp;&amp;nbsp; 0xFD0800 TO 0xFD0BFF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EEPROM_FE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = READ_ONLY&amp;nbsp;&amp;nbsp; 0xFE0800 TO 0xFE0BFF;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I made the page I wanted to access a global address so I could the far pointer type.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I then have a function to write to the EEPROM that is as follows:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;tS08 Write_Word_EEPROM(unsigned int *far wr_address, tU16 wr_data)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tS08 access_status = 0;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Eeprom.estat.byte = (PVIOL | ACCERR);&amp;nbsp;// Clear any errors&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *(wr_address) = wr_data;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Eeprom.ecmd.byte = PROGRAM_WORD;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Eeprom.estat.bit.cbeif = 1;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (Eeprom.estat.bit.cbeif == 0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp; // Wait for command buffer empty interrupt flag to be set to 1.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (Eeprom.estat.bit.ccif == 0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp; // Wait for command complete interrupt flag to be set indicating&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&amp;nbsp; //&amp;nbsp; that the command operation has completed.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (Eeprom.estat.bit.accerr || Eeprom.estat.bit.pviol)&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 (Eeprom.estat.bit.accerr)&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; access_status = EEPROM_ACCESS_ERROR;&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; access_status = EEPROM_PROTECT_ERROR;&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; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&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; access_status = EEPROM_SUCCESS;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (access_status);&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;and make the call to this function as shown below:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;EEPROM_status = Write_Word_EEPROM((unsigned int *far)0x13F000, 0xAAAA);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;when I do this write, the memory locations at 0x13F000 remain 0xFFFF instead of changing to 0xAAAA.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Is this because I am using the global pointer instead of setting the pointers up to use the EPAGE register.&amp;nbsp; If I need to do it using the EPAGE register, how do I set the pointer up for that?&amp;nbsp; If this is not the case, if you see any mistakes or reasons why this code does not work, I would appreciate it.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Also, I noticed the EEPROM address register only stores 11 bits.&amp;nbsp; Is that because each page is only 1Kbyte?&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Thank you for the help.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;-Thomas&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 14 Sep 2007 05:17:02 GMT</pubDate>
    <dc:creator>ThomasG</dc:creator>
    <dc:date>2007-09-14T05:17:02Z</dc:date>
    <item>
      <title>S12XDP512 - EEPROM Programming</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/S12XDP512-EEPROM-Programming/m-p/144636#M3779</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;SPAN&gt;Hi I make a program that change the content of the EEPROM in the HCS12XDP512 MCU, but works only when I use the MCU with BDM, when the MCU is running alone the EEPROM programming doesn't work&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;can someone help me with that please?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;--&lt;BR /&gt;Alban Edit: Please always include FSL Part Number in Message Subject line.&lt;/SPAN&gt;&lt;BR /&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Message Edited by Alban on &lt;/SPAN&gt;&lt;SPAN class="date_text"&gt;2007-09-08&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class="time_text"&gt;07:26 PM&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 08 Sep 2007 10:40:41 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/S12XDP512-EEPROM-Programming/m-p/144636#M3779</guid>
      <dc:creator>alefsaeusb</dc:creator>
      <dc:date>2007-09-08T10:40:41Z</dc:date>
    </item>
    <item>
      <title>Re: EEPROM Programming</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/S12XDP512-EEPROM-Programming/m-p/144637#M3780</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Scroll down and find there Search Board button and edit box. Enter "EEPROM BDM" or something like that. Results are useful, for example:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;A href="http://forums.freescale.com/freescale/board/message?board.id=16BITCOMM&amp;amp;message.id=2793" target="_blank"&gt;http://forums.freescale.com/freescale/board/message?board.id=16BITCOMM&amp;amp;message.id=2793&lt;/A&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 08 Sep 2007 18:16:00 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/S12XDP512-EEPROM-Programming/m-p/144637#M3780</guid>
      <dc:creator>kef</dc:creator>
      <dc:date>2007-09-08T18:16:00Z</dc:date>
    </item>
    <item>
      <title>Re: S12XDP512 - EEPROM Programming</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/S12XDP512-EEPROM-Programming/m-p/144638#M3781</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;I have a problem in trying to reprogram the EEPROM.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I am using the MC9S12XDT256CAG and trying to test code to erase and write to the EEPROM space.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I set up the linker file as shown below:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;EEPROM_13_GLOBAL&amp;nbsp;= READ_ONLY&amp;nbsp;0x13F000'G TO 0x13F3FF'G;&amp;nbsp;// 1 KByte global space covering PAGES F8 - FB&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //EEPROM_FC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = READ_ONLY&amp;nbsp;&amp;nbsp; 0xFC0800 TO 0xFC0BFF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EEPROM_FD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = READ_ONLY&amp;nbsp;&amp;nbsp; 0xFD0800 TO 0xFD0BFF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EEPROM_FE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = READ_ONLY&amp;nbsp;&amp;nbsp; 0xFE0800 TO 0xFE0BFF;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I made the page I wanted to access a global address so I could the far pointer type.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I then have a function to write to the EEPROM that is as follows:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;tS08 Write_Word_EEPROM(unsigned int *far wr_address, tU16 wr_data)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tS08 access_status = 0;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Eeprom.estat.byte = (PVIOL | ACCERR);&amp;nbsp;// Clear any errors&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *(wr_address) = wr_data;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Eeprom.ecmd.byte = PROGRAM_WORD;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Eeprom.estat.bit.cbeif = 1;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (Eeprom.estat.bit.cbeif == 0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp; // Wait for command buffer empty interrupt flag to be set to 1.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (Eeprom.estat.bit.ccif == 0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp; // Wait for command complete interrupt flag to be set indicating&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&amp;nbsp; //&amp;nbsp; that the command operation has completed.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (Eeprom.estat.bit.accerr || Eeprom.estat.bit.pviol)&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 (Eeprom.estat.bit.accerr)&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; access_status = EEPROM_ACCESS_ERROR;&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; access_status = EEPROM_PROTECT_ERROR;&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; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&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; access_status = EEPROM_SUCCESS;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (access_status);&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;and make the call to this function as shown below:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;EEPROM_status = Write_Word_EEPROM((unsigned int *far)0x13F000, 0xAAAA);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;when I do this write, the memory locations at 0x13F000 remain 0xFFFF instead of changing to 0xAAAA.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Is this because I am using the global pointer instead of setting the pointers up to use the EPAGE register.&amp;nbsp; If I need to do it using the EPAGE register, how do I set the pointer up for that?&amp;nbsp; If this is not the case, if you see any mistakes or reasons why this code does not work, I would appreciate it.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Also, I noticed the EEPROM address register only stores 11 bits.&amp;nbsp; Is that because each page is only 1Kbyte?&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Thank you for the help.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;-Thomas&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 14 Sep 2007 05:17:02 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/S12XDP512-EEPROM-Programming/m-p/144638#M3781</guid>
      <dc:creator>ThomasG</dc:creator>
      <dc:date>2007-09-14T05:17:02Z</dc:date>
    </item>
    <item>
      <title>Re: S12XDP512 - EEPROM Programming</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/S12XDP512-EEPROM-Programming/m-p/144639#M3782</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Thomas,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;1) make sure you set ECLKDIV register up before EEPROM write call.&lt;/DIV&gt;&lt;DIV&gt;2) make sure debugger doesn't full you caching EEPROM contents. Maybe try to read EEPROM locations back after programming&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Your code looks quite OK and should work. I have just two questions about the code.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;1)&amp;nbsp;&amp;nbsp;&amp;nbsp; Eeprom.estat.byte = (PVIOL | ACCERR);&amp;nbsp;// Clear any errors&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I don't know what tool suite you are using. Looks like CodeWarrior, but CW headers have different defines for EEPROM bits and registers.&lt;/DIV&gt;&lt;DIV&gt;My question: It looks like you are using bitfields a lot and I'm not sure if PVIOL is bitmask =0x32, that would be OK. It would be wrong if PVIOL would be a bit from EESTAT bitfield.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;2) &amp;nbsp;Eeprom.estat.bit.cbeif = 1;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;It doesn't make you code not working, but you should be aware that this line tries to clear not only cbeif bit, but also pviol and accerr bits. I advice you to use cbeif bitmask here.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Answering your questions:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;1. Global addressing can be used to program EEPROM, your code should work.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;2. You wrote: "Also, I noticed the EEPROM address register only stores 11 bits.&amp;nbsp; Is that because each page is only 1Kbyte?"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;No, 11 EEADR&amp;nbsp;bits doesn't relate to EEPROM page size. EEADR is an internal address in the EEPROM module. It seems it's word address, not byte address. 2^11 = 2kWords. Try to latch global addresses 0x13FFFE, 0x13FFFC, 0x13FFFA and you should&amp;nbsp;see 0x7FF, 0x7FE and 0x7FD resoectively in the EEADR.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Regards&lt;/DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 14 Sep 2007 15:11:37 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/S12XDP512-EEPROM-Programming/m-p/144639#M3782</guid>
      <dc:creator>kef</dc:creator>
      <dc:date>2007-09-14T15:11:37Z</dc:date>
    </item>
  </channel>
</rss>

