<?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: MQX 4.1.1 I2C-&amp;gt;EEPROM in MQX Software Solutions</title>
    <link>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376161#M12535</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;I am glad that it works now.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I would like to recommend for example this course:&lt;/P&gt;&lt;P&gt;&lt;A href="https://community.nxp.com/www.freescale.com/webapp/sps/site/training_information.jsp?code=WBT_MQX_RTOS_COURSE" target="test_blank"&gt;www.freescale.com/webapp/sps/site/training_information.jsp?code=WBT_MQX_RTOS_COURSE&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Documentation you can find in MQX root dir/Doc&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You can also additionally look at some Application notes:&lt;/P&gt;&lt;P&gt;&lt;A href="http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=MQX&amp;amp;nodeId=01521060795BB6&amp;amp;fpsp=1&amp;amp;tab=Documentation_Tab#nogo" title="http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=MQX&amp;amp;nodeId=01521060795BB6&amp;amp;fpsp=1&amp;amp;tab=Documentation_Tab#nogo"&gt;Freescale MQX™ Software Solutions|Freescale&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I hope it helps you.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 05 Mar 2015 09:46:09 GMT</pubDate>
    <dc:creator>RadekS</dc:creator>
    <dc:date>2015-03-05T09:46:09Z</dc:date>
    <item>
      <title>MQX 4.1.1 I2C-&gt;EEPROM</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376133#M12507</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I try to use MK70 to control an EEPROM via I2C Interface. I use the MQX I2C sample code. The code below is how it polls in i2c_write_eeprom() function. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Wait for EEPROM write cycle finish - acknowledge */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; result = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp; /* Sends just I2C bus address, returns acknowledge bit and stops */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fwrite (&amp;amp;result, 1, 0, fd);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (I2C_OK != ioctl (fd, IO_IOCTL_FLUSH_OUTPUT, &amp;amp;param))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("&amp;nbsp; ERROR during wait (flush)\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (I2C_OK != ioctl (fd, IO_IOCTL_I2C_STOP, NULL))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("&amp;nbsp; ERROR during wait (stop)\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; result++;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("param:%d", param);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } while ((param &amp;amp; 1) || (result &amp;gt;= 1));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;It will fail if I use i2c_read_eeprom() function immediately after i2c_write_eeprom() function. The terminal shows "Write to address 0x001a ... ERROR". However, if I add _time_delay(1) at the bottom of i2c_write_eeprom(), then the i2c_read_eeprom() will work successfully. Is there any solution to check whether EEPROM write cycle is finished since I don't want to use _time_delay()? Like check the flag or something else.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 04 Nov 2014 03:20:27 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376133#M12507</guid>
      <dc:creator>josephchen</dc:creator>
      <dc:date>2014-11-04T03:20:27Z</dc:date>
    </item>
    <item>
      <title>Re: MQX 4.1.1 I2C-&gt;EEPROM</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376134#M12508</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Sorry, the MCU I use is MK61.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 04 Nov 2014 03:21:12 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376134#M12508</guid>
      <dc:creator>josephchen</dc:creator>
      <dc:date>2014-11-04T03:21:12Z</dc:date>
    </item>
    <item>
      <title>Re: Re: MQX 4.1.1 I2C-&gt;EEPROM</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376135#M12509</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;It depends on EEPROM memory which you want program.&lt;/P&gt;&lt;P&gt;For example I2C EEPROM 24LC32 offers two ways how to wait for write finish:&lt;/P&gt;&lt;OL style="list-style-type: decimal;"&gt;&lt;LI&gt;Datasheet says that you should wait 5ms per page of 8 bytes. Multiply by the number of pages loaded into the write cache for total time.&lt;/LI&gt;&lt;LI&gt;Chapter 5 says: Since the device will not acknowledge during a write cycle, this can be used to determine when the cycle is complete (this feature can be used to maximize bus throughput).&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So, you can send control byte (start+control byte with write command (R/W = 0)) in the loop and waits for ACK.&lt;/P&gt;&lt;P&gt;Now, how to do it?&lt;/P&gt;&lt;P&gt;I would like to recommend add code where we set slave address by IO_IOCTL_I2C_SET_DESTINATION_ADDRESS ioctl command and create loop where we send this byte and check ACK by IO_IOCTL_FLUSH_OUTPUT ioctl command. IO_IOCTL_FLUSH_OUTPUT ioctl command returns I2Cx_S[RXAK] bit as parameter and this parameter could be used in loop condition. See code below:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_text_macro jive_macro_code _jivemacro_uid_14151946513629562" jivemacro_uid="_14151946513629562" modifiedtitle="true"&gt;
