<?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 Re: problems writing to internal EEPROM in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/problems-writing-to-internal-EEPROM/m-p/586596#M21452</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by DF9DQ on Sun Feb 03 23:57:25 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi Alex,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I can confirm that only 32-bit access is supported.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Writing as byte or half-word is not possible.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The user manual says "...writing a minimum of 1 word (4 bytes) to a maximum of 32 words (128 bytes)...". That's a bit ambiguous, and it should rather explicitely mention that 8-bit and 16-bit access is forbidden.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Regards,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Rolf&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 19:10:00 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T19:10:00Z</dc:date>
    <item>
      <title>problems writing to internal EEPROM</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/problems-writing-to-internal-EEPROM/m-p/586593#M21449</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Alex on Fri Jan 25 02:42:11 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I started software development for the LPC4337 a few days ago. Currently I'm trying to write a driver for the internal EEPROM.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Unfortunately I'm not able to store data in the EEPROM.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Hopefully one of you can help.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Here is the code I've written:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt;code&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//class constructor setting wait states and clock divider. The CPU runs at 200 MHz (MCK = 200000000)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;CEEPAccess::CEEPAccess(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; EE_CLKDIV = (MCK / 1500000) - 1; //set clock divider as required for EEPROM usage&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; EE_INTENCLR = (1 &amp;lt;&amp;lt; 2);&amp;nbsp;&amp;nbsp; //clear interrupt enable bit&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; EE_AUTOPROG = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; EE_PWRDWN = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; EE_RWSTATE = (7 &amp;lt;&amp;lt; 8) | 14; //8 waitstates in RPHASE 1 and 15 waitstates in RPHASE 2&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; EE_WSTATE = (4 &amp;lt;&amp;lt; 16) | (8 &amp;lt;&amp;lt; 8) | 2; //5 waitstates in Phase 1, 9 waitstates in Phase 2 and 3 waitstates in Phase 3&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;//adr -&amp;gt; pointer to destination, data -&amp;gt; pointer to source, len -&amp;gt; number of bytes to copy&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;__ramfunc MEM_ERR CEEPAccess::WriteMemory(unsigned char* adr, unsigned int len, unsigned char* data)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; if((reinterpret_cast&amp;lt;int&amp;gt;(adr) &amp;lt; EEP_START_ADDRESS) || ((reinterpret_cast&amp;lt;int&amp;gt;(adr) + len) &amp;gt;= (EEP_START_ADDRESS + EEP_SIZE_BYTES)))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return MEM_ERR_ADDRESS_ERR;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; do&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *adr++ = *data++;&amp;nbsp;&amp;nbsp; //copy from source buffer to destination in EEPROM&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; --len;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //if all bytes copied or reached a page boundary start programming the current page&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if((len == 0) || ((reinterpret_cast&amp;lt;int&amp;gt;(adr) &amp;amp; (EEP_PAGE_SIZE_BYTES - 1)) == 0))&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EE_CMD = EEPROM_CMD_WRITE;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //write programming command to EEPROM command register&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned int Time = SystemTimer::GetSystemTime();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //wait until programming done or timeout&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while((!EE_INTSTAT_bit.END_OF_PROG) &amp;amp;&amp;amp; ((SystemTimer::GetSystemTime() - Time) &amp;lt; 100));&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(!EE_INTSTAT_bit.END_OF_PROG)&amp;nbsp;&amp;nbsp; //if programming is not finished return error&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return MEM_ERR_ACCESS_DENIED;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EE_INTSTATCLR = EE_INTSTATCLR_PROG_CLR_ST;&amp;nbsp; //clear program done interrupt flag&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; }while(len &amp;gt; 0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; return MEM_ERR_NO_ERR;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt;/code&amp;gt;&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 19:09:58 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/problems-writing-to-internal-EEPROM/m-p/586593#M21449</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T19:09:58Z</dc:date>
    </item>
    <item>
      <title>Re: problems writing to internal EEPROM</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/problems-writing-to-internal-EEPROM/m-p/586594#M21450</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by DF9DQ on Fri Jan 25 09:21:11 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi Alex,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;What exactly doesn't work? Do you get a timeout waiting for the END_OF_PROG bit, or does the data you write not end up in the EEPROM?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Does the constant EEPROM_CMD_WRITE have the value 6?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Regards,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Rolf&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 19:09:59 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/problems-writing-to-internal-EEPROM/m-p/586594#M21450</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T19:09:59Z</dc:date>
    </item>
    <item>
      <title>Re: problems writing to internal EEPROM</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/problems-writing-to-internal-EEPROM/m-p/586595#M21451</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Alex on Fri Feb 01 08:15:07 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi Rolf,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;the problem is that the data is not written to the EEPROM. The memory content is still 0xFF on all bytes after applying the write command.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I modified my code to do 32 bit accesses instead of 8 bit. Now it works fine. So obviously bytewise writing is not supported.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Can somone confirm this?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Best regards,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Alex&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 19:09:59 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/problems-writing-to-internal-EEPROM/m-p/586595#M21451</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T19:09:59Z</dc:date>
    </item>
    <item>
      <title>Re: problems writing to internal EEPROM</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/problems-writing-to-internal-EEPROM/m-p/586596#M21452</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by DF9DQ on Sun Feb 03 23:57:25 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi Alex,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I can confirm that only 32-bit access is supported.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Writing as byte or half-word is not possible.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The user manual says "...writing a minimum of 1 word (4 bytes) to a maximum of 32 words (128 bytes)...". That's a bit ambiguous, and it should rather explicitely mention that 8-bit and 16-bit access is forbidden.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Regards,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Rolf&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 19:10:00 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/problems-writing-to-internal-EEPROM/m-p/586596#M21452</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T19:10:00Z</dc:date>
    </item>
    <item>
      <title>Re: problems writing to internal EEPROM</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/problems-writing-to-internal-EEPROM/m-p/586597#M21453</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Alex on Mon Feb 04 01:53:58 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi Rolf,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;thank you.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I got a little confused because the data sheet says that byte accesses are supported.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;"The LPC435x/3x/2x/1x contain 16 kB of on-chip byte-erasable and byte-programmable&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;EEPROM memory."&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Obviously the documentation is slightly inconsistent...&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Best regards,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Alex&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 19:10:01 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/problems-writing-to-internal-EEPROM/m-p/586597#M21453</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T19:10:01Z</dc:date>
    </item>
  </channel>
</rss>

