<?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 K60 I2C Multiread in Kinetis Microcontrollers</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/K60-I2C-Multiread/m-p/581908#M34407</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif;"&gt;I'm using the &lt;SPAN style="color: #51626f; font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif; font-size: 14px;"&gt;TWR-K60N512, with PK60DN512Z VMD10 chip to read an IMU: &lt;A href="https://www.pololu.com/product/1265" title="https://www.pololu.com/product/1265"&gt;Pololu - MinIMU-9 Gyro, Accelerometer, and Compass (L3G4200D and LSM303DLM Carrier)&lt;/A&gt;&amp;nbsp; via I2C. &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif;"&gt;I am able to perform single read operation with the example I2C driver for kinetis. I'm trying to take the advantage of the address auto-incrementing feature of the sensor, but I can't seem do a multiread operation. I based my code from these two sources:&lt;/SPAN&gt;&lt;SPAN style="color: #51626f; font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif;"&gt; &lt;/SPAN&gt;&lt;A _jive_internal="true" data-containerid="2019" data-containertype="14" data-content-finding="Community" data-objectid="337809" data-objecttype="1" href="https://community.nxp.com/thread/337809#465606" style="font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif; color: #017bba;"&gt;https://community.nxp.com/thread/337809#465606&lt;/A&gt;&lt;SPAN style="color: #51626f; font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif;"&gt; , and this very useful application note &lt;/SPAN&gt;&lt;A class="jive-link-external-small" data-content-finding="Community" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fcache.nxp.com%2Ffiles%2Fsensors%2Fdoc%2Fapp_note%2FAN4481.pdf" rel="nofollow" style="font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif; color: #017bba;" target="_blank"&gt;http://cache.nxp.com/files/sensors/doc/app_note/AN4481.pdf,&lt;/A&gt;&lt;SPAN style="color: #51626f; font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif;"&gt;&amp;nbsp; though I think it has errors too.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif;"&gt;Here's my modification of the example code:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void LSM303DLM_A_MultiReadRegister(unsigned char u8RegisterAddress, int buffer, unsigned char *result)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; int i = buffer, j;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* Send Slave Address */ //SAD + W&lt;/P&gt;&lt;P&gt;&amp;nbsp; IIC_StartTransmission(SlaveID_A,MWSR);&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_Wait(); // SAK&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* Write Register Address */ //SUB&lt;/P&gt;&lt;P&gt;&amp;nbsp; I2C0_D = u8RegisterAddress;&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_Wait(); // SAK&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* Do a repeated start */ // SR&lt;/P&gt;&lt;P&gt;&amp;nbsp; I2C0_C1 |= I2C_C1_RSTA_MASK;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* Send Slave Address */ //SAD + R&lt;/P&gt;&lt;P&gt;&amp;nbsp; I2C0_D = (ACCEL_ADDRESS &amp;lt;&amp;lt; 1) | 0x01; //read address&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_Wait(); // SAK&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* Put in Rx Mode */&lt;/P&gt;&lt;P&gt;&amp;nbsp; I2C0_C1 &amp;amp;= (~I2C_C1_TX_MASK);&lt;/P&gt;&lt;P&gt;&amp;nbsp; //I2C0_C1 |= I2C_C1_TXAK_MASK; // Commented this out &lt;/P&gt;&lt;P&gt;// dummy read&lt;/P&gt;&lt;P&gt;&amp;nbsp; *result = I2C0_D ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; for (j=0; j&amp;lt;5000; j++){};&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_Wait();&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; /************ MODIFICATION BEGINS HERE, EVERYTHING ELSE IS SAME AS EXAMPLE CODE *********/&lt;/P&gt;&lt;P&gt;&amp;nbsp; while(buffer &amp;gt; 2)&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; *result = I2C0_D ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; i2c_Wait(); &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; result++;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; buffer--;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; Pause();&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; I2C0_C1 |= I2C_C1_TXAK_MASK;&lt;/P&gt;&lt;P&gt;&amp;nbsp; *result = I2C0_D ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_Wait();&lt;/P&gt;&lt;P&gt;&amp;nbsp; result++;&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_Stop();&lt;/P&gt;&lt;P&gt;&amp;nbsp; *(result) = I2C0_D ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; Pause();&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;It returns random values for the first accelerometer measurement and constants for the remaining measurements. Did I get the sequence wrong somewhere?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 28 Jun 2016 04:27:56 GMT</pubDate>
    <dc:creator>broccolee</dc:creator>
    <dc:date>2016-06-28T04:27:56Z</dc:date>
    <item>
      <title>K60 I2C Multiread</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/K60-I2C-Multiread/m-p/581908#M34407</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif;"&gt;I'm using the &lt;SPAN style="color: #51626f; font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif; font-size: 14px;"&gt;TWR-K60N512, with PK60DN512Z VMD10 chip to read an IMU: &lt;A href="https://www.pololu.com/product/1265" title="https://www.pololu.com/product/1265"&gt;Pololu - MinIMU-9 Gyro, Accelerometer, and Compass (L3G4200D and LSM303DLM Carrier)&lt;/A&gt;&amp;nbsp; via I2C. &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif;"&gt;I am able to perform single read operation with the example I2C driver for kinetis. I'm trying to take the advantage of the address auto-incrementing feature of the sensor, but I can't seem do a multiread operation. I based my code from these two sources:&lt;/SPAN&gt;&lt;SPAN style="color: #51626f; font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif;"&gt; &lt;/SPAN&gt;&lt;A _jive_internal="true" data-containerid="2019" data-containertype="14" data-content-finding="Community" data-objectid="337809" data-objecttype="1" href="https://community.nxp.com/thread/337809#465606" style="font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif; color: #017bba;"&gt;https://community.nxp.com/thread/337809#465606&lt;/A&gt;&lt;SPAN style="color: #51626f; font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif;"&gt; , and this very useful application note &lt;/SPAN&gt;&lt;A class="jive-link-external-small" data-content-finding="Community" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fcache.nxp.com%2Ffiles%2Fsensors%2Fdoc%2Fapp_note%2FAN4481.pdf" rel="nofollow" style="font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif; color: #017bba;" target="_blank"&gt;http://cache.nxp.com/files/sensors/doc/app_note/AN4481.pdf,&lt;/A&gt;&lt;SPAN style="color: #51626f; font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif;"&gt;&amp;nbsp; though I think it has errors too.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif;"&gt;Here's my modification of the example code:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void LSM303DLM_A_MultiReadRegister(unsigned char u8RegisterAddress, int buffer, unsigned char *result)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; int i = buffer, j;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* Send Slave Address */ //SAD + W&lt;/P&gt;&lt;P&gt;&amp;nbsp; IIC_StartTransmission(SlaveID_A,MWSR);&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_Wait(); // SAK&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* Write Register Address */ //SUB&lt;/P&gt;&lt;P&gt;&amp;nbsp; I2C0_D = u8RegisterAddress;&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_Wait(); // SAK&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* Do a repeated start */ // SR&lt;/P&gt;&lt;P&gt;&amp;nbsp; I2C0_C1 |= I2C_C1_RSTA_MASK;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* Send Slave Address */ //SAD + R&lt;/P&gt;&lt;P&gt;&amp;nbsp; I2C0_D = (ACCEL_ADDRESS &amp;lt;&amp;lt; 1) | 0x01; //read address&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_Wait(); // SAK&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* Put in Rx Mode */&lt;/P&gt;&lt;P&gt;&amp;nbsp; I2C0_C1 &amp;amp;= (~I2C_C1_TX_MASK);&lt;/P&gt;&lt;P&gt;&amp;nbsp; //I2C0_C1 |= I2C_C1_TXAK_MASK; // Commented this out &lt;/P&gt;&lt;P&gt;// dummy read&lt;/P&gt;&lt;P&gt;&amp;nbsp; *result = I2C0_D ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; for (j=0; j&amp;lt;5000; j++){};&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_Wait();&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; /************ MODIFICATION BEGINS HERE, EVERYTHING ELSE IS SAME AS EXAMPLE CODE *********/&lt;/P&gt;&lt;P&gt;&amp;nbsp; while(buffer &amp;gt; 2)&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; *result = I2C0_D ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; i2c_Wait(); &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; result++;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; buffer--;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; Pause();&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; I2C0_C1 |= I2C_C1_TXAK_MASK;&lt;/P&gt;&lt;P&gt;&amp;nbsp; *result = I2C0_D ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_Wait();&lt;/P&gt;&lt;P&gt;&amp;nbsp; result++;&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_Stop();&lt;/P&gt;&lt;P&gt;&amp;nbsp; *(result) = I2C0_D ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; Pause();&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;It returns random values for the first accelerometer measurement and constants for the remaining measurements. Did I get the sequence wrong somewhere?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 28 Jun 2016 04:27:56 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/K60-I2C-Multiread/m-p/581908#M34407</guid>
      <dc:creator>broccolee</dc:creator>
      <dc:date>2016-06-28T04:27:56Z</dc:date>
    </item>
    <item>
      <title>Re: K60 I2C Multiread</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/K60-I2C-Multiread/m-p/581909#M34408</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Nevermind, it works now. I assumed the &lt;SPAN style="color: #51626f; font-family: arial, helvetica, 'helvetica neue', verdana, sans-serif;"&gt;I2C_C1_TXAK bit was already cleared so I didn't clear that when switching the module to receiving mode. I cleared it, and it works.&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 28 Jun 2016 20:44:36 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/K60-I2C-Multiread/m-p/581909#M34408</guid>
      <dc:creator>broccolee</dc:creator>
      <dc:date>2016-06-28T20:44:36Z</dc:date>
    </item>
  </channel>
</rss>

