<?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 Software Development KitのトピックRe: DSPI_MasterTransferBlocking is blocked :)</title>
    <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/DSPI-MasterTransferBlocking-is-blocked/m-p/645812#M6965</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I just opted to update to the non blocking functions!&lt;/P&gt;&lt;P&gt;It was a minor impact on the software, and now it works!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 22 Feb 2017 15:12:17 GMT</pubDate>
    <dc:creator>carlossilva</dc:creator>
    <dc:date>2017-02-22T15:12:17Z</dc:date>
    <item>
      <title>DSPI_MasterTransferBlocking is blocked :)</title>
      <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/DSPI-MasterTransferBlocking-is-blocked/m-p/645807#M6960</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;Using SPI and the fsl_dspi official driver, I noticed that when I used DSPI_MasterTransferBlocking function intensively, I sometime end-up waiting indefinitely for this function to exit.&lt;/P&gt;&lt;P&gt;Here is my setup:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;IDE: KDSK 2.0&lt;/LI&gt;&lt;LI&gt;chip: MK22&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;I realized that the problematic code was as follow:&lt;/P&gt;&lt;PRE class="language-c line-numbers"&gt;&lt;CODE&gt;&lt;SPAN class="keyword token"&gt;while&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;remainingReceiveByteCount &lt;SPAN class="operator token"&gt;&amp;gt;&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;DSPI_GetStatusFlags&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;base&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;&amp;amp;&lt;/SPAN&gt; kDSPI_RxFifoDrainRequestFlag&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;rxData &lt;SPAN class="operator token"&gt;!=&lt;/SPAN&gt; NULL&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="comment token"&gt;/* Read data from POPR*/&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;rxData&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;DSPI_ReadData&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;base&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rxData&lt;SPAN class="operator token"&gt;++&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;else&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="token function"&gt;DSPI_ReadData&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;base&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; remainingReceiveByteCount&lt;SPAN class="operator token"&gt;--&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="token function"&gt;DSPI_ClearStatusFlags&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;base&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; kDSPI_RxFifoDrainRequestFlag&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;&lt;SPAN class="line-numbers-rows"&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;I guess what happened is that the function missed a byte in reception and later on, waits&amp;nbsp;for it ( endlessly ) .&lt;/P&gt;&lt;P&gt;It seems that this is a very dangerous behaviour, as the MCU code can stay there forever !&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I went further on to investigate why it missed a byte.&amp;nbsp; I notice that DSPI_MasterTransferBlocking, on two occasions, uses&lt;/P&gt;&lt;PRE class="language-c line-numbers"&gt;&lt;CODE&gt;&lt;SPAN class="comment token"&gt;/*Wait until Tx Fifo is not full*/&lt;/SPAN&gt;
