<?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>i.MX ProcessorsのトピックRe: Problem with I2C master receive</title>
    <link>https://community.nxp.com/t5/i-MX-Processors/Problem-with-I2C-master-receive/m-p/347610#M48121</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Andrew&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I would suggest to look at below links&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;A href="https://patchwork.ozlabs.org/patch/259971/" title="https://patchwork.ozlabs.org/patch/259971/"&gt;https://patchwork.ozlabs.org/patch/259971/&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;A href="http://www.spinics.net/lists/linux-i2c/msg12699.html" title="http://www.spinics.net/lists/linux-i2c/msg12699.html"&gt;Re: [PATCH] i2c: mxs: Rework the PIO mode operation -- Linux I2C&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best regards&lt;/P&gt;&lt;P&gt;igor&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sun, 21 Dec 2014 13:20:37 GMT</pubDate>
    <dc:creator>igorpadykov</dc:creator>
    <dc:date>2014-12-21T13:20:37Z</dc:date>
    <item>
      <title>Problem with I2C master receive</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/Problem-with-I2C-master-receive/m-p/347609#M48120</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I wonder if anyone can help with me with an issue I have. I am in the process of writing a I2C driver for our custom hardware using an i.MX287&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;We plan to use PIO mode and interrupts to handle the transmit / receive packets but for the moment we am not using interrupts - simply polling the appropriate flags between the various stages of the transaction. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am following the guidelines from the reference manual in the PIO mode section to read a byte from an EEPROM using master mode.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Here is my code :-&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #005032; font-family: Consolas; font-size: 10pt;"&gt;CRESULT&lt;/SPAN&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; &lt;STRONG&gt;I2C_Wait_DMAREQ&lt;/STRONG&gt;( &lt;/SPAN&gt;&lt;STRONG style="color: #7f0055; font-size: 10pt; font-family: Consolas;"&gt;void&lt;/STRONG&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; )&lt;/SPAN&gt; &lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;{&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;SPAN style="color: #005032; font-family: Consolas; font-size: 10pt;"&gt;U32&lt;/SPAN&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; timeout = *pSysCntRunVal;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;SPAN style="color: #005032; font-family: Consolas; font-size: 10pt;"&gt;U32&lt;/SPAN&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; status;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;SPAN style="color: #005032; font-family: Consolas; font-size: 10pt;"&gt;CRESULT&lt;/SPAN&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; result = &lt;/SPAN&gt;&lt;EM style="color: #0000c0; font-size: 10pt; font-family: Consolas;"&gt;EE_FAILURE&lt;/EM&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;STRONG style="color: #7f0055; font-size: 10pt; font-family: Consolas;"&gt;while&lt;/STRONG&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; ( *pSysCntRunVal &amp;lt; (timeout + 1000) )&lt;/SPAN&gt; &lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; {&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp; status = HW_I2C0_REGS-&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="color: #0000c0; font-family: Consolas; font-size: 10pt;"&gt;DEBUG0&lt;/SPAN&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG style="color: #7f0055; font-size: 10pt; font-family: Consolas;"&gt;if&lt;/STRONG&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; ( ( status &amp;amp; (1UL &amp;lt;&amp;lt; 31 ) ) == ( 1UL &amp;lt;&amp;lt; 31) )&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp; {&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; result = &lt;/SPAN&gt;&lt;EM style="color: #0000c0; font-size: 10pt; font-family: Consolas;"&gt;FOUND_OK&lt;/EM&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG style="color: #7f0055; font-size: 10pt; font-family: Consolas;"&gt;break&lt;/STRONG&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;}&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;STRONG style="color: #7f0055; font-size: 10pt; font-family: Consolas;"&gt;return&lt;/STRONG&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; result;&lt;/SPAN&gt; &lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;}&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="color: #7f0055; font-size: 10pt; font-family: Consolas;"&gt;void&lt;/STRONG&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; &lt;STRONG&gt;I2C_Clear_DMAREQ&lt;/STRONG&gt;( &lt;/SPAN&gt;&lt;STRONG style="color: #7f0055; font-size: 10pt; font-family: Consolas;"&gt;void&lt;/STRONG&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; )&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;{&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp; HW_I2C0_REGS-&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="color: #0000c0; font-family: Consolas; font-size: 10pt;"&gt;DEBUG0_CLR&lt;/SPAN&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; = ( 1UL &amp;lt;&amp;lt; 31 );&lt;/SPAN&gt; &lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;}&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #005032; font-family: Consolas; font-size: 10pt;"&gt;CRESULT&lt;/SPAN&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; &lt;STRONG&gt;I2C_Wait_COMPLETE&lt;/STRONG&gt;( &lt;/SPAN&gt;&lt;STRONG style="color: #7f0055; font-size: 10pt; font-family: Consolas;"&gt;void&lt;/STRONG&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; )&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;{&lt;/SPAN&gt; &lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;SPAN style="color: #005032; font-family: Consolas; font-size: 10pt;"&gt;U32&lt;/SPAN&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; timeout = *pSysCntRunVal;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;SPAN style="color: #005032; font-family: Consolas; font-size: 10pt;"&gt;U32&lt;/SPAN&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; status;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;SPAN style="color: #005032; font-family: Consolas; font-size: 10pt;"&gt;CRESULT&lt;/SPAN&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; result = &lt;/SPAN&gt;&lt;EM style="color: #0000c0; font-size: 10pt; font-family: Consolas;"&gt;EE_FAILURE&lt;/EM&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;STRONG style="color: #7f0055; font-size: 10pt; font-family: Consolas;"&gt;while&lt;/STRONG&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; ( *pSysCntRunVal &amp;lt; (timeout + 1000) )&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; {&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp; status = HW_I2C0_REGS-&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="color: #0000c0; font-family: Consolas; font-size: 10pt;"&gt;CTRL1&lt;/SPAN&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG style="color: #7f0055; font-size: 10pt; font-family: Consolas;"&gt;if&lt;/STRONG&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; ( ( status &amp;amp; ( 1 &amp;lt;&amp;lt; 6 ) ) == ( 1 &amp;lt;&amp;lt; 6 ) )&lt;/SPAN&gt; &lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp; {&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; result = &lt;/SPAN&gt;&lt;EM style="color: #0000c0; font-size: 10pt; font-family: Consolas;"&gt;FOUND_OK&lt;/EM&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG style="color: #7f0055; font-size: 10pt; font-family: Consolas;"&gt;break&lt;/STRONG&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt; &lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; }&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt; &lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;}&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; I2C_Clear_COMPLETE();&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;STRONG style="color: #7f0055; font-size: 10pt; font-family: Consolas;"&gt;return&lt;/STRONG&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; result;&lt;/SPAN&gt; &lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;}&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="color: #7f0055; font-size: 10pt; font-family: Consolas;"&gt;void&lt;/STRONG&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; &lt;STRONG&gt;I2C_Clear_COMPLETE&lt;/STRONG&gt;( &lt;/SPAN&gt;&lt;STRONG style="color: #7f0055; font-size: 10pt; font-family: Consolas;"&gt;void&lt;/STRONG&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; )&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;{&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp; HW_I2C0_REGS-&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="color: #0000c0; font-family: Consolas; font-size: 10pt;"&gt;CTRL1_CLR&lt;/SPAN&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; = ( 1 &amp;lt;&amp;lt; 6 );&lt;/SPAN&gt; &lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;}&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #005032; font-family: Consolas; font-size: 10pt;"&gt;CRESULT&lt;/SPAN&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; &lt;STRONG&gt;EE_ReadByte&lt;/STRONG&gt;( &lt;/SPAN&gt;&lt;SPAN style="color: #005032; font-family: Consolas; font-size: 10pt;"&gt;U16&lt;/SPAN&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; address, &lt;/SPAN&gt;&lt;SPAN style="color: #005032; font-family: Consolas; font-size: 10pt;"&gt;U8&lt;/SPAN&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; *data )&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;{&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #005032; font-family: Consolas; font-size: 10pt;"&gt;U32&lt;/SPAN&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; address_low = address &amp;amp; 0xff;&lt;/SPAN&gt; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #005032; font-family: Consolas; font-size: 10pt;"&gt;U32&lt;/SPAN&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; address_high = (address &amp;amp; 0xff00) &amp;gt;&amp;gt; 8;&lt;/SPAN&gt; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #005032; font-family: Consolas; font-size: 10pt;"&gt;U32&lt;/SPAN&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; temp = EE_I2C_ADDRESS | ( address_high &amp;lt;&amp;lt; 8 ) | ( address_low &amp;lt;&amp;lt; 16 );&lt;/SPAN&gt; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp; &lt;SPAN style="text-decoration: underline;"&gt;HW_I2C0_REGS-&amp;gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="text-decoration: underline;"&gt;&lt;SPAN style="color: #0000c0; font-family: Consolas; font-size: 10pt;"&gt;CTRL1&lt;/SPAN&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;= 0x08000000;&lt;/SPAN&gt;&lt;/SPAN&gt; &lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp; HW_I2C0_REGS-&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="color: #0000c0; font-family: Consolas; font-size: 10pt;"&gt;QUEUECTRL&lt;/SPAN&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;= 0x00000000;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #3f7f5f; font-family: Consolas; font-size: 10pt;"&gt;// prepare for transaction – master write mode with start bit and 3 bytes to transfer (i2c address + 16 bit EEPROM address followed by stop&lt;/SPAN&gt; &lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp; HW_I2C0_REGS-&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="color: #0000c0; font-family: Consolas; font-size: 10pt;"&gt;CTRL0&lt;/SPAN&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; = 0x001b0003;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #3f7f5f; font-family: Consolas; font-size: 10pt;"&gt;// run&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp; HW_I2C0_REGS-&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="color: #0000c0; font-family: Consolas; font-size: 10pt;"&gt;CTRL0_SET&lt;/SPAN&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; = ( 1 &amp;lt;&amp;lt; 29 );&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp; I2C_Wait_DMAREQ();&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #3f7f5f; font-family: Consolas; font-size: 10pt;"&gt;// write i2c address + EEPROM address&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt; &lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; HW_I2C0_REGS-&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="color: #0000c0; font-family: Consolas; font-size: 10pt;"&gt;DATA&lt;/SPAN&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; = temp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp; I2C_Clear_DMAREQ();&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp; I2C_Wait_COMPLETE();&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #3f7f5f; font-family: Consolas; font-size: 10pt;"&gt;// prepare for transaction - master write mode with start bit and i2c address&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp; HW_I2C0_REGS-&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="color: #0000c0; font-family: Consolas; font-size: 10pt;"&gt;CTRL0&lt;/SPAN&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; = 0x000b0001;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #3f7f5f; font-family: Consolas; font-size: 10pt;"&gt;// run&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp; HW_I2C0_REGS-&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="color: #0000c0; font-family: Consolas; font-size: 10pt;"&gt;CTRL0_SET&lt;/SPAN&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; = ( 1 &amp;lt;&amp;lt; 29 );&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp; I2C_Wait_DMAREQ();&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #3f7f5f; font-family: Consolas; font-size: 10pt;"&gt;// read i2c address&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt; &lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp; HW_I2C0_REGS-&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="color: #0000c0; font-family: Consolas; font-size: 10pt;"&gt;DATA&lt;/SPAN&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; = EE_I2C_ADDRESS + 1;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt; &lt;SPAN style="font-family: Consolas; font-size: 10pt;"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp; I2C_Clear_DMAREQ();&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt; &lt;SPAN style="font-family: Consolas; font-size: 10pt;"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: Consolas; font-size: 10pt;"&gt; &lt;/SPAN&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; I2C_Wait_COMPLETE();&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #3f7f5f; font-family: Consolas; font-size: 10pt;"&gt;// prepare for transaction - master read mode with one byte to transfer (i2c address) then stop&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; &lt;STRONG&gt;HW_I2C0_REGS-&amp;gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN style="color: #0000c0; font-family: Consolas; font-size: 10pt;"&gt;CTRL0&lt;/SPAN&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt; = 0x20120001;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp; &lt;STRONG&gt;I2C_Wait_DMAREQ();&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp; *data = (&lt;/SPAN&gt;&lt;SPAN style="color: #005032; font-family: Consolas; font-size: 10pt;"&gt;U8&lt;/SPAN&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;)HW_I2C0_REGS-&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="color: #0000c0; font-family: Consolas; font-size: 10pt;"&gt;DATA&lt;/SPAN&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: black; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp; I2C_Clear_DMAREQ();&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The start of this transaction seems to work OK. I am seeing the first 3 bytes being written (I2C address and internal EEPROM address followed by a stop). Then the read address is being written OK. Then it gets as far as the line highlighted in bold in the code which attempts to initiate the I2C read – the DMAREQ bit doesn’t seem to assert after this. On a scope I can see that no clocks are being generated to receive the data and the SDA line remains low. The bus busy bit in the status register suggests the bus is still busy. I am unsure what is preventing the read from starting.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Before using the above code I reset the I2C block and set it up (for 100Kbps).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Any help anyone can give would be greatly appreciated. We have spent many days searching forums and looking at Linux drivers for possible clues with no luck.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 12 Dec 2014 11:35:02 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/Problem-with-I2C-master-receive/m-p/347609#M48120</guid>
      <dc:creator>andrewgoodings</dc:creator>
      <dc:date>2014-12-12T11:35:02Z</dc:date>
    </item>
    <item>
      <title>Re: Problem with I2C master receive</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/Problem-with-I2C-master-receive/m-p/347610#M48121</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Andrew&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I would suggest to look at below links&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;A href="https://patchwork.ozlabs.org/patch/259971/" title="https://patchwork.ozlabs.org/patch/259971/"&gt;https://patchwork.ozlabs.org/patch/259971/&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;A href="http://www.spinics.net/lists/linux-i2c/msg12699.html" title="http://www.spinics.net/lists/linux-i2c/msg12699.html"&gt;Re: [PATCH] i2c: mxs: Rework the PIO mode operation -- Linux I2C&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best regards&lt;/P&gt;&lt;P&gt;igor&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 21 Dec 2014 13:20:37 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/Problem-with-I2C-master-receive/m-p/347610#M48121</guid>
      <dc:creator>igorpadykov</dc:creator>
      <dc:date>2014-12-21T13:20:37Z</dc:date>
    </item>
  </channel>
</rss>

