<?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 LPCxpresso 54628 I2C slave stop condition issue in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPCxpresso-54628-I2C-slave-stop-condition-issue/m-p/887732#M35565</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi All,&lt;/P&gt;&lt;P&gt;&amp;nbsp;I'm using a&amp;nbsp;LPCxpresso 54628 and am running the I2C interrupt driven slave example code. My issue is that, while I see all my data come in on a ReceiveEvent, the I2C callback routine never hits the "kI2C_SlaveCompletionEvent" state despite my I2C-master sending a stop. Which I confirmed on my scope (see attachments).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The code is all untouched from the NXP example code (lpcxprrsso_54628_i2_interrupt_b2b_transfer_slave). And the SlaveCompletetionEvent flag is being passed:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;reVal = I2C_SlaveTransferNonBlocking(EXAMPLE_I2C_SLAVE, &amp;amp;g_s_handle, kI2C_SlaveAddressMatchEvent | kI2C_SlaveCompletionEvent);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Any thoughts on why it never hits&amp;nbsp;&lt;SPAN&gt;kI2C_SlaveCompletionEvent ?!&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mike&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 06 Feb 2019 13:16:08 GMT</pubDate>
    <dc:creator>mspenard603</dc:creator>
    <dc:date>2019-02-06T13:16:08Z</dc:date>
    <item>
      <title>LPCxpresso 54628 I2C slave stop condition issue</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPCxpresso-54628-I2C-slave-stop-condition-issue/m-p/887732#M35565</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi All,&lt;/P&gt;&lt;P&gt;&amp;nbsp;I'm using a&amp;nbsp;LPCxpresso 54628 and am running the I2C interrupt driven slave example code. My issue is that, while I see all my data come in on a ReceiveEvent, the I2C callback routine never hits the "kI2C_SlaveCompletionEvent" state despite my I2C-master sending a stop. Which I confirmed on my scope (see attachments).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The code is all untouched from the NXP example code (lpcxprrsso_54628_i2_interrupt_b2b_transfer_slave). And the SlaveCompletetionEvent flag is being passed:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;reVal = I2C_SlaveTransferNonBlocking(EXAMPLE_I2C_SLAVE, &amp;amp;g_s_handle, kI2C_SlaveAddressMatchEvent | kI2C_SlaveCompletionEvent);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Any thoughts on why it never hits&amp;nbsp;&lt;SPAN&gt;kI2C_SlaveCompletionEvent ?!&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mike&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 06 Feb 2019 13:16:08 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPCxpresso-54628-I2C-slave-stop-condition-issue/m-p/887732#M35565</guid>
      <dc:creator>mspenard603</dc:creator>
      <dc:date>2019-02-06T13:16:08Z</dc:date>
    </item>
    <item>
      <title>Re: LPCxpresso 54628 I2C slave stop condition issue</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPCxpresso-54628-I2C-slave-stop-condition-issue/m-p/887733#M35566</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello &lt;A _jive_internal="true" data-content-finding="Community" data-userid="335361" data-username="mspenard603@gmail.com" href="https://community.nxp.com/people/mspenard603@gmail.com"&gt;Mike Spenard&lt;/A&gt;,&lt;/P&gt;&lt;P&gt;I test the demo on my side, it can hits &amp;nbsp; the case&amp;nbsp; of&amp;nbsp; "kI2C_SlaveCompletionEvent",&lt;/P&gt;&lt;P&gt;&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/71980i0109D3F5449ED587/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;Try to set a breakpoint on line 67&amp;nbsp; g_SlaveCompletionFlag = true;&amp;nbsp; just like my picture above,&amp;nbsp; connect tow lpc54628 boards, flash mater project to Master board, download slave project to Slave board, click Run, then Reset Master board,&lt;/P&gt;&lt;P&gt;it should stop at the breakpoint.&lt;/P&gt;&lt;P&gt;BTW, please use the latest SDK v2.5.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hope it helps,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;BR&lt;/P&gt;&lt;P&gt;Alice&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 12 Feb 2019 09:41:46 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPCxpresso-54628-I2C-slave-stop-condition-issue/m-p/887733#M35566</guid>
      <dc:creator>Alice_Yang</dc:creator>
      <dc:date>2019-02-12T09:41:46Z</dc:date>
    </item>
    <item>
      <title>Re: LPCxpresso 54628 I2C slave stop condition issue</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPCxpresso-54628-I2C-slave-stop-condition-issue/m-p/887734#M35567</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Alice,&lt;/P&gt;&lt;P&gt;&amp;nbsp;I'm using the latest SDK. I think there is some confusion on what exactly the issue is and why it is working for you:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The issue is that unless one reads the amount of data specified by "#define I2C_DATA_LENGTH (34)"&amp;nbsp; it never hits&amp;nbsp;kI2C_SlaveCompletionEvent. fsl_i2c.c is written around the expectation to always receive a set size of data (i.e.,&amp;nbsp;&lt;SPAN&gt;I2C_DATA_LENGTH) rather than an I2C Stop. &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Specifically, the xfer-&amp;gt;rxSize is initialized to&amp;nbsp;I2C_DATA_LENGTH&amp;nbsp;and tries to count down to zero. If it doesn't reach 0 than no&amp;nbsp;kI2C_SlaveCompletionEvent.&lt;BR /&gt;&lt;BR /&gt;This isn't acceptable as a large degree of I2C sensors and implementations have varying data payload size. And the API needs to be written such that it hits a Completion State on a I2C stop rather than rxData counting down to 0.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;/ms&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 12 Feb 2019 12:52:43 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPCxpresso-54628-I2C-slave-stop-condition-issue/m-p/887734#M35567</guid>
      <dc:creator>mspenard603</dc:creator>
      <dc:date>2019-02-12T12:52:43Z</dc:date>
    </item>
    <item>
      <title>Re: LPCxpresso 54628 I2C slave stop condition issue</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPCxpresso-54628-I2C-slave-stop-condition-issue/m-p/887735#M35568</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;In digging into this further in the LPC546xx Reference Manual (&lt;A class="link-titled" href="https://studio.segger.com/packages/LPC54000/CMSIS/Documents/UM10912.pdf" title="https://studio.segger.com/packages/LPC54000/CMSIS/Documents/UM10912.pdf"&gt;https://studio.segger.com/packages/LPC54000/CMSIS/Documents/UM10912.pdf&lt;/A&gt;&amp;nbsp;) I can see what happened:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;There is a set of registers (MONACTIVE et al) specifically for monitoring the I2C bus condition (start stop etc). But the FSL_I2C.C API failed to implement them in its code! Rather, they took the example from 26.4.2.1 for transferring 8bits--that doesn't use the monitor registers--and used the same transfer scheme for transferring multiple bytes of data as if that is acceptable in the real world.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Someone needs to update the fsl_i2c API asap, this is asinine.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 13 Feb 2019 20:28:03 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPCxpresso-54628-I2C-slave-stop-condition-issue/m-p/887735#M35568</guid>
      <dc:creator>mspenard603</dc:creator>
      <dc:date>2019-02-13T20:28:03Z</dc:date>
    </item>
    <item>
      <title>Re: LPCxpresso 54628 I2C slave stop condition issue</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPCxpresso-54628-I2C-slave-stop-condition-issue/m-p/887736#M35569</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Mike,&lt;/P&gt;&lt;P&gt;- "&lt;SPAN&gt;And the API needs to be written such that it hits a Completion State on a I2C stop rather than rxData counting down to 0.&lt;/SPAN&gt;" - Yes, this demo just shows raData down to 0. If you want to hit a completion state on Stop,&amp;nbsp; just need to add the&amp;nbsp; "case kI2C_SlaveDeselectedEvent " in &amp;nbsp;i2c_slave_callback function, for example :&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In i2c salve callback function:&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;static void i2c_slave_callback(I2C_Type *base, volatile i2c_slave_transfer_t *xfer, void *userData)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; switch (xfer-&amp;gt;event)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;SPAN style="color: #ff0000;"&gt;case kI2C_SlaveDeselectedEvent:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="color: #ff0000;"&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; g_SlaveCompletionFlag = true;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="color: #ff0000;"&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; Your own code&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="color: #ff0000;"&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; break;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;}&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;And in transfer function. we need add kI2C_SlaveDeselectedEvent:&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;&amp;nbsp; /* Start accepting I2C transfers on the I2C slave peripheral */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; reVal = I2C_SlaveTransferNonBlocking(EXAMPLE_I2C_SLAVE, &amp;amp;g_s_handle,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; kI2C_SlaveAddressMatchEvent | kI2C_SlaveCompletionEvent|&lt;SPAN style="color: #ff0000;"&gt;kI2C_SlaveDeselectedEvent&lt;/SPAN&gt;);&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;- when Master send Stop, the Slave Deselected flag of STAT will set to 1 , then in the function of&amp;nbsp;&amp;nbsp; I2C_SlaveTransferHandleIRQ invoke kI2C_SlaveDeselectedEvent .&lt;/P&gt;&lt;P&gt;Please check the driver code :&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;void I2C_SlaveTransferHandleIRQ(I2C_Type *base, i2c_slave_handle_t *handle)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t i2cStatus = base-&amp;gt;STAT;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (i2cStatus &amp;amp; I2C_STAT_SLVDESEL_MASK)&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; I2C_SlaveInvokeEvent(base, handle, kI2C_SlaveDeselectedEvent);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I2C_SlaveClearStatusFlags(base, I2C_STAT_SLVDESEL_MASK);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;...&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;Also have a look at the LPC546xx Reference Manual page 445.&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/72121i411D631C4AB62287/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;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Have a great day,&lt;BR /&gt;TIC&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;-------------------------------------------------------------------------------&lt;BR /&gt;Note:&lt;BR /&gt;- If this post answers your question, please click the "Mark Correct" button. Thank you!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;- We are following threads for 7 weeks after the last post, later replies are ignored&lt;BR /&gt; Please open a new thread and refer to the closed one, if you have a related question at a later point in time.&lt;BR /&gt;-------------------------------------------------------------------------------&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 14 Feb 2019 05:22:00 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPCxpresso-54628-I2C-slave-stop-condition-issue/m-p/887736#M35569</guid>
      <dc:creator>Alice_Yang</dc:creator>
      <dc:date>2019-02-14T05:22:00Z</dc:date>
    </item>
    <item>
      <title>Re: LPCxpresso 54628 I2C slave stop condition issue</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPCxpresso-54628-I2C-slave-stop-condition-issue/m-p/887737#M35570</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Ah, very good! Thank you!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 14 Feb 2019 13:06:09 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPCxpresso-54628-I2C-slave-stop-condition-issue/m-p/887737#M35570</guid>
      <dc:creator>mspenard603</dc:creator>
      <dc:date>2019-02-14T13:06:09Z</dc:date>
    </item>
    <item>
      <title>Re: LPCxpresso 54628 I2C slave stop condition issue</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPCxpresso-54628-I2C-slave-stop-condition-issue/m-p/887738#M35571</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;A subsequent issue is it's accepting bad NAKd data into the receive buffer. This needs to be avoided. Any suggestions?&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 21 Feb 2019 16:57:08 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPCxpresso-54628-I2C-slave-stop-condition-issue/m-p/887738#M35571</guid>
      <dc:creator>mspenard603</dc:creator>
      <dc:date>2019-02-21T16:57:08Z</dc:date>
    </item>
    <item>
      <title>Re: LPCxpresso 54628 I2C slave stop condition issue</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPCxpresso-54628-I2C-slave-stop-condition-issue/m-p/887739#M35572</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Mike,&lt;/P&gt;&lt;P&gt;Sorry I'm afraid I can't understand your meaning.&lt;/P&gt;&lt;P&gt;Could you please describe the process detail about "it's accepting bad NAKd data into the receive buffer."&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;BR&lt;/P&gt;&lt;P&gt;Alice&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 25 Feb 2019 03:27:25 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPCxpresso-54628-I2C-slave-stop-condition-issue/m-p/887739#M35572</guid>
      <dc:creator>Alice_Yang</dc:creator>
      <dc:date>2019-02-25T03:27:25Z</dc:date>
    </item>
  </channel>
</rss>

