<?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>LPC MicrocontrollersのトピックLPCOpen v2.05 - lpc13xx - weird I2C errors</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPCOpen-v2-05-lpc13xx-weird-I2C-errors/m-p/576366#M19425</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by nidalpres on Fri Apr 03 19:46:58 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I have a C++ project which has a cpp file with a function that goes like this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
void I2C_Init()
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Initialize I2C
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * - enable I2C clock via SYSAHBCLKCTRL
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * - resets I2C peripheral via clocking I2C pin in PRESETCTRL
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_I2CM_Init(LPC_I2C);
&amp;nbsp;&amp;nbsp;&amp;nbsp; /*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Sets SCLH and SCLL based on PCLK (which is same as core clock)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * and given speed
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_I2CM_SetBusSpeed(LPC_I2C, SPEED_100KHZ);
&amp;nbsp;&amp;nbsp;&amp;nbsp; /*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Clears SI, STO, STA and AA bits
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * via CONCLR
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_I2CM_ResetControl(LPC_I2C);
&amp;nbsp;&amp;nbsp;&amp;nbsp; /*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * clears I2EN bit via CONCLR
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Chip_I2CM_SendStart() will set I2EN bit
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_I2CM_Disable(LPC_I2C);
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;It works like a charm, I2C initializes and I can communicate with my I2C device.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;If I change it to this (note how instead passing LPC_I2C to functions I pass a &lt;/SPAN&gt;&lt;STRONG&gt;variable&lt;/STRONG&gt;&lt;SPAN&gt; with that value):&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
void I2C_Init()
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_I2C_T *lpcI2C = LPC_I2C;

&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_I2CM_Init(lpcI2C);

&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_I2CM_SetBusSpeed(lpcI2C, SPEED_100KHZ);

&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_I2CM_ResetControl(lpcI2C);

&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_I2CM_Disable(lpcI2C);
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;all I get after calling Chip_I2CM_XferBlocking() (or anything else for that matter) is xfer.status == I2CM_STATUS_BUS_ERROR.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Also, weird, in second case (when using variable), LPCXpresso IDE reports connection error when uploading code to target (via debug in LPCXpresso IDE).&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I have to disconnect LPCXpresso 1347 board from USB, connect it back again and uploading code now works.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Also, weird, in second case (when using variable), if I set breakpoint on my call to Chip_I2CM_XferBlocking() and then just press F8 (continue run) when execution hits the breakpoint, suddenly there are no more I2CM_STATUS_BUS_ERRORs and I get readouts from the sensor connected to LPCXpresso 1347 board.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Remove variable lpcI2C and pass LPC_I2C value directly to those calls in I2C_Init(), and all works fantastically from the start, no need to reset board by reconnecting it, code upload works right away, code reads data from sensor from the start.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;My question:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;W.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;T.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;???&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Excuse my french, I just spent like 3 hours figuring out what is going on and at the end narrowed it down to what I described in here. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Now I'm just puzzled, amazed and bewildered.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;If anyone has any comments, please do.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I'll go now and have a beer. Or two. Or three.&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 20:17:25 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T20:17:25Z</dc:date>
    <item>
      <title>LPCOpen v2.05 - lpc13xx - weird I2C errors</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPCOpen-v2-05-lpc13xx-weird-I2C-errors/m-p/576366#M19425</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by nidalpres on Fri Apr 03 19:46:58 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I have a C++ project which has a cpp file with a function that goes like this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
void I2C_Init()
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Initialize I2C
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * - enable I2C clock via SYSAHBCLKCTRL
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * - resets I2C peripheral via clocking I2C pin in PRESETCTRL
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_I2CM_Init(LPC_I2C);
&amp;nbsp;&amp;nbsp;&amp;nbsp; /*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Sets SCLH and SCLL based on PCLK (which is same as core clock)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * and given speed
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_I2CM_SetBusSpeed(LPC_I2C, SPEED_100KHZ);
&amp;nbsp;&amp;nbsp;&amp;nbsp; /*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Clears SI, STO, STA and AA bits
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * via CONCLR
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_I2CM_ResetControl(LPC_I2C);
&amp;nbsp;&amp;nbsp;&amp;nbsp; /*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * clears I2EN bit via CONCLR
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Chip_I2CM_SendStart() will set I2EN bit
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */
&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_I2CM_Disable(LPC_I2C);
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;It works like a charm, I2C initializes and I can communicate with my I2C device.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;If I change it to this (note how instead passing LPC_I2C to functions I pass a &lt;/SPAN&gt;&lt;STRONG&gt;variable&lt;/STRONG&gt;&lt;SPAN&gt; with that value):&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
void I2C_Init()
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_I2C_T *lpcI2C = LPC_I2C;

&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_I2CM_Init(lpcI2C);

&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_I2CM_SetBusSpeed(lpcI2C, SPEED_100KHZ);

&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_I2CM_ResetControl(lpcI2C);

&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_I2CM_Disable(lpcI2C);
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;all I get after calling Chip_I2CM_XferBlocking() (or anything else for that matter) is xfer.status == I2CM_STATUS_BUS_ERROR.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Also, weird, in second case (when using variable), LPCXpresso IDE reports connection error when uploading code to target (via debug in LPCXpresso IDE).&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I have to disconnect LPCXpresso 1347 board from USB, connect it back again and uploading code now works.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Also, weird, in second case (when using variable), if I set breakpoint on my call to Chip_I2CM_XferBlocking() and then just press F8 (continue run) when execution hits the breakpoint, suddenly there are no more I2CM_STATUS_BUS_ERRORs and I get readouts from the sensor connected to LPCXpresso 1347 board.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Remove variable lpcI2C and pass LPC_I2C value directly to those calls in I2C_Init(), and all works fantastically from the start, no need to reset board by reconnecting it, code upload works right away, code reads data from sensor from the start.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;My question:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;W.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;T.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;F.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;???&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Excuse my french, I just spent like 3 hours figuring out what is going on and at the end narrowed it down to what I described in here. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Now I'm just puzzled, amazed and bewildered.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;If anyone has any comments, please do.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I'll go now and have a beer. Or two. Or three.&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 20:17:25 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPCOpen-v2-05-lpc13xx-weird-I2C-errors/m-p/576366#M19425</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T20:17:25Z</dc:date>
    </item>
    <item>
      <title>Re: LPCOpen v2.05 - lpc13xx - weird I2C errors</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPCOpen-v2-05-lpc13xx-weird-I2C-errors/m-p/576367#M19426</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by nidalpres on Fri Apr 03 19:49:34 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Btw. those code samples are not code samples, both of those I2C_Init() functions are literally the way I pasted them in that post.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;And now, to that beer...&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 20:17:26 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPCOpen-v2-05-lpc13xx-weird-I2C-errors/m-p/576367#M19426</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T20:17:26Z</dc:date>
    </item>
  </channel>
</rss>

