<?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: baremetal I2C bus lockup in Kinetis Microcontrollers</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/baremetal-I2C-bus-lockup/m-p/491799#M30372</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Ok, I don't really know what else to do at this point. I'm about to start praying to all known deities and probably offer my cat (will have to get one first) in sacrifice. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I implemented the following logic (not optimized, just exactly as described. I'm desperate here!) as suggested on the datasheet (p. 718).&amp;nbsp; It runs in every clock tick.&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="_jivemacro_uid_14504208283567886 jive_macro_code jive_text_macro" data-renderedposition="71_8_1232_512" jivemacro_uid="_14504208283567886" modifiedtitle="true"&gt;&lt;P&gt;// Clear flag&lt;/P&gt;&lt;P&gt;&amp;nbsp; _i2c_t.i2c-&amp;gt;S |= I2C_S_IICIF_MASK;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; // Check if arbitration is lost&lt;/P&gt;&lt;P&gt;&amp;nbsp; if(_i2c_t.i2c-&amp;gt;S &amp;amp; I2C_S_ARBL_MASK){&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _i2c_t.i2c-&amp;gt;S |= I2C_S_ARBL_MASK;&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; // Clear arbitration&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(_i2c_t.i2c-&amp;gt;S &amp;amp; I2C_S_IAAS_MASK){&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(!(_i2c_t.i2c-&amp;gt;S &amp;amp; I2C_S_SRW_MASK)){&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _i2c_t.i2c-&amp;gt;C1 &amp;amp;= ~I2C_C1_TX_MASK; // Set Receiver mode&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = (_i2c_t.i2c-&amp;gt;D &amp;amp; 0xFF);&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; // Dummy read&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }else{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Master requesting?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Not interested right now...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; }else{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(_i2c_t.i2c-&amp;gt;S &amp;amp; I2C_S_IAAS_MASK){&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(!(_i2c_t.i2c-&amp;gt;S &amp;amp; I2C_S_SRW_MASK)){&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _i2c_t.i2c-&amp;gt;C1 &amp;amp;= ~I2C_C1_TX_MASK; // Set Receiver mode&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = (_i2c_t.i2c-&amp;gt;D &amp;amp; 0xFF);&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; // Dummy read&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }else{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Master requesting?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: rgba(0, 0, 0, 0); font-family: Consolas, 'Courier New', Courier, mono, serif; font-size: 12px;"&gt;// Not interested right now...&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }else{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Read the actual data!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = (_i2c_t.i2c-&amp;gt;D &amp;amp; 0xFF);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'm sending 11 bytes per transaction and it seems to work fine for the first few:&lt;/P&gt;&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper" image-alt="pastedImage_3.png"&gt;&lt;IMG alt="pastedImage_3.png" src="https://community.nxp.com/t5/image/serverpage/image-id/31095i8F0C9186549B4509/image-size/large?v=v2&amp;amp;px=999" title="pastedImage_3.png" /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;(each "bar" is a transaction of 11 bytes).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Notice how at the end the bus remains locked. A closeup basically looks exactly as my previous post:&lt;/P&gt;&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper" image-alt="pastedImage_4.png"&gt;&lt;IMG alt="pastedImage_4.png" src="https://community.nxp.com/t5/image/serverpage/image-id/31099iB97381B6D44540A0/image-size/large?v=v2&amp;amp;px=999" title="pastedImage_4.png" /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;It's also worth mentioning that there is a 100ms spacing between transactions, and that if I increase this to 2000ms (2 seconds) it seems to work "fine" indefinitely. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Again, &lt;SPAN style="color: #51626f; font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif;"&gt;Any help will be appreciated.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif;"&gt;Alex.&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 02 Nov 2020 13:27:20 GMT</pubDate>
    <dc:creator>alex323qp</dc:creator>
    <dc:date>2020-11-02T13:27:20Z</dc:date>
    <item>
      <title>baremetal I2C bus lockup</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/baremetal-I2C-bus-lockup/m-p/491798#M30371</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi, I'm working on a bare metal I2C multimaster library for the MKL25Z4 and I'm having issues when trying to enumerate attached devices to the bus.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The process I follow is basically: START --&amp;gt; Write[address] --&amp;gt; STOP. By checking the ACK bit I know if there is a device listening or not.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;It works from time to time but on most occasions the bus stays lock with both SDL and SCL lines low:&lt;/P&gt;&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper" image-alt="pastedImage_0.png"&gt;&lt;IMG alt="pastedImage_0.png" src="https://community.nxp.com/t5/image/serverpage/image-id/33090i8F29F213749D723B/image-size/large?v=v2&amp;amp;px=999" title="pastedImage_0.png" /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;The picture above shows a device attached "listening" on address 0x03. See how the ACK is issued by the servant device, but the master seems unable to STOP the transmission. This doesn't seem to happen when sending actual data (START --&amp;gt;WRITE[address] --&amp;gt; BYTE[1] --&amp;gt; BYTE[2] --&amp;gt; ... --&amp;gt; STOP).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;My Read method:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_14503334538117471 jive_text_macro" data-renderedposition="432_8_1232_112" jivemacro_uid="_14503334538117471"&gt;&lt;P&gt;int read_byte(){&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _i2c_t.i2c-&amp;gt;C1 &amp;amp;= ~I2C_C1_TX_MASK;&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; // Set RX mode&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _i2c_t.i2c-&amp;gt;C1 &amp;amp;= ~I2C_C1_TXAK_MASK;&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; // Enable ACK&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; byte = (_i2c_t.i2c-&amp;gt;D &amp;amp; 0xFF);&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; // Read&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wait_for_bit(I2C_S_IICIF_MASK);&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; // Wait for the transfer to be over&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _i2c_t.i2c-&amp;gt;S |= I2C_S_IICIF_MASK;&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; // Clear out the interrupt flag&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'm not using interrupts so the servant device is continuously checking the status register in order to detect a transaction:&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_14503338356027468 jive_text_macro" data-renderedposition="586_8_1232_128" jivemacro_uid="_14503338356027468" modifiedtitle="true"&gt;&lt;P&gt;onTick(){&lt;/P&gt;&lt;P style="padding-left: 60px;"&gt;if(_i2c.i2c-&amp;gt;S &amp;amp; (I2C_S_TCF_MASK | I2C_S_IAAS_MASK | I2C_S_BUSY_MASK | I2C_S_IICIF_MASK)){&lt;/P&gt;&lt;P style="padding-left: 90px;"&gt;// Master sending&lt;/P&gt;&lt;P style="padding-left: 90px;"&gt;while(_i2c_t.i2c-&amp;gt;S &amp;amp; I2C_S_BUSY_MASK){&amp;nbsp; // Keep reading as long as the line is active&lt;/P&gt;&lt;P style="padding-left: 120px;"&gt;read_byte();&lt;/P&gt;&lt;P style="padding-left: 90px;"&gt;}&lt;/P&gt;&lt;P style="padding-left: 60px;"&gt;}&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have tried multiple things but the lines always end up locked (low). I even tried enabling the Glitch Filter just in case it was a noise issue, but it didn't work. Lines use 2k2 resistors to VCC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Also, any advice on how to recover from this? I can detect it using the SMB-&amp;gt;SHTF1 and SHTF2 registers, but so far the only way to do it is by hard resetting the chip.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Any help will be appreciated.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Alex.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 02 Nov 2020 13:27:18 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/baremetal-I2C-bus-lockup/m-p/491798#M30371</guid>
      <dc:creator>alex323qp</dc:creator>
      <dc:date>2020-11-02T13:27:18Z</dc:date>
    </item>
    <item>
      <title>Re: baremetal I2C bus lockup</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/baremetal-I2C-bus-lockup/m-p/491799#M30372</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Ok, I don't really know what else to do at this point. I'm about to start praying to all known deities and probably offer my cat (will have to get one first) in sacrifice. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I implemented the following logic (not optimized, just exactly as described. I'm desperate here!) as suggested on the datasheet (p. 718).&amp;nbsp; It runs in every clock tick.&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="_jivemacro_uid_14504208283567886 jive_macro_code jive_text_macro" data-renderedposition="71_8_1232_512" jivemacro_uid="_14504208283567886" modifiedtitle="true"&gt;&lt;P&gt;// Clear flag&lt;/P&gt;&lt;P&gt;&amp;nbsp; _i2c_t.i2c-&amp;gt;S |= I2C_S_IICIF_MASK;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; // Check if arbitration is lost&lt;/P&gt;&lt;P&gt;&amp;nbsp; if(_i2c_t.i2c-&amp;gt;S &amp;amp; I2C_S_ARBL_MASK){&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _i2c_t.i2c-&amp;gt;S |= I2C_S_ARBL_MASK;&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; // Clear arbitration&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(_i2c_t.i2c-&amp;gt;S &amp;amp; I2C_S_IAAS_MASK){&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(!(_i2c_t.i2c-&amp;gt;S &amp;amp; I2C_S_SRW_MASK)){&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _i2c_t.i2c-&amp;gt;C1 &amp;amp;= ~I2C_C1_TX_MASK; // Set Receiver mode&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = (_i2c_t.i2c-&amp;gt;D &amp;amp; 0xFF);&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; // Dummy read&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }else{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Master requesting?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Not interested right now...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; }else{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(_i2c_t.i2c-&amp;gt;S &amp;amp; I2C_S_IAAS_MASK){&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(!(_i2c_t.i2c-&amp;gt;S &amp;amp; I2C_S_SRW_MASK)){&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _i2c_t.i2c-&amp;gt;C1 &amp;amp;= ~I2C_C1_TX_MASK; // Set Receiver mode&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = (_i2c_t.i2c-&amp;gt;D &amp;amp; 0xFF);&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; // Dummy read&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }else{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Master requesting?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: rgba(0, 0, 0, 0); font-family: Consolas, 'Courier New', Courier, mono, serif; font-size: 12px;"&gt;// Not interested right now...&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }else{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Read the actual data!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = (_i2c_t.i2c-&amp;gt;D &amp;amp; 0xFF);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'm sending 11 bytes per transaction and it seems to work fine for the first few:&lt;/P&gt;&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper" image-alt="pastedImage_3.png"&gt;&lt;IMG alt="pastedImage_3.png" src="https://community.nxp.com/t5/image/serverpage/image-id/31095i8F0C9186549B4509/image-size/large?v=v2&amp;amp;px=999" title="pastedImage_3.png" /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;(each "bar" is a transaction of 11 bytes).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Notice how at the end the bus remains locked. A closeup basically looks exactly as my previous post:&lt;/P&gt;&lt;P&gt;&lt;SPAN class="lia-inline-image-display-wrapper" image-alt="pastedImage_4.png"&gt;&lt;IMG alt="pastedImage_4.png" src="https://community.nxp.com/t5/image/serverpage/image-id/31099iB97381B6D44540A0/image-size/large?v=v2&amp;amp;px=999" title="pastedImage_4.png" /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;It's also worth mentioning that there is a 100ms spacing between transactions, and that if I increase this to 2000ms (2 seconds) it seems to work "fine" indefinitely. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Again, &lt;SPAN style="color: #51626f; font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif;"&gt;Any help will be appreciated.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif;"&gt;Alex.&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 02 Nov 2020 13:27:20 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/baremetal-I2C-bus-lockup/m-p/491799#M30372</guid>
      <dc:creator>alex323qp</dc:creator>
      <dc:date>2020-11-02T13:27:20Z</dc:date>
    </item>
    <item>
      <title>Re: baremetal I2C bus lockup</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/baremetal-I2C-bus-lockup/m-p/491800#M30373</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;If it works slower that points in the direction of wrong value for the bus pull up resistors.&lt;/P&gt;&lt;P&gt;Someone once did a thesis on how it is impossible to meet all of the I2C electrical specs with *any* value of pull up resistor.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Try lowering the pull up resistors to ~1.5k and see what happens.&amp;nbsp; Linear Tech makes active pull-ups for I2C as well for the extreme need.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I2C is an idea that should have never happened in the world...&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 18 Dec 2015 16:48:22 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/baremetal-I2C-bus-lockup/m-p/491800#M30373</guid>
      <dc:creator>bobpaddock</dc:creator>
      <dc:date>2015-12-18T16:48:22Z</dc:date>
    </item>
    <item>
      <title>Re: baremetal I2C bus lockup</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/baremetal-I2C-bus-lockup/m-p/491801#M30374</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Multi-master I2C is something that I have always avoided after being involved with a system based on it in the past. The two wires may have been cheap in the HW but the cost of the problems that needed to be solved (devices that glitched, didn't fully meet specs. etc.) burned up the savings a thousand-fold...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;One practical method of debugging is to connect (small-ish) serial resistors to each master's SDA/SCL lines, each with different values. Then it is possible to see which master is driving the bus (due to the voltage drop). By using a logic analyser with different logic thresholds set the I2C signal can then also be filtered.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I this case I think that it is nothing as complicated as that but I stick to I2C master and I2C slave roles because they are practical and reliable. When multi-master is required there are usually alternatives solutions that won't cause complications.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mark&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 18 Dec 2015 17:33:33 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/baremetal-I2C-bus-lockup/m-p/491801#M30374</guid>
      <dc:creator>mjbcswitzerland</dc:creator>
      <dc:date>2015-12-18T17:33:33Z</dc:date>
    </item>
    <item>
      <title>Re: baremetal I2C bus lockup</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/baremetal-I2C-bus-lockup/m-p/491802#M30375</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Bob, thanks for the advice.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I tested with 1.5k resistors but the result is the same &lt;IMG alt="Smiley Sad" class="emoticon emoticon-smileysad" id="smileysad" src="https://community.nxp.com/i/smilies/16x16_smiley-sad.png" title="Smiley Sad" /&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regarding Mark's comments, yes a multimaster implementation can be a pain in the back side but I'm afraid I haven't even got that point yet. Here I'm just testing a standard master-slave transaction and those are the only devices in the bus.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'm not sure if this is a hardware issue, I tested with multiple FRDM-KL25Z boards as well custom ones, the result is the same. I also tried using other libraries (mbed's I2C) and even a SoftwareI2C master version, but the problem persists.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I forgot to mention that I connected the same devices to an i2c EEPROM memory and it works just fine! reading and writing multiple bytes, the problem seems to happen only when connecting 2 &lt;SPAN style="color: #51626f; font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif;"&gt;MKL25Z4 devices.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif;"&gt;Something curious I noticed; if in the original code, I keep reeding in a second loop (line 30) the problem goes away, so I believe this&lt;/SPAN&gt;&lt;SPAN style="color: #51626f; font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif; line-height: 1.5;"&gt; could be a timing issue. The state machine in one of the 2 devices (or both) seems to go out of sync for some reason:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_14505151758467565 jive_text_macro" data-renderedposition="345_8_1232_64" jivemacro_uid="_14505151758467565" modifiedtitle="true"&gt;&lt;P&gt;// This works! (replacing line 30)&lt;/P&gt;&lt;P&gt;while(true){&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = (_i2c_t.i2c-&amp;gt;D &amp;amp; 0xFF);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Any other ideas?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Alex.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 02 Nov 2020 13:27:22 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/baremetal-I2C-bus-lockup/m-p/491802#M30375</guid>
      <dc:creator>alex323qp</dc:creator>
      <dc:date>2020-11-02T13:27:22Z</dc:date>
    </item>
    <item>
      <title>Re: baremetal I2C bus lockup</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/baremetal-I2C-bus-lockup/m-p/491803#M30376</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Alex&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have &lt;SPAN style="text-decoration: underline;"&gt;master/slave I2C operation&lt;/SPAN&gt;&lt;SPAN&gt; in the uTasker project ( &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="http://www.utasker.com/" rel="nofollow"&gt;http://www.utasker.com/&lt;/A&gt;&lt;SPAN&gt; ) (for KL, K, KE, KEA, KV parts) - I just wouldn't do multimaster (&lt;/SPAN&gt;&lt;EM&gt;unless someone was offering good incentives for it to be added because it would be horrible to have to support in case of practical issues&lt;/EM&gt;).&lt;/P&gt;&lt;P&gt;KL25 was no problem - KL27, KL43 etc. (and others with double-buffered implementations) need different handling, although the migration application note states that they are SW compatible (which someone must have dreamt).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have attached my development notes from KL25 to KL27 master/slave tests in both directions, with and without repeated starts. The expected status register values (and corresponding interrupts that they cause) are shown in the (3) diagrams. Maybe it will hep you find something.&lt;/P&gt;&lt;P&gt;The I2C master/slave operation is also simulated in the uTasker project (for single and double buffered devices) which is useful for stepping code to analyse the I2C workings and comparing to HW cases if there is any unexpected behavior.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mark&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;P.S. It may just be that your slave is not releasing the bus since slaves do 'clock-stretching' - not all I2C slaves in the kinetis family support this but if the KL25 slave doesn't release the bus after being addressed (by clearing the "addressed as slave flag) it will stop any further bus activity (forever) and the master is also blocked.&lt;/EM&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 19 Dec 2015 18:11:52 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/baremetal-I2C-bus-lockup/m-p/491803#M30376</guid>
      <dc:creator>mjbcswitzerland</dc:creator>
      <dc:date>2015-12-19T18:11:52Z</dc:date>
    </item>
    <item>
      <title>Re: baremetal I2C bus lockup</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/baremetal-I2C-bus-lockup/m-p/491804#M30377</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Mark, did you ever look at the FlexIO I2C option on the KL27?&amp;nbsp; Repeated Start is implemented in the application note, AN5133, AN4955.&amp;nbsp; Was wondering if it really worked (having lost faith in any Freescale documentation)? &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Sadly my devices is not on FlexIO pins, so I did not even try.&amp;nbsp; Next board rev will change pins to FlexIO pins.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;DIV class="rc" data-hveid="33"&gt;&lt;DIV class="s" style="color: #545454;"&gt;&lt;DIV class="f kv _SWb" style="color: #808080;"&gt;&lt;DIV class="action-menu ab_ctl" style="margin: 0 3px;"&gt;&lt;DIV class="crl" data-async-context="res:1;ri:;site:cache.freescale.com" data-async-trigger="cra-1-filled" data-ved="0ahUKEwi_1p6Nnu3JAhUE4SYKHaZhDPEQ5CsIJzAB" style="color: #777777; font-size: 14px;"&gt;&lt;P&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;&lt;/P&gt;&lt;P class="crc" style="margin-left: 4px;"&gt;&lt;/P&gt;&lt;DIV class="crl" data-async-context="res:1;ri:;site:cache.freescale.com" data-async-trigger="cra-1-filled" data-ved="0ahUKEwi_1p6Nnu3JAhUE4SYKHaZhDPEQ5CsIJzAB" style="color: #777777; font-size: 14px;"&gt;&lt;BR /&gt;&lt;P&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;P&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 21 Dec 2015 15:12:14 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/baremetal-I2C-bus-lockup/m-p/491804#M30377</guid>
      <dc:creator>bobpaddock</dc:creator>
      <dc:date>2015-12-21T15:12:14Z</dc:date>
    </item>
    <item>
      <title>Re: baremetal I2C bus lockup</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/baremetal-I2C-bus-lockup/m-p/491805#M30378</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Bob&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I haven't used FlexIO yet.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mark&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 21 Dec 2015 15:41:22 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/baremetal-I2C-bus-lockup/m-p/491805#M30378</guid>
      <dc:creator>mjbcswitzerland</dc:creator>
      <dc:date>2015-12-21T15:41:22Z</dc:date>
    </item>
    <item>
      <title>Re: baremetal I2C bus lockup</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/baremetal-I2C-bus-lockup/m-p/491806#M30379</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Alexander:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Do you still have this issue?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I checked your first code above, and I think it is not a good logic. Checking all status flags at once is not correct, since each flag has a different meaning. Also re-configuring the slave for each read is not always required. Then you used the recommended flow diagram of the Manual and although it is for interrupt mode it can also work by polling IICIF, but not if polling all flags at once. Typically as shown in the diagram you just poll IICIF (or enable interrupts) and then take action based on the flags set.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;More specifically about the issue, when the KL25 I2C in slave mode receives a byte, it holds the SCL line low (clock stretching) until the I2C Data Register is read. This must be happening in your case, somehow your flag checks are overlapping and you are missing a read from the register, that is why it works reading the register in a loop.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I hope this helps. Let us know if any progress.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Regards!,&lt;BR /&gt;Jorge Gonzalez&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 30 Dec 2015 23:07:37 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/baremetal-I2C-bus-lockup/m-p/491806#M30379</guid>
      <dc:creator>Jorge_Gonzalez</dc:creator>
      <dc:date>2015-12-30T23:07:37Z</dc:date>
    </item>
    <item>
      <title>Re: baremetal I2C bus lockup</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/baremetal-I2C-bus-lockup/m-p/491807#M30380</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Jorge, thanks for your reply, and apologies to you and &lt;A class="jx-jive-macro-user" href="https://community.nxp.com/people/mjbcswitzerland"&gt;mjbcswitzerland&lt;/A&gt;​ for the delay in my response; I was on christmas holidays.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You are correct, the original code was poorly written, the updated version (second post) implemented the flow diagram from the datasheet. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The problem was basically what you indicated; the slave was holding the line low because the program was busy with another subroutine. The interesting part was that even after reading the data from the register (which I was expecting would release the line), the line remained low, it looks like the devices went out of sync or something. &lt;SPAN style="text-decoration: underline;"&gt;The solution was basically making sure the slave device was always available to read the register when a new byte arrived&lt;/SPAN&gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Though Mark's response helped me greatly to solve the issue, I'm marking yours as correct since clock stretching was the specific cause of my problem.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you all for your help and happy (belated) new year :-)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;A.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 06 Jan 2016 21:26:11 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/baremetal-I2C-bus-lockup/m-p/491807#M30380</guid>
      <dc:creator>alex323qp</dc:creator>
      <dc:date>2016-01-06T21:26:11Z</dc:date>
    </item>
    <item>
      <title>Re: baremetal I2C bus lockup</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/baremetal-I2C-bus-lockup/m-p/491808#M30381</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Alex&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If you look at my post from 19th December you may find that I also had given the "correct answer" then.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Quote:&lt;/P&gt;&lt;P&gt;&lt;EM&gt;P.S. It may just be that your slave is not releasing the bus since slaves do 'clock-stretching' - not all I2C slaves in the kinetis family support this but if the KL25 slave doesn't release the bus after being addressed (by clearing the "addressed as slave flag) it will stop any further bus activity (forever) and the master is also blocked.&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mark&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 06 Jan 2016 23:00:56 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/baremetal-I2C-bus-lockup/m-p/491808#M30381</guid>
      <dc:creator>mjbcswitzerland</dc:creator>
      <dc:date>2016-01-06T23:00:56Z</dc:date>
    </item>
    <item>
      <title>Re: baremetal I2C bus lockup</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/baremetal-I2C-bus-lockup/m-p/491809#M30382</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Mark, you're right, I'm really sorry. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;After I read your post and checked the attachment, I got absorbed by it and spent the next few hours comparing your results with mine. I guess I completely missed that bit :smileyblush:.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I hope you don't mind leaving Jorge's response as the correct answer since it goes straight to the point? I believe it would help others find the solution more quickly.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;A.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 08 Jan 2016 05:43:41 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/baremetal-I2C-bus-lockup/m-p/491809#M30382</guid>
      <dc:creator>alex323qp</dc:creator>
      <dc:date>2016-01-08T05:43:41Z</dc:date>
    </item>
  </channel>
</rss>