&lt;SPAN class="keyword token"&gt;while&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;!&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;DSPI_GetStatusFlags&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;base&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;&amp;amp;&lt;/SPAN&gt; kDSPI_TxFifoFillRequestFlag&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="token function"&gt;DSPI_ClearStatusFlags&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;base&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; kDSPI_TxFifoFillRequestFlag&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;&lt;SPAN class="line-numbers-rows"&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;But if a byte is received when the MCU is waiting in that piece code, it can miss it (and then totally block the function).&amp;nbsp; &lt;/P&gt;&lt;P&gt;While it can happen that DSPI_MasterTransferBlocking misses some RX bytes (because some other high-priority function being called, for example), the latter piece of code greatly increase that probability.&amp;nbsp;&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;IMHO, the official driver should not wait blindly for TX Fifo, nor should it leads to infinite loop if a RX byte is missed.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 26 Jan 2017 11:00:56 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/DSPI-MasterTransferBlocking-is-blocked/m-p/645807#M6960</guid>
      <dc:creator>guylejeune</dc:creator>
      <dc:date>2017-01-26T11:00:56Z</dc:date>
    </item>
    <item>
      <title>Re: DSPI_MasterTransferBlocking is blocked :)</title>
      <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/DSPI-MasterTransferBlocking-is-blocked/m-p/645808#M6961</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Guylejeune,&lt;/P&gt;&lt;P&gt;there is community for Kinetis SDK:&lt;/P&gt;&lt;P&gt;&lt;A _jive_internal="true" href="https://community.nxp.com/community/kinetis/kinetis-software-development-kit"&gt;https://community.nxp.com/community/kinetis/kinetis-software-development-kit&lt;/A&gt;&lt;/P&gt;&lt;P&gt;I'd recommend to post your question there.&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;Marek&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 27 Jan 2017 07:56:57 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/DSPI-MasterTransferBlocking-is-blocked/m-p/645808#M6961</guid>
      <dc:creator>MarekTrmac</dc:creator>
      <dc:date>2017-01-27T07:56:57Z</dc:date>
    </item>
    <item>
      <title>Re: DSPI_MasterTransferBlocking is blocked :)</title>
      <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/DSPI-MasterTransferBlocking-is-blocked/m-p/645809#M6962</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 think this is the drawback of the polling mode.&lt;/P&gt;&lt;P&gt;BR&lt;/P&gt;&lt;P&gt;Xiangjun Rong&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 06 Feb 2017 09:26:45 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/DSPI-MasterTransferBlocking-is-blocked/m-p/645809#M6962</guid>
      <dc:creator>xiangjun_rong</dc:creator>
      <dc:date>2017-02-06T09:26:45Z</dc:date>
    </item>
    <item>
      <title>Re: DSPI_MasterTransferBlocking is blocked :)</title>
      <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/DSPI-MasterTransferBlocking-is-blocked/m-p/645810#M6963</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Did you find a way to solve this issue?&lt;/P&gt;&lt;P&gt;Im facing the same issue with KSDK 1.3.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 22 Feb 2017 08:12:13 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/DSPI-MasterTransferBlocking-is-blocked/m-p/645810#M6963</guid>
      <dc:creator>carlossilva</dc:creator>
      <dc:date>2017-02-22T08:12:13Z</dc:date>
    </item>
    <item>
      <title>Re: DSPI_MasterTransferBlocking is blocked :)</title>
      <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/DSPI-MasterTransferBlocking-is-blocked/m-p/645811#M6964</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I did 2 things:&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;While waiting for the&lt;CODE&gt; kDSPI_TxFifoFillRequestFlag, instead of looping on nothing, I check as well if a byte has been received;&lt;/CODE&gt;&lt;/LI&gt;&lt;LI&gt;&lt;CODE&gt;Add an escape condition on all the while() used in that function (both for tx and rx).&lt;/CODE&gt;&lt;CODE&gt;&lt;/CODE&gt;&lt;CODE&gt;&lt;/CODE&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;&lt;CODE&gt;(1) decrease the probability of having the problem to happens ;&lt;/CODE&gt;&lt;/P&gt;&lt;P&gt;&lt;CODE&gt;(2) prevents your code to be blocked, but exiting the function does not guarantees that all bytes have been received, so additional checks are required.&lt;/CODE&gt;&lt;/P&gt;&lt;P&gt;&lt;CODE&gt;&lt;/CODE&gt;&lt;/P&gt;&lt;P&gt;&lt;CODE&gt;Another possibility is to use interrupts for these transfers.&lt;/CODE&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 22 Feb 2017 09:11:24 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/DSPI-MasterTransferBlocking-is-blocked/m-p/645811#M6964</guid>
      <dc:creator>guylejeune</dc:creator>
      <dc:date>2017-02-22T09:11:24Z</dc:date>
    </item>
    <item>
      <title>Re: DSPI_MasterTransferBlocking is blocked :)</title>
      <link>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/DSPI-MasterTransferBlocking-is-blocked/m-p/645812#M6965</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I just opted to update to the non blocking functions!&lt;/P&gt;&lt;P&gt;It was a minor impact on the software, and now it works!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 22 Feb 2017 15:12:17 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Software-Development-Kit/DSPI-MasterTransferBlocking-is-blocked/m-p/645812#M6965</guid>
      <dc:creator>carlossilva</dc:creator>
      <dc:date>2017-02-22T15:12:17Z</dc:date>
    </item>
  </channel>
</rss>

