<?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: I2C EEPROM Problem in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/I2C-EEPROM-Problem/m-p/513564#M232</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;bump&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sun, 19 Jun 2016 01:11:01 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-19T01:11:01Z</dc:date>
    <item>
      <title>I2C EEPROM Problem</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/I2C-EEPROM-Problem/m-p/513560#M228</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by aralath on Fri May 13 01:18:50 MST 2016&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi there, &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I am trying to write a single byte and read it back using I2C bus. The EEPROM I use is AT24C256. I used I2C bus with other MCUs like 17xx and they worked perfectly, however I couldn't do it with LPC1549. Here is the code:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define I2C_CLK_DIVIDER&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (40)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define I2C_BITRATE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (100000)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Standard I2C mode */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define I2C_MODE&amp;nbsp;&amp;nbsp;&amp;nbsp; (0)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Ui32 dataWr, dataRd;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Setup I2C handle and parameters */&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void setupI2CMaster()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 22, IOCON_DIGMODE_EN | I2C_MODE);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 23, IOCON_DIGMODE_EN | I2C_MODE);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_SWM_EnableFixedPin(SWM_FIXED_I2C0_SCL);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_SWM_EnableFixedPin(SWM_FIXED_I2C0_SDA);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Enable I2C clock and reset I2C peripheral - the boot ROM does not&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; do this */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_I2C_Init(LPC_I2C0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Setup clock rate for I2C */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_I2C_SetClockDiv(LPC_I2C0, I2C_CLK_DIVIDER);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Setup I2CM transfer rate */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_I2CM_SetBusSpeed(LPC_I2C0, I2C_BITRATE);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Enable Master Mode */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_I2CM_Enable(LPC_I2C0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void EEPROM_Wrr(void){&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;dataWr = 100;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_I2C-&amp;gt;MSTDAT = (0x50&amp;lt;&amp;lt;1) | 0; // address and 0 for RWn bit&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_I2C-&amp;gt;MSTCTL = I2C_MSTCTL_MSTSTART; // send start&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;while(!(LPC_I2C-&amp;gt;STAT &amp;amp; I2C_STAT_MSTPENDING));&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_I2C-&amp;gt;MSTDAT = dataWr; // send data&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_I2C-&amp;gt;MSTCTL = I2C_MSTCTL_MSTCONTINUE; // continue transaction&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;while(!(LPC_I2C-&amp;gt;STAT &amp;amp; I2C_STAT_MSTPENDING));&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_I2C-&amp;gt;MSTCTL = I2C_MSTCTL_MSTSTOP; // send stop&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void EEPROM_Rdd(void){&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_I2C-&amp;gt;MSTDAT = (0x50&amp;lt;&amp;lt;1) | 1; // address and 1 for RWn bit&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_I2C-&amp;gt;MSTCTL = I2C_MSTCTL_MSTSTART; // send start&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;while(!(LPC_I2C-&amp;gt;STAT &amp;amp; I2C_STAT_MSTPENDING));&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;dataRd = LPC_I2C-&amp;gt;MSTDAT; // read data&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_I2C-&amp;gt;MSTCTL = I2C_MSTCTL_MSTSTOP; // send stop&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;int main(){&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp; setupI2CMaster();&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;EEPROM_Wrr();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;for(Wait = 0; Wait&amp;lt;30000; Wait++);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;EEPROM_Rdd();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The init part is from LPC_Xpresso library. The rest is from the user manual code example. Write protection is disabled for the EEPROM. Also I tried to use E2 by software I\O method, again it worked perfectly. Sadly, I2C bus did not work. When I debug the code, it stucks in ""while(!(LPC_I2C-&amp;gt;STAT &amp;amp; I2C_STAT_MSTPENDING))"" .&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Any help is greatly appreciated!&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:07:05 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/I2C-EEPROM-Problem/m-p/513560#M228</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:07:05Z</dc:date>
    </item>
    <item>
      <title>Re: I2C EEPROM Problem</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/I2C-EEPROM-Problem/m-p/513561#M229</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by DennisFrie on Sat Jun 11 10:50:53 MST 2016&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I have a similar problem. I've been debugging a bit and it seems like the continue transmission, or set "master continue" bit, doesn't have any effect. Starting a new transaction, sending the nack etc. works perfectly fine, but when I set the "master continue" bit, nothing happens. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Have you found a solution to your problem?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Edit; Sorry, in my case it was a wrong I2C address causing the problem. &lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:07:06 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/I2C-EEPROM-Problem/m-p/513561#M229</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:07:06Z</dc:date>
    </item>
    <item>
      <title>Re: I2C EEPROM Problem</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/I2C-EEPROM-Problem/m-p/513562#M230</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by aralath on Mon Jun 13 04:24:33 MST 2016&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Glad that you solved your problem&amp;nbsp; :)&amp;nbsp; Mine is still not working though. &lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:07:06 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/I2C-EEPROM-Problem/m-p/513562#M230</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:07:06Z</dc:date>
    </item>
    <item>
      <title>Re: I2C EEPROM Problem</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/I2C-EEPROM-Problem/m-p/513563#M231</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by DennisFrie on Mon Jun 13 12:28:33 MST 2016&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I don't use the LPC-predefined functions myself, but it seems very similar to what I have working. One thing I noticed, as the last thing in EEPROM_Wrr() you send the stop-command, but don't use the while(!(LPC_I2C-&amp;gt;STAT &amp;amp; I2C_STAT_MSTPENDING)); to ensure the I2C is ready again. You do have a dummy wait-loop, but I can't see if wait is defined as volatile to ensure proper delay-functionality? If not, the compiler might just skip the for-loop, go directly to EEPROM_Rdd but can't use the I2C, as it's still busy sending the stop-command. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Only an idea, don't see anything else obvious. Do you have a logic analyzer to verify bit-output and acknowledgement from slave-device?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:07:07 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/I2C-EEPROM-Problem/m-p/513563#M231</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:07:07Z</dc:date>
    </item>
    <item>
      <title>Re: I2C EEPROM Problem</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/I2C-EEPROM-Problem/m-p/513564#M232</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;bump&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 19 Jun 2016 01:11:01 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/I2C-EEPROM-Problem/m-p/513564#M232</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-19T01:11:01Z</dc:date>
    </item>
  </channel>
</rss>