&lt;P&gt;//&lt;/P&gt;
&lt;P&gt;/*[Code for write to EEPROM]*/&lt;/P&gt;
&lt;P&gt;//&lt;/P&gt;
&lt;P&gt;/* Wait for EEPROM write cycle finish - acknowledge */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp; /* Sends just I2C bus address, returns acknowledge bit and stops */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fwrite (&amp;amp;result, 1, 0, fd);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (I2C_OK != ioctl (fd, IO_IOCTL_FLUSH_OUTPUT, &amp;amp;param))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("&amp;nbsp; ERROR during wait (flush)\n");&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (I2C_OK != ioctl (fd, IO_IOCTL_I2C_STOP, NULL))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("&amp;nbsp; ERROR during wait (stop)\n");&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } while ((param &amp;amp; 1) || (result &amp;lt;= 1));&lt;/P&gt;

&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Have a great day,&lt;BR /&gt;RadekS&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;-----------------------------------------------------------------------------------------------------------------------&lt;BR /&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 05 Nov 2014 13:38:04 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376135#M12509</guid>
      <dc:creator>RadekS</dc:creator>
      <dc:date>2014-11-05T13:38:04Z</dc:date>
    </item>
    <item>
      <title>Re: Re: MQX 4.1.1 I2C-&gt;EEPROM</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376136#M12510</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;This was exactly the code I used, but it failed. &lt;SPAN style="color: #3d3d3d; font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; font-size: 13.3333330154419px;"&gt; IO_IOCTL_FLUSH_OUTPUT returns 0 to the parameter from the beginning, so it doesn't get ack bit at all. The EEPROM I use is AT24C512C. Here's what its data sheet says:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Byte Write:&lt;/STRONG&gt; A Byte Write operation requires two 8-bit data word addresses following the device address word and&lt;/P&gt;&lt;P&gt;acknowledgment. Upon receipt of this address, the EEPROM will again respond with a zero, and then the part is to&lt;/P&gt;&lt;P&gt;receive an 8-bit data word. Following receipt of the 8-bit data word, the EEPROM will output a zero. The addressing&lt;/P&gt;&lt;P&gt;device, such as a microcontroller, then must terminate the write sequence with a Stop condition. At this time, the&lt;/P&gt;&lt;P&gt;EEPROM enters an internally-timed write cycle, t WR , to the nonvolatile memory. All inputs are disabled during this write&lt;/P&gt;&lt;P&gt;cycle, and the EEPROM will not respond until the write is complete).&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Acknowledge Polling:&lt;/STRONG&gt; Once the internally-timed write cycle has started and the EEPROM inputs are disabled,&lt;/P&gt;&lt;P&gt;Acknowledge Polling can be initiated. This involves sending a Start condition followed by the device address word. The&lt;/P&gt;&lt;P&gt;read/write select bit is representative of the operation desired. Only if the internal write cycle has completed will the&lt;/P&gt;&lt;P&gt;EEPROM respond with a zero, allowing the read or write sequence to continue.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;How should I do?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 05 Nov 2014 13:59:10 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376136#M12510</guid>
      <dc:creator>josephchen</dc:creator>
      <dc:date>2014-11-05T13:59:10Z</dc:date>
    </item>
    <item>
      <title>Re: MQX 4.1.1 I2C-&gt;EEPROM</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376137#M12511</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;It is correct that IO_IOCTL_FLUSH_OUTPUT returns 0 to the param from the beginning.&lt;/P&gt;&lt;P&gt;We have to wait until it returns 1 (until EEPROM sends ACK back).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I see that your code contains this line:&lt;/P&gt;&lt;P&gt;} while ((param &amp;amp; 1) || (result &amp;gt;= 1));&lt;/P&gt;&lt;P&gt;However my code contains line:&lt;/P&gt;&lt;P&gt;} while ((param &amp;amp; 1) || (result &amp;lt;= 1)); &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Please check result value.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 05 Nov 2014 15:11:43 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376137#M12511</guid>
      <dc:creator>RadekS</dc:creator>
      <dc:date>2014-11-05T15:11:43Z</dc:date>
    </item>
    <item>
      <title>Re: MQX 4.1.1 I2C-&gt;EEPROM</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376138#M12512</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I still have questions. First, should the result be set to zero before loop? Second, doesn't the result need ++result within the loop? The question that confuses me the most is that since we're waiting until it return 1 to the param from IO_IOCTL_FLUSH_OUTPUT, how come the condition in while loop is "(param &amp;amp; 1)". If the param becomes 1, then 1 &amp;amp; 1 will result in true so it can't get off the loop. Why it's not "while (param != 1) "?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 05 Nov 2014 15:35:39 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376138#M12512</guid>
      <dc:creator>josephchen</dc:creator>
      <dc:date>2014-11-05T15:35:39Z</dc:date>
    </item>
    <item>
      <title>Re: Re: MQX 4.1.1 I2C-&gt;EEPROM</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376139#M12513</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;You are right. I made mistakes and in my both previous answers. I forget delete result from while loop.&lt;/P&gt;&lt;P&gt;And you are right IO_IOCTL_FLUSH_OUTPUT returns 1 when no acknowledge signal detected.&lt;/P&gt;&lt;P&gt;So, it should be:&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_text_macro jive_macro_code _jivemacro_uid_14152053400418150" jivemacro_uid="_14152053400418150"&gt;
