<?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>Kinetis Design StudioのトピックRe: fsl_i2c/fsl_i2c_freertos performing partial read</title>
    <link>https://community.nxp.com/t5/Kinetis-Design-Studio/fsl-i2c-fsl-i2c-freertos-performing-partial-read/m-p/664458#M8795</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;While digging into the driver I have found that the&amp;nbsp;kI2C_TransferNoStartFlag ignored. &amp;nbsp;Every transaction started through I2C_MasterTransferNonBlocking will generate a START or REPEATED START sequence. &amp;nbsp;This is not going to be easy...&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 23 Feb 2017 17:49:02 GMT</pubDate>
    <dc:creator>michaelellis</dc:creator>
    <dc:date>2017-02-23T17:49:02Z</dc:date>
    <item>
      <title>fsl_i2c/fsl_i2c_freertos performing partial read</title>
      <link>https://community.nxp.com/t5/Kinetis-Design-Studio/fsl-i2c-fsl-i2c-freertos-performing-partial-read/m-p/664457#M8794</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I am trying to implement a PMBUS BlocK Read routine on a KV5 processor using the fsl_i2c_freertos driver. &amp;nbsp;The I2C sequence for this routine is as follows:&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;1) Master sends START&lt;/P&gt;&lt;P&gt;2) Master sends slave address with lsb cleared (write), slave sends ACK&lt;/P&gt;&lt;P&gt;3) Master sends command byte, slave sends ACK&lt;/P&gt;&lt;P&gt;4) Master sends REPEATED START&lt;/P&gt;&lt;P&gt;5) Master sends&amp;nbsp;&lt;SPAN&gt;slave address with lsb set (read), slave sends ACK&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;6) Slave sends byte count N, master sends ACK&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;7) for i = 1 to N-1&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;7) &amp;nbsp; &amp;nbsp;Slave sends data(i), master sends ACK&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;8) Slave sends data(N), master sends NACK&lt;/P&gt;&lt;P&gt;9) Master sends STOP&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;My routine is as follows:&lt;/P&gt;&lt;P&gt;bool psReadBlock(uint8_t cmd, uint8_t *pVal)&lt;BR /&gt;{&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;ps_data_t *pParms = (ps_data_t *)&amp;amp;ps_data; // get pointer to data&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;i2c_master_transfer_t *pXfer = &amp;amp;(pParms-&amp;gt;i2c_xfer); // point to transfer structure&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;status_t status;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;uint8_t count;&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;pXfer-&amp;gt;direction = kI2C_Write; // send command&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;pXfer-&amp;gt;data = &amp;amp;cmd;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;pXfer-&amp;gt;dataSize = 1;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;pXfer-&amp;gt;flags = kI2C_TransferNoStopFlag;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;status = I2C_RTOS_Transfer(&amp;amp;pParms-&amp;gt;i2c_handle, pXfer);&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;if (status != kStatus_Success)&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return (false);&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;pXfer-&amp;gt;direction = kI2C_Read; // read count value&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;pXfer-&amp;gt;data = &amp;amp;count;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;pXfer-&amp;gt;dataSize = 1;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;pXfer-&amp;gt;flags = kI2C_TransferRepeatedStartFlag | kI2C_TransferNoStopFlag;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;status = I2C_RTOS_Transfer(&amp;amp;pParms-&amp;gt;i2c_handle, pXfer);&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;if (status != kStatus_Success)&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return(false);&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;pXfer-&amp;gt;direction = kI2C_Read; // read data&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;pXfer-&amp;gt;data = pVal;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;pXfer-&amp;gt;dataSize = count;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;pXfer-&amp;gt;flags = kI2C_TransferNoStartFlag;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;status = I2C_RTOS_Transfer(&amp;amp;pParms-&amp;gt;i2c_handle, pXfer);&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;return (status == kStatus_Success);&lt;BR /&gt;}&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The first transaction works as expected but I have a problem with the second transaction. &amp;nbsp;I set the &lt;SPAN&gt;kI2C_TransferRepeatedStartFlag and&amp;nbsp;&lt;/SPAN&gt;kI2C_TransferNoStopFlag. &amp;nbsp;The REPEATED START&amp;nbsp;is sent (as expected) and no STOP&amp;nbsp;is sent (as expected) but the master sends a NACK instead of an ACK. &amp;nbsp;This causes the slave device to terminate the sequence and I cannot retrieve the remaining data.&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I believe that the driver should only send a NACK after reading the final byte of data only if a STOP sequence is to be sent. &amp;nbsp;if no STOP has been requested then the driver should&amp;nbsp;ACK all bytes being read.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 23 Feb 2017 16:44:21 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Design-Studio/fsl-i2c-fsl-i2c-freertos-performing-partial-read/m-p/664457#M8794</guid>
      <dc:creator>michaelellis</dc:creator>
      <dc:date>2017-02-23T16:44:21Z</dc:date>
    </item>
    <item>
      <title>Re: fsl_i2c/fsl_i2c_freertos performing partial read</title>
      <link>https://community.nxp.com/t5/Kinetis-Design-Studio/fsl-i2c-fsl-i2c-freertos-performing-partial-read/m-p/664458#M8795</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;While digging into the driver I have found that the&amp;nbsp;kI2C_TransferNoStartFlag ignored. &amp;nbsp;Every transaction started through I2C_MasterTransferNonBlocking will generate a START or REPEATED START sequence. &amp;nbsp;This is not going to be easy...&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 23 Feb 2017 17:49:02 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Design-Studio/fsl-i2c-fsl-i2c-freertos-performing-partial-read/m-p/664458#M8795</guid>
      <dc:creator>michaelellis</dc:creator>
      <dc:date>2017-02-23T17:49:02Z</dc:date>
    </item>
  </channel>
</rss>

