<?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 I2CEngine and NACK on last reading in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/I2CEngine-and-NACK-on-last-reading/m-p/517022#M1972</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by elgarbe on Thu Dec 05 18:02:42 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi, I am using I2C library from lpc175x_6x_cmsis_driver_library_0. It has an I2CEngine routine that make a full I2C transmision, from START to STOP. It function well on 2 programs that I make.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;But right now I need to use to interfacing an ADXL345 accelerometer. There is a function that read 6 accel byte data and on las read it need to send an NOACK, CCS C (pic microcontroller):&lt;/SPAN&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
// Read data from the accel
i2c_start();
i2c_write(ACCEL_WRITE_ADDR);
i2c_write(ACCEL_DATA_ADDR);
i2c_start();
i2c_write(ACCEL_READ_ADDR);
accel_data[0] = i2c_read(); //x0
accel_data[1] = i2c_read(); //x1
accel_data[2] = i2c_read(); //y0
accel_data[3] = i2c_read(); //y1
accel_data[4] = i2c_read(); //z0
accel_data[5] = i2c_read(0); // z1, NACK on last read 
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I try it with this code:&lt;/SPAN&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
I2CWriteLength[PORT_USED] = 2;
I2CReadLength[PORT_USED] = 6;
I2CMasterBuffer[PORT_USED][0] = ACCEL_WRITE_ADDR;
I2CMasterBuffer[PORT_USED][1] = ACCEL_DATA_ADDR;
I2CMasterBuffer[PORT_USED][2] = ACCEL_READ_ADDR;

result=I2CEngine( PORT_USED );
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;It retreive data for de first time, but I don't know why I always&amp;nbsp; obtain same value for accel. And more important, I don't know how to tell to I2C library to send a NACK on last reading.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Can any one help me?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Best regards!&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 17:28:10 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T17:28:10Z</dc:date>
    <item>
      <title>I2CEngine and NACK on last reading</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/I2CEngine-and-NACK-on-last-reading/m-p/517022#M1972</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by elgarbe on Thu Dec 05 18:02:42 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi, I am using I2C library from lpc175x_6x_cmsis_driver_library_0. It has an I2CEngine routine that make a full I2C transmision, from START to STOP. It function well on 2 programs that I make.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;But right now I need to use to interfacing an ADXL345 accelerometer. There is a function that read 6 accel byte data and on las read it need to send an NOACK, CCS C (pic microcontroller):&lt;/SPAN&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
// Read data from the accel
i2c_start();
i2c_write(ACCEL_WRITE_ADDR);
i2c_write(ACCEL_DATA_ADDR);
i2c_start();
i2c_write(ACCEL_READ_ADDR);
accel_data[0] = i2c_read(); //x0
accel_data[1] = i2c_read(); //x1
accel_data[2] = i2c_read(); //y0
accel_data[3] = i2c_read(); //y1
accel_data[4] = i2c_read(); //z0
accel_data[5] = i2c_read(0); // z1, NACK on last read 
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I try it with this code:&lt;/SPAN&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
I2CWriteLength[PORT_USED] = 2;
I2CReadLength[PORT_USED] = 6;
I2CMasterBuffer[PORT_USED][0] = ACCEL_WRITE_ADDR;
I2CMasterBuffer[PORT_USED][1] = ACCEL_DATA_ADDR;
I2CMasterBuffer[PORT_USED][2] = ACCEL_READ_ADDR;

result=I2CEngine( PORT_USED );
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;It retreive data for de first time, but I don't know why I always&amp;nbsp; obtain same value for accel. And more important, I don't know how to tell to I2C library to send a NACK on last reading.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Can any one help me?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Best regards!&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:28:10 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/I2CEngine-and-NACK-on-last-reading/m-p/517022#M1972</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:28:10Z</dc:date>
    </item>
  </channel>
</rss>