&lt;P&gt;result = 0;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp; /* Sends just I2C bus address, returns acknowledge bit and stops */&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fwrite (&amp;amp;result, 1, 0, fd);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (I2C_OK != ioctl (fd, IO_IOCTL_FLUSH_OUTPUT, &amp;amp;param))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("&amp;nbsp; ERROR during wait (flush)\n");&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (I2C_OK != ioctl (fd, IO_IOCTL_I2C_STOP, NULL))&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("&amp;nbsp; ERROR during wait (stop)\n");&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; result++;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } while ((param &amp;amp; 1) || (result &amp;lt;= 1));&lt;/P&gt;
&lt;/PRE&gt;&lt;P&gt;Is it possible check EEPROM behavior by oscilloscope/logic analyzer?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 05 Nov 2014 16:35:49 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376139#M12513</guid>
      <dc:creator>RadekS</dc:creator>
      <dc:date>2014-11-05T16:35:49Z</dc:date>
    </item>
    <item>
      <title>Re: Re: MQX 4.1.1 I2C-&gt;EEPROM</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376140#M12514</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I'll try to use oscilloscope to detect the problems. I found out that if I set the baud rate to 9600, it would success. Originally, I set it to above 100000. However, it ought to workable even up to 400000 generally. Is it possible to be the problem caused by clock configuration? If so, how to configure it since my clock configuration is generated by PE. Which file should I modify (maybe bsp_cm.h, bsp_cm.c) and how to do it?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 05 Nov 2014 23:30:13 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376140#M12514</guid>
      <dc:creator>josephchen</dc:creator>
      <dc:date>2014-11-05T23:30:13Z</dc:date>
    </item>
    <item>
      <title>Re: Re: MQX 4.1.1 I2C-&gt;EEPROM</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376141#M12515</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Radek,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I found out another solution. If I change the line "fwrite(&amp;amp;result, 1, 0, fd)" to ""fwrite(&amp;amp;result, 1, 1, fd)", it will successfully return ack bit 1 and then eventually return 0 after a few poll times. Is it the right way to solve the problem since if I use "fwrite(&amp;amp;result, 1, 0, fd)", it will always return 0 which represents that it get ack bit, but in fact it doesn't. What's your opinion?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Joseph&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 06 Nov 2014 00:58:41 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376141#M12515</guid>
      <dc:creator>josephchen</dc:creator>
      <dc:date>2014-11-06T00:58:41Z</dc:date>
    </item>
    <item>
      <title>Re: MQX 4.1.1 I2C-&gt;EEPROM</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376142#M12516</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I suppose that you just put time delay by decreasing I2C baudrate.&lt;/P&gt;&lt;P&gt;10bit /9600bitps=1.04ms&lt;/P&gt;&lt;P&gt;With some overhead, it will just add time for finish byte write.&lt;/P&gt;&lt;P&gt;So, this isn’t solution.&lt;/P&gt;&lt;P&gt;I2C baud rate you can change by IO_IOCTL_I2C_SET_BAUD and read back real baud rate by IO_IOCTL_I2C_GET_BAUD &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 06 Nov 2014 15:07:28 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376142#M12516</guid>
      <dc:creator>RadekS</dc:creator>
      <dc:date>2014-11-06T15:07:28Z</dc:date>
    </item>
    <item>
      <title>Re: MQX 4.1.1 I2C-&gt;EEPROM</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376143#M12517</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I am not sure, this has to be checked on oscilloscope - if "fwrite(&amp;amp;result, 1, 0, fd)" sends first byte (with slave address) and there is error in driver (return that ACK was received) or if only "fwrite(&amp;amp;result, 1, 1, fd)" sends this first byte.&lt;/P&gt;&lt;P&gt;If first option is valid, we have to modify I2c driver code.&lt;/P&gt;&lt;P&gt;If second option is valid, we have to modify I2c example code.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 06 Nov 2014 15:33:02 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376143#M12517</guid>
      <dc:creator>RadekS</dc:creator>
      <dc:date>2014-11-06T15:33:02Z</dc:date>
    </item>
    <item>
      <title>Re: MQX 4.1.1 I2C-&gt;EEPROM</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376144#M12518</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Yeah, I agree it. Changing baud rate is not the proper solution. It just slows down the byte write cycle and it's still risky.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 06 Nov 2014 15:43:57 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376144#M12518</guid>
      <dc:creator>josephchen</dc:creator>
      <dc:date>2014-11-06T15:43:57Z</dc:date>
    </item>
    <item>
      <title>Re: MQX 4.1.1 I2C-&gt;EEPROM</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376145#M12519</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;According to my eeprom data sheet, the write cycle contains ack bit in after each 8-bit data. Start -&amp;gt; 7-bit slave address + 1 write/read bit -&amp;gt; Ack -&amp;gt; First word address -&amp;gt; Ack -&amp;gt; Second word address -&amp;gt; Ack -&amp;gt; Data -&amp;gt; Ack -&amp;gt; ......-&amp;gt; Ack -&amp;gt;Stop.&lt;/P&gt;&lt;P&gt;What I think is that if I use "fwrite(&amp;amp;result, 1, 1, fd)", the I2C low level driver will send both slave address and first word address. But if I use "fwrite(&amp;amp;result, 1, 0, fd)", then it will send nothing (even the slave address with 1-bit r/w is not sent). Is there any specific way to modify BSP to let "fwrite(&amp;amp;result, 1, 0, fd)" send the 7-bit slave address + 1-bit r/w so it can get Ack bit? Should I modify the file under mqx/source/io/i2c or any other files and then rebuild it?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 06 Nov 2014 15:57:10 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376145#M12519</guid>
      <dc:creator>josephchen</dc:creator>
      <dc:date>2014-11-06T15:57:10Z</dc:date>
    </item>
    <item>
      <title>Re: MQX 4.1.1 I2C-&gt;EEPROM</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376146#M12520</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;/*FUNCTION****************************************************************&lt;/P&gt;&lt;P&gt;* &lt;/P&gt;&lt;P&gt;* Function Name&amp;nbsp;&amp;nbsp;&amp;nbsp; : _ki2c_int_tx&lt;/P&gt;&lt;P&gt;* Returned Value&amp;nbsp;&amp;nbsp; : number of bytes written&lt;/P&gt;&lt;P&gt;* Comments&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : &lt;/P&gt;&lt;P&gt;*&amp;nbsp;&amp;nbsp; Returns the number of bytes written.&lt;/P&gt;&lt;P&gt;*&amp;nbsp;&amp;nbsp; Writes the data provided into transmition buffer if available.&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;*END*********************************************************************/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;uint32_t _ki2c_int_tx&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; (&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* [IN] the address of the device specific information */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IO_I2C_INT_DEVICE_STRUCT_PTR int_io_dev_ptr,&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; /* [IN] The array characters are to be read from */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned char&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; *buffer,&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;&amp;nbsp;&amp;nbsp; /* [IN] number of bytes to output */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t&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; length&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; )&lt;/P&gt;&lt;P&gt;{ /* Body */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; VKI2C_INFO_STRUCT_PTR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; io_info_ptr;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; I2C_MemMapPtr&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; i2c_ptr;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; uint32_t&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; tmp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; io_info_ptr&amp;nbsp; = int_io_dev_ptr-&amp;gt;DEV_INFO_PTR;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; i2c_ptr = io_info_ptr-&amp;gt;I2C_PTR;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* Critical section + avoiding spurious interrupt */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; _int_disable ();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; _bsp_int_disable (io_info_ptr-&amp;gt;VECTOR);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; _int_enable ();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* If beginning of transmission, set state and send address (master only) */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; io_info_ptr-&amp;gt;OPERATION &amp;amp;= (~ I2C_OPERATION_READ);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; io_info_ptr-&amp;gt;TX_BUFFER&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = buffer;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; io_info_ptr-&amp;gt;TX_BUFFER_SIZE = length;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; io_info_ptr-&amp;gt;TX_INDEX&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; tmp = io_info_ptr-&amp;gt;STATE;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; if (I2C_MODE_MASTER == io_info_ptr-&amp;gt;MODE)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((I2C_STATE_READY == tmp) || (I2C_STATE_REPEATED_START == tmp))&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i2c_ptr-&amp;gt;C1 |= I2C_C1_TX_MASK;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i2c_ptr-&amp;gt;S |= I2C_S_IICIF_MASK;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (I2C_STATE_REPEATED_START == tmp)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i2c_ptr-&amp;gt;C1 |= I2C_C1_RSTA_MASK;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i2c_ptr-&amp;gt;C1 |= I2C_C1_MST_MASK;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; io_info_ptr-&amp;gt;OPERATION |= I2C_OPERATION_STARTED;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i2c_ptr-&amp;gt;D = (io_info_ptr-&amp;gt;ADDRESSEE &amp;lt;&amp;lt; 1) | I2C_OPERATION_WRITE;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; io_info_ptr-&amp;gt;STATISTICS.TX_PACKETS++;&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;&amp;nbsp;&amp;nbsp; else if(I2C_STATE_TRANSMIT == tmp)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(length != 0)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* send first byte */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i2c_ptr-&amp;gt;D = io_info_ptr-&amp;gt;TX_BUFFER[io_info_ptr-&amp;gt;TX_INDEX++];&amp;nbsp;&amp;nbsp; /*&amp;nbsp; transmit data */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; io_info_ptr-&amp;gt;STATISTICS.TX_PACKETS++;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&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; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* Interrupt enable - end of critical section */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; _bsp_int_enable (io_info_ptr-&amp;gt;VECTOR);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* Wait for tx complite */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; _lwsem_wait((LWSEM_STRUCT_PTR)(&amp;amp;(io_info_ptr-&amp;gt;LWSEM)));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; return io_info_ptr-&amp;gt;TX_INDEX;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;} /* Endbody */&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The code above is the function implementation called by fwrite written in mqx/source/io/i2c/int/i2c_int_ki2c.c. I guess it's probably what I need to modify since I'm using interrupt I2C. The code is from MQX version 4.1.1. I notice that it contains &lt;/P&gt;&lt;P&gt;else if(I2C_STATE_TRANSMIT == tmp)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(length != 0)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* send first byte */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i2c_ptr-&amp;gt;D = io_info_ptr-&amp;gt;TX_BUFFER[io_info_ptr-&amp;gt;TX_INDEX++];&amp;nbsp;&amp;nbsp; /*&amp;nbsp; transmit data */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; io_info_ptr-&amp;gt;STATISTICS.TX_PACKETS++;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Maybe it's the reason why I use "fwrite(&amp;amp;result, 1, 0, fd)" and it sends nothing. If so, how to change it?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 06 Nov 2014 23:28:39 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376146#M12520</guid>
      <dc:creator>josephchen</dc:creator>
      <dc:date>2014-11-06T23:28:39Z</dc:date>
    </item>
    <item>
      <title>Re: MQX 4.1.1 I2C-&gt;EEPROM</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376147#M12521</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I could confirm that fwrite (&amp;amp;result, 1, 0, fd); will generate one byte at I2C pins.&lt;/P&gt;&lt;P&gt;Additionally&amp;nbsp; I also test that IO_IOCTL_FLUSH_OUTPUT correctly returns 0x00 in case of ACK and 0x01 in case of NACK.&lt;/P&gt;&lt;P&gt;So, it should work.&lt;/P&gt;&lt;P&gt;Could you please check it on your side by oscilloscope?&lt;/P&gt;&lt;P&gt;Please check also I2C pull-ups and cable length. I would like to recommend for example 2K2 pull-ups and length (between MCU and EEPROM) below 0.5m.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 07 Nov 2014 15:25:26 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376147#M12521</guid>
      <dc:creator>RadekS</dc:creator>
      <dc:date>2014-11-07T15:25:26Z</dc:date>
    </item>
    <item>
      <title>Re: MQX 4.1.1 I2C-&gt;EEPROM</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376148#M12522</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello RadekS,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I ran into the similar problem the I2C driver can successfully operate accelerometer,but for E2PROM operation,the program ran into "&lt;SPAN style="color: #3d3d3d; font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif;"&gt;Write to address 0x001a ... ERROR&lt;/SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; so,what should I do for this,can you give me some advice?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Thks!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Have a good day !&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best Regards&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 04 Mar 2015 06:52:41 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376148#M12522</guid>
      <dc:creator>tongjianwu</dc:creator>
      <dc:date>2015-03-04T06:52:41Z</dc:date>
    </item>
    <item>
      <title>Re: MQX 4.1.1 I2C-&gt;EEPROM</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376149#M12523</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Jianwu,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The final way I solve this problem is to replace the I2C driver to the one in MQX 4.1.1. You may try on this.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Kind Regards,&lt;/P&gt;&lt;P&gt;Joseph Chen&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 04 Mar 2015 07:26:38 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376149#M12523</guid>
      <dc:creator>josephchen</dc:creator>
      <dc:date>2015-03-04T07:26:38Z</dc:date>
    </item>
    <item>
      <title>Re: MQX 4.1.1 I2C-&gt;EEPROM</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376150#M12524</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;hello,&lt;SPAN style="color: #3d3d3d; font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; font-size: 14px;"&gt;Joseph&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Thks for your reply!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; now,I use MQX 4.1.1,but the problem still exist.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I find one program for accelerometer,using the I2C driver of MQX 4.1.1,can ran normally,but not working for E2PROM .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I think no matter what I2C device is used, it should comply with the I2C protocol.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; now , I don't find one breakpoint.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I use the MQX 4.1.1 example for I2C,but I find it's not work for E2PROM.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Can you give me some example for operating the I2C E2PROM?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Thks!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best Regards&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 04 Mar 2015 10:05:24 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376150#M12524</guid>
      <dc:creator>tongjianwu</dc:creator>
      <dc:date>2015-03-04T10:05:24Z</dc:date>
    </item>
    <item>
      <title>Re: MQX 4.1.1 I2C-&gt;EEPROM</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376151#M12525</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;/*HEADER**********************************************************************&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;* Copyright 2008 Freescale Semiconductor, Inc.&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;* This software is owned or controlled by Freescale Semiconductor.&lt;/P&gt;&lt;P&gt;* Use of this software is governed by the Freescale MQX RTOS License&lt;/P&gt;&lt;P&gt;* distributed with this Material.&lt;/P&gt;&lt;P&gt;* See the MQX_RTOS_LICENSE file distributed for more details.&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;* Brief License Summary:&lt;/P&gt;&lt;P&gt;* This software is provided in source form for you to use free of charge,&lt;/P&gt;&lt;P&gt;* but it is not open source software. You are allowed to use this software&lt;/P&gt;&lt;P&gt;* but you cannot redistribute it or derivative works of it in source form.&lt;/P&gt;&lt;P&gt;* The software may be used only in connection with a product containing&lt;/P&gt;&lt;P&gt;* a Freescale microprocessor, microcontroller, or digital signal processor.&lt;/P&gt;&lt;P&gt;* See license agreement file for full license terms including other&lt;/P&gt;&lt;P&gt;* restrictions.&lt;/P&gt;&lt;P&gt;*****************************************************************************&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;* Comments:&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;*&amp;nbsp;&amp;nbsp; This file contains read/write functions to access I2C EEPROMs&lt;/P&gt;&lt;P&gt;*&amp;nbsp;&amp;nbsp; using I2C driver.&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;*END************************************************************************/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#include &amp;lt;mqx.h&amp;gt;&lt;/P&gt;&lt;P&gt;#include &amp;lt;bsp.h&amp;gt;&lt;/P&gt;&lt;P&gt;#include &amp;lt;i2c.h&amp;gt;&lt;/P&gt;&lt;P&gt;#include "I2C_EEPROM.h"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*FUNCTION****************************************************************&lt;/P&gt;&lt;P&gt;* &lt;/P&gt;&lt;P&gt;* Function Name&amp;nbsp;&amp;nbsp;&amp;nbsp; : i2c_write_eeprom&lt;/P&gt;&lt;P&gt;* Returned Value&amp;nbsp;&amp;nbsp; : void&lt;/P&gt;&lt;P&gt;* Comments&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : &lt;/P&gt;&lt;P&gt;*&amp;nbsp;&amp;nbsp; Writes the provided data buffer at address in I2C EEPROMs&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;*END*********************************************************************/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void i2c_write_eeprom&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; (&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* [IN] The file pointer for the I2C channel */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MQX_FILE_PTR&amp;nbsp;&amp;nbsp; fd,&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; /* [IN] The address in EEPROM to write to */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addr,&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; /* [IN] The array of characters are to be written in EEPROM */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned char&amp;nbsp; *buffer,&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; /* [IN] Number of bytes in that buffer */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _mqx_int&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; n&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; )&lt;/P&gt;&lt;P&gt;{ /* Body */&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; uint32_t&amp;nbsp;&amp;nbsp;&amp;nbsp; param;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; _mqx_int&amp;nbsp;&amp;nbsp;&amp;nbsp; length;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; _mqx_int&amp;nbsp;&amp;nbsp;&amp;nbsp; result;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; uint8_t&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mem[I2C_EEPROM_MEMORY_WIDTH];&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* Protect I2C transaction in multitask environment */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; _lwsem_wait (&amp;amp;lock);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; printf ("Writing %d bytes to address 0x%08x ...\n", n, addr);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; do&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* I2C bus address also contains memory block index */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; param = I2C_EEPROM_BUS_ADDRESS;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("&amp;nbsp; Set I2C bus address to 0x%02x ... ", param);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (I2C_OK == ioctl (fd, IO_IOCTL_I2C_SET_DESTINATION_ADDRESS, &amp;amp;param))&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("OK\n");&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;&amp;nbsp; printf ("ERROR\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&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; length = (_mqx_int)(I2C_EEPROM_PAGE_SIZE - (addr &amp;amp; (I2C_EEPROM_PAGE_SIZE - 1)));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (length &amp;gt; n) length = n;&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; /* Write address within memory block */&lt;/P&gt;&lt;P&gt;#if I2C_EEPROM_MEMORY_WIDTH == 2&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mem[0] = (uint8_t)(addr &amp;gt;&amp;gt; 8);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mem[1] = (uint8_t)addr;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("&amp;nbsp; Write to address 0x%02x%02x ... ", mem[0], mem[1]);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; result = fwrite (mem, 1, 2, fd);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (2 == result)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("OK\n");&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;&amp;nbsp; printf ("ERROR\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;#else&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mem[0] = (uint8_t)addr;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("&amp;nbsp; Write to address 0x%02x ... ", mem[0]);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; result = fwrite (mem, 1, 1, fd);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (1 == result)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("OK\n");&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;&amp;nbsp; printf ("ERROR\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;#endif&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; /* Page write of data */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("&amp;nbsp; Page write %d bytes ... ", length);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; result = fwrite (buffer, 1, length, fd);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (result == length)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("OK\n");&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;&amp;nbsp; printf ("ERROR\n");&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;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Wait for completion */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("&amp;nbsp; Flush ... ");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; result = fflush (fd);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (MQX_OK == result)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("OK\n");&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;&amp;nbsp; printf ("ERROR\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&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; /* Stop I2C transfer - initiate EEPROM write cycle */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("&amp;nbsp; Stop transfer ... ");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (I2C_OK == ioctl (fd, IO_IOCTL_I2C_STOP, NULL))&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("OK\n");&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;&amp;nbsp; printf ("ERROR\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&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; /* Wait for EEPROM write cycle finish - acknowledge */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; result = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp; /* Sends just I2C bus address, returns acknowledge bit and stops */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fwrite (&amp;amp;result, 1, 0, fd);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (I2C_OK != ioctl (fd, IO_IOCTL_FLUSH_OUTPUT, &amp;amp;param))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("&amp;nbsp; ERROR during wait (flush)\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (I2C_OK != ioctl (fd, IO_IOCTL_I2C_STOP, NULL))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("&amp;nbsp; ERROR during wait (stop)\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; result++;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } while ((param &amp;amp; 1) || (result &amp;lt;= 1));&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;&amp;nbsp;&amp;nbsp; printf ("&amp;nbsp; EEPROM polled %d times.\n", result);&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; /* Next round */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; buffer += length;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addr += length;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; n -= length;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; } while (n);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* Release the transaction lock */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; _lwsem_post (&amp;amp;lock);&lt;/P&gt;&lt;P&gt;} /* Endbody */&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;/*FUNCTION****************************************************************&lt;/P&gt;&lt;P&gt;* &lt;/P&gt;&lt;P&gt;* Function Name&amp;nbsp;&amp;nbsp;&amp;nbsp; : i2c_read_eeprom&lt;/P&gt;&lt;P&gt;* Returned Value&amp;nbsp;&amp;nbsp; : void&lt;/P&gt;&lt;P&gt;* Comments&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : &lt;/P&gt;&lt;P&gt;*&amp;nbsp;&amp;nbsp; Reads into the provided data buffer from address in I2C EEPROM&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;*END*********************************************************************/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void i2c_read_eeprom&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; (&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* [IN] The file pointer for the I2C channel */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MQX_FILE_PTR&amp;nbsp;&amp;nbsp; fd,&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; /* [IN] The address in EEPROM to read from */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addr,&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; /* [IN] The array of characters to be written into */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned char&amp;nbsp; *buffer,&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; /* [IN] Number of bytes to read */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _mqx_int&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; n&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; )&lt;/P&gt;&lt;P&gt;{ /* Body */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; _mqx_int&amp;nbsp;&amp;nbsp;&amp;nbsp; param;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; _mqx_int&amp;nbsp;&amp;nbsp;&amp;nbsp; result;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; uint8_t&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mem[I2C_EEPROM_MEMORY_WIDTH];&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; printf ("Reading %d bytes from address 0x%08x ...\n", n, addr);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; if (0 == n) &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("&amp;nbsp; Nothing to do.\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* Protect I2C transaction in multitask environment */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; _lwsem_wait (&amp;amp;lock);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* I2C bus address also contains memory block index */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; param = I2C_EEPROM_BUS_ADDRESS;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; printf ("&amp;nbsp; Set I2C bus address to 0x%02x ... ", param);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; if (I2C_OK == ioctl (fd, IO_IOCTL_I2C_SET_DESTINATION_ADDRESS, &amp;amp;param))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("OK\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; } else {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("ERROR\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* Write address within memory block */&lt;/P&gt;&lt;P&gt;#if I2C_EEPROM_MEMORY_WIDTH == 2&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mem[0] = (uint8_t)(addr &amp;gt;&amp;gt; 8);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mem[1] = (uint8_t)addr;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("&amp;nbsp; Write to address 0x%02x%02x ... ", mem[0], mem[1]);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; result = fwrite (mem, 1, 2, fd);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (2 == result)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("OK\n");&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;&amp;nbsp; printf ("ERROR\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;#else&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mem[0] = (uint8_t)addr;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("&amp;nbsp; Write to address 0x%02x ... ", mem[0]);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; result = fwrite (mem, 1, 1, fd);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (1 == result)&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("OK\n");&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;&amp;nbsp; printf ("ERROR\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;#endif&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* Wait for completion */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; printf ("&amp;nbsp; Flush ... ");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; result = fflush (fd);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; if (MQX_OK == result)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("OK\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; } else {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("ERROR\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* Restart I2C transfer for reading */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; printf ("&amp;nbsp; Initiate repeated start ... ");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; if (I2C_OK == ioctl (fd, IO_IOCTL_I2C_REPEATED_START, NULL))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("OK\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; } else {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("ERROR\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* Set read request */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; param = n;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; printf ("&amp;nbsp; Set number of bytes requested to %d ... ", param);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; if (I2C_OK == ioctl (fd, IO_IOCTL_I2C_SET_RX_REQUEST, &amp;amp;param))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("OK\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; } else {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("ERROR\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* Read all data */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; printf ("&amp;nbsp; Read %d bytes ... ", n);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; result = fread (buffer, 1, n, fd);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; if (result == n)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("OK\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; } else {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("ERROR\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; }&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; /* Stop I2C transfer - initiate EEPROM write cycle */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; printf ("&amp;nbsp; Stop transfer ... ");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; if (I2C_OK == ioctl (fd, IO_IOCTL_I2C_STOP, NULL))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("OK\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; } else {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("ERROR\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* Release the transaction lock */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; _lwsem_post (&amp;amp;lock);&lt;/P&gt;&lt;P&gt;} /* Endbody */&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 04 Mar 2015 10:25:42 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376151#M12525</guid>
      <dc:creator>josephchen</dc:creator>
      <dc:date>2015-03-04T10:25:42Z</dc:date>
    </item>
    <item>
      <title>Re: MQX 4.1.1 I2C-&gt;EEPROM</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376152#M12526</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Joseph,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Thks for your code !&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; what baudrate do you use? &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Just now,I try your code and the result is the same running wrongly.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Should I add time delay between write and read function?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; So I think whether something wrong with my hardware?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; My hardware situation is based on TWR-K70F120M,using the I2C0 channel which the accelerometer uses.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; E2PROM AT24C02,device address '0xA0'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best Regards&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 04 Mar 2015 11:22:42 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-4-1-1-I2C-gt-EEPROM/m-p/376152#M12526</guid>
      <dc:creator>tongjianwu</dc:creator>
      <dc:date>2015-03-04T11:22:42Z</dc:date>
    </item>
  </channel>
</rss>

