<?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: SPI Reading problem in Kinetis Microcontrollers</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802670#M48809</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I understood how the SPI works 10 years ago.&lt;/P&gt;&lt;P&gt;Now I want a simple answer - why after putting some delay &lt;SPAN style="color: #ff0000;"&gt;for (timeout = 0; timeout &amp;lt; 100; timeout++) ;&lt;/SPAN&gt; - I &lt;STRONG&gt;do&lt;/STRONG&gt; receive the byte *rx_data = (uint8_t)SPIx[spi_num]-&amp;gt;POPR; and &lt;STRONG&gt;without&lt;/STRONG&gt; delay - I &lt;STRONG&gt;do not&lt;/STRONG&gt; receive the byte.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 21 Jun 2018 15:30:26 GMT</pubDate>
    <dc:creator>john71</dc:creator>
    <dc:date>2018-06-21T15:30:26Z</dc:date>
    <item>
      <title>SPI Reading problem</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802664#M48803</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I read from SPI slave&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;volatile struct&amp;nbsp;&amp;nbsp; &amp;nbsp;SPI_MemMap *SPIx[NUM_DSPI] = {SPI0_BASE_PTR, SPI1_BASE_PTR, SPI2_BASE_PTR};&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;uint32_t SPI_TransferByte(uint32_t spi_num, uint8_t tx_data, uint8_t *rx_data)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t timeout;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t value;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; SPIx[spi_num]-&amp;gt;PUSHR = /*SPI_PUSHR_PCS(0) |*/ SPI_PUSHR_CTAS(0) |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPI_PUSHR_TXDATA((uint32_t)tx_data);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; timeout = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // while transfer complete&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (!(SPIx[spi_num]-&amp;gt;SR &amp;amp; SPI_SR_TCF_MASK))&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; timeout++;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (timeout &amp;gt; SPI_TIMEOUT)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // clear flag&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIx[spi_num]-&amp;gt;SR = SPI_SR_TCF_MASK;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return SPI_TIMEOUT_ERROR;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // clear flag&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIx[spi_num]-&amp;gt;SR = SPI_SR_TCF_MASK;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *rx_data = (uint8_t)SPIx[spi_num]-&amp;gt;POPR;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *rx_data = (uint8_t)SPIx[spi_num]-&amp;gt;POPR;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;BR /&gt;}&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;Then I use it&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;uint8_t SPI_rw_flash(uint8_t tx, uint8_t* rx)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uint8_t err = 0 ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint8_t dummy;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;err = SPI_TransferByte(SPI2, tx, rx);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; return err;&lt;BR /&gt;}&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;First of all - I have to read it twice.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*rx_data = (uint8_t)SPIx[spi_num]-&amp;gt;POPR;&lt;BR /&gt;&amp;nbsp;*rx_data = (uint8_t)SPIx[spi_num]-&amp;gt;POPR;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Otherwise I don't get a value.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The second problem - I read a value only if I set a break point on the second *rx_data = (uint8_t)SPIx[spi_num]-&amp;gt;POPR;&lt;/P&gt;&lt;P&gt;Otherwise if it a free run - I read zeros.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;What do I miss?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 20 Jun 2018 11:12:18 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802664#M48803</guid>
      <dc:creator>john71</dc:creator>
      <dc:date>2018-06-20T11:12:18Z</dc:date>
    </item>
    <item>
      <title>Re: SPI Reading problem</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802665#M48804</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi, Evgeny,&lt;/P&gt;&lt;P&gt;I suggest you disable FIFO mode. If you want to test the SPI transfer, i suggest you transfer multiple data for example, you can check the spi waveform and the received data array.&lt;/P&gt;&lt;P&gt;Anyway, duble reading the same register is incorrect. Pls use the following code which I modify based on your orginal code.&lt;/P&gt;&lt;P&gt;BTW, you can connect the SPI_SOUT with SPI_SIN directly so that you can check if the received data is correct or not..&lt;/P&gt;&lt;P&gt;Hope it can help you&lt;/P&gt;&lt;P&gt;BR&lt;/P&gt;&lt;P&gt;xiangjun Rong&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;uint8_t SPI_rw_flash(uint8_t tx, uint8_t* rx)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uint8_t err = 0 ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint8_t dummy;&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;//transfer 50 bytes&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; for(unsigned int i=0; i&amp;lt;50; i++) &lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;err = SPI_TransferByte(SPI2, tx, rx++);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;asm("nop"); //set a break point here&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; return err;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;uint32_t SPI_TransferByte(uint32_t spi_num, uint8_t tx_data, uint8_t *rx_data)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t timeout;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t value;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; SPIx[spi_num]-&amp;gt;PUSHR = /*SPI_PUSHR_PCS(0) |*/ SPI_PUSHR_CTAS(0) |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPI_PUSHR_TXDATA((uint32_t)tx_data);&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; timeout = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // while transfer complete&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (!(SPIx[spi_num]-&amp;gt;SR &amp;amp; SPI_SR_TCF_MASK)) &amp;nbsp;&amp;nbsp;&amp;nbsp; { }&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // clear flag&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIx[spi_num]-&amp;gt;SR = SPI_SR_TCF_MASK;&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *rx_data = (uint8_t)SPIx[spi_num]-&amp;gt;POPR;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;BR /&gt;}&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;Then I use it&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 21 Jun 2018 06:41:33 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802665#M48804</guid>
      <dc:creator>xiangjun_rong</dc:creator>
      <dc:date>2018-06-21T06:41:33Z</dc:date>
    </item>
    <item>
      <title>Re: SPI Reading problem</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802666#M48805</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Using a scope I see the correct data on MISO pin. The hardware layer is working good.&lt;/P&gt;&lt;P&gt;I try to disable FIFO&lt;/P&gt;&lt;P&gt;SPI2_MCR |= SPI_MCR_DIS_RXF_MASK;&lt;/P&gt;&lt;P&gt;But the result is the same.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 21 Jun 2018 08:34:44 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802666#M48805</guid>
      <dc:creator>john71</dc:creator>
      <dc:date>2018-06-21T08:34:44Z</dc:date>
    </item>
    <item>
      <title>Re: SPI Reading problem</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802667#M48806</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi, Evgeny,&lt;/P&gt;&lt;P&gt;If you connect the SPI_SIN to high logic via a 10K pull-up resistor, while poll the RFDF bit in SPI_SR register before reading SPI_POPR register, what is the result?&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>Thu, 21 Jun 2018 08:47:21 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802667#M48806</guid>
      <dc:creator>xiangjun_rong</dc:creator>
      <dc:date>2018-06-21T08:47:21Z</dc:date>
    </item>
    <item>
      <title>Re: SPI Reading problem</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802668#M48807</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Sorry, I'm not sure I understand it right.&lt;/P&gt;&lt;P&gt;Enable software pull-up? How do I do it?&lt;/P&gt;&lt;P&gt;Right now the SIN pin configured&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;PORTD_PCR14 = (uint32_t)((PORTD_PCR14 &amp;amp; (uint32_t)~(uint32_t)(&lt;BR /&gt;&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; PORT_PCR_ISF_MASK |&lt;BR /&gt;&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; PORT_PCR_MUX(0x05)&lt;BR /&gt;&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; )) | (uint32_t)(&lt;BR /&gt;&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; PORT_PCR_MUX(0x02)&lt;BR /&gt;&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; ));&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Well..I found the problem - if I put some delay&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;uint32_t SPI_TransferByte(uint32_t spi_num, uint8_t tx_data, uint8_t *rx_data)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t timeout;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t value;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Assert CS0, Use config 0&lt;BR /&gt;&amp;nbsp;&amp;nbsp; SPIx[spi_num]-&amp;gt;PUSHR = SPI_PUSHR_CTAS(0) | SPI_PUSHR_TXDATA((uint32_t)tx_data);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; timeout = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // while transfer complete&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (!(SPIx[spi_num]-&amp;gt;SR &amp;amp; SPI_SR_TCF_MASK))&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; timeout++;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (timeout &amp;gt; SPI_TIMEOUT)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // clear flag&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIx[spi_num]-&amp;gt;SR = SPI_SR_TCF_MASK;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return SPI_TIMEOUT_ERROR;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // clear flag&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIx[spi_num]-&amp;gt;SR = SPI_SR_TCF_MASK;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #ff0000;"&gt;for (timeout = 0; timeout &amp;lt; 100; timeout++) ;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="color: #ff0000;"&gt; //while (!(SPIx[spi_num]-&amp;gt;SR &amp;amp; SPI_SR_RFDF_MASK))&amp;nbsp; //dosen't work&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *rx_data = (uint8_t)SPIx[spi_num]-&amp;gt;POPR;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;BR /&gt;}&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;It works good.&lt;/P&gt;&lt;P&gt;That's why it works with the second *rx_data = (uint8_t)SPIx[spi_num]-&amp;gt;POPR; - it added some delay.&lt;/P&gt;&lt;P&gt;I have to wait after a sent byte. But if I poll while (!(SPIx[spi_num]-&amp;gt;SR &amp;amp; SPI_SR_RFDF_MASK)) I stay in the loop.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;How do I fix the problem?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 21 Jun 2018 09:03:41 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802668#M48807</guid>
      <dc:creator>john71</dc:creator>
      <dc:date>2018-06-21T09:03:41Z</dc:date>
    </item>
    <item>
      <title>Re: SPI Reading problem</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802669#M48808</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;You have to understand how spi works.&lt;/P&gt;&lt;P&gt;When the master sends some data, the same clock clocks in data from the slave.&lt;/P&gt;&lt;P&gt;I am not sure what your slave is doing, but as an example let's say the slave will receive a byte and respond to the master by sending the same byte it just received.&lt;/P&gt;&lt;P&gt;First, when&amp;nbsp;sending Byte1 the master will be clocking in a byte from the slave, at this point the slave will not have received a byte from the master, so the byte clocked in could be random, 0x00 or 0xFF depending on how the slave is programmed. This byte would be stored in the fifo/receive register. When you execute the spi read it just returns the byte in the fifo/receive register, it does not do another transaction. So you read this byte and discard it. You can at this point send Byte2, during this transaction the slave would be responding with Byte1, you can then execute spi read and it would return Byte1 from the fifo. You can keep this going and you would always be receiving the previous byte. To get the last byte you need to send an extra byte to receive it.&lt;/P&gt;&lt;P&gt;Another example, reading 8 bytes from SPI Flash.&lt;/P&gt;&lt;P&gt;Lets say the read command is 4 bytes (1 byte command + 3 byte start address), for this usually you have to assert the CS and keep it asserted during the whole transaction, then de-assert to finish, but&amp;nbsp;let's concentrate in&amp;nbsp;send/receive.&lt;/P&gt;&lt;P&gt;When sending the 4-byte command, you would be receiving and discarding 4 bytes. Then to actually read the 8 bytes from Flash you need to send 8 bytes to clock in the 8 bytes from the slave. So you send 8-bytes (usually 0x00 or 0xFF depending on what is the "nop" command for the flash) and this allows you to read the data from the slave.&lt;/P&gt;&lt;P&gt;I hope this helps.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 21 Jun 2018 15:01:36 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802669#M48808</guid>
      <dc:creator>Ray_V</dc:creator>
      <dc:date>2018-06-21T15:01:36Z</dc:date>
    </item>
    <item>
      <title>Re: SPI Reading problem</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802670#M48809</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I understood how the SPI works 10 years ago.&lt;/P&gt;&lt;P&gt;Now I want a simple answer - why after putting some delay &lt;SPAN style="color: #ff0000;"&gt;for (timeout = 0; timeout &amp;lt; 100; timeout++) ;&lt;/SPAN&gt; - I &lt;STRONG&gt;do&lt;/STRONG&gt; receive the byte *rx_data = (uint8_t)SPIx[spi_num]-&amp;gt;POPR; and &lt;STRONG&gt;without&lt;/STRONG&gt; delay - I &lt;STRONG&gt;do not&lt;/STRONG&gt; receive the byte.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 21 Jun 2018 15:30:26 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802670#M48809</guid>
      <dc:creator>john71</dc:creator>
      <dc:date>2018-06-21T15:30:26Z</dc:date>
    </item>
    <item>
      <title>Re: SPI Reading problem</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802671#M48810</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;My apologies, since I saw you had 2 reads before I thought that the problem was reading one byte off. I have no way of knowing how experienced you are.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I would say that you have to wait for the transaction to be done before reading the register and that is why the delay works.&lt;/P&gt;&lt;P&gt;As you have above, you should check the status for RFDF bit to be set, but you indicate it does not work.&lt;/P&gt;&lt;P&gt;***********************&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&lt;SPAN style="color: #ff0000;"&gt; //while (!(SPIx[spi_num]-&amp;gt;SR &amp;amp; SPI_SR_RFDF_MASK))&amp;nbsp; //dosen't work&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *rx_data = (uint8_t)SPIx[spi_num]-&amp;gt;POPR;&lt;/P&gt;&lt;P&gt;*********************&lt;/P&gt;&lt;P&gt;If I read this correctly the reason it does not work is because you are missing a semicolon.&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #ff0000;"&gt;&lt;SPAN style="color: #333399;"&gt;while (!(SPIx[spi_num]-&amp;gt;SR &amp;amp; SPI_SR_RFDF_MASK))&lt;/SPAN&gt;&amp;nbsp;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000;"&gt;Without the semicolon one of two things may happen.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000;"&gt;1. Data becomes available and RFDF bit set. Loop exits before reading data.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000;"&gt;2. Data becomes available and RFDF bit set. Reads&amp;nbsp;data causing&amp;nbsp;RFDF to be cleared. Never exits loop since now RFDF will not be set again.&lt;SPAN style="color: #000000;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 21 Jun 2018 16:13:03 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802671#M48810</guid>
      <dc:creator>Ray_V</dc:creator>
      <dc:date>2018-06-21T16:13:03Z</dc:date>
    </item>
    <item>
      <title>Re: SPI Reading problem</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802672#M48811</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;Hello &lt;A class="jx-jive-macro-user" href="https://community.nxp.com/people/john7"&gt;john7&lt;/A&gt;‌,&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;&lt;BR /&gt;According to your code and your debug information below, I think the root cause is that, the receive data register is not ready before reading it. because you are checking the TCF bit, as the reference manual said, this bit indicates all bits in a frame have been shifted out, but it not stands for the transfer is end, because the SOUT pin is transferring the last bit at this monment, do you understand my explain? So, I do not suggest you to use this bit checking if the transmit is end.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;Here is my workflow for SPI transfer one byte, &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;1. Checking TFFF bit to make sure the transmit data register is ready to be written in.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;2. Write data to transmit data register.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;3. Wait for the receive data is ready in register.(RFDF bit should be checked)&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;4. Reading the data from receive data register.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;Hope it be helpful to you。Good luck!&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 22 Jun 2018 01:43:32 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802672#M48811</guid>
      <dc:creator>guoli</dc:creator>
      <dc:date>2018-06-22T01:43:32Z</dc:date>
    </item>
    <item>
      <title>Re: SPI Reading problem</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802673#M48812</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi, &lt;SPAN class=""&gt;Evgeny,&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class=""&gt;regarding the pull-up resistor, I supposed the SPI_SIN is float, maybe the reading data is random, if you connect a pull-up resistor, the received data is a fixed 0xFF.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class=""&gt;First of all, PLS disable FIFO mode and clear FIFO for both transmitter and receiver&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class=""&gt;SPIx_MCR|=0x0F&amp;lt;&amp;lt;10;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class=""&gt;change the code as i write here with RONG WROTE&lt;/SPAN&gt;&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;uint32_t SPI_TransferByte(uint32_t spi_num, uint8_t tx_data, uint8_t *rx_data)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t timeout;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t value;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Assert CS0, Use config 0&lt;BR /&gt;&amp;nbsp;&amp;nbsp; SPIx[spi_num]-&amp;gt;PUSHR = SPI_PUSHR_CTAS(0) | SPI_PUSHR_TXDATA((uint32_t)tx_data);&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; timeout = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // while transfer complete&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (!(SPIx[spi_num]-&amp;gt;SR &amp;amp; SPI_SR_TCF_MASK))&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; timeout++;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (timeout &amp;gt; SPI_TIMEOUT)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // clear flag&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIx[spi_num]-&amp;gt;SR| = SPI_SR_TCF_MASK;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return SPI_TIMEOUT_ERROR;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // clear flag&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIx[spi_num]-&amp;gt;SR&lt;SPAN style="color: #ff0000;"&gt; |&lt;/SPAN&gt;= SPI_SR_TCF_MASK; ////Rong wrote that you have to add the OR&amp;nbsp;&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; // &lt;SPAN style="color: #ff0000;"&gt;for (timeout = 0; timeout &amp;lt; 100; timeout++) ;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="color: #ff0000;"&gt; while (!(SPIx[spi_num]-&amp;gt;SR &amp;amp; SPI_SR_RFDF_MASK))&amp;nbsp; {}&amp;nbsp;&amp;nbsp; //RONG Wrote you have to add the {} i suppose&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *rx_data = (uint8_t)SPIx[spi_num]-&amp;gt;POPR;&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIx[spi_num]-&amp;gt;SR&lt;SPAN style="color: #ff0000;"&gt; |&lt;/SPAN&gt;= SPI_SR_RFDF_MASK;&amp;nbsp; //Rong wrote that you have to add the OR&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;BR /&gt;}&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&lt;SPAN class=""&gt;Pls have a try&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class=""&gt;BR&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class=""&gt;Xiangjun Rong&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class=""&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class=""&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 22 Jun 2018 08:18:47 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802673#M48812</guid>
      <dc:creator>xiangjun_rong</dc:creator>
      <dc:date>2018-06-22T08:18:47Z</dc:date>
    </item>
    <item>
      <title>Re: SPI Reading problem</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802674#M48813</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Still have no luck.&lt;/P&gt;&lt;P&gt;Added in the setup function&lt;/P&gt;&lt;P&gt;//&amp;nbsp; Clear TX FIFO&amp;nbsp;&amp;nbsp;&amp;nbsp; Clear RX FIFO&amp;nbsp;&amp;nbsp;&amp;nbsp; Disable Receive FIFO&amp;nbsp;&amp;nbsp; Disable Transmit FIFO&lt;BR /&gt;&amp;nbsp;SPI2_MCR |= SPI_MCR_CLR_TXF_MASK | SPI_MCR_CLR_RXF_MASK | SPI_MCR_DIS_RXF_MASK | SPI_MCR_DIS_TXF_MASK;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;And the final code&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;uint32_t SPI_TransferByte(uint32_t spi_num, uint8_t tx_data, uint8_t *rx_data)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIx[spi_num]-&amp;gt;PUSHR = SPI_PUSHR_CTAS(0) | SPI_PUSHR_TXDATA((uint32_t)tx_data);&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // while transfer complete&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (!(SPIx[spi_num]-&amp;gt;SR &amp;amp; SPI_SR_TCF_MASK))&amp;nbsp;&amp;nbsp; { }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIx[spi_num]-&amp;gt;SR |= SPI_SR_TCF_MASK;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (!(SPIx[spi_num]-&amp;gt;SR &amp;amp; SPI_SR_RFDF_MASK)) { }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIx[spi_num]-&amp;gt;SR |= SPI_SR_RFDF_MASK;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *rx_data = (uint8_t)SPIx[spi_num]-&amp;gt;POPR;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;And I stay in the second while - while (!(SPIx[spi_num]-&amp;gt;SR &amp;amp; SPI_SR_RFDF_MASK)) { }&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 22 Jun 2018 09:48:24 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802674#M48813</guid>
      <dc:creator>john71</dc:creator>
      <dc:date>2018-06-22T09:48:24Z</dc:date>
    </item>
    <item>
      <title>Re: SPI Reading problem</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802675#M48814</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Is &lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;TFFF bit&lt;/SPAN&gt; working when FIFO disabled?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 22 Jun 2018 09:49:32 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802675#M48814</guid>
      <dc:creator>john71</dc:creator>
      <dc:date>2018-06-22T09:49:32Z</dc:date>
    </item>
    <item>
      <title>Re: SPI Reading problem</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802676#M48815</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;SPIx[spi_num]-&amp;gt;SR |= SPI_SR_TCF_MASK; This line will clear all bit set in SR register, Please remove "|",&amp;nbsp;but i am not sure if this is root cause, you can try it.&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 22 Jun 2018 10:07:10 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802676#M48815</guid>
      <dc:creator>guoli</dc:creator>
      <dc:date>2018-06-22T10:07:10Z</dc:date>
    </item>
    <item>
      <title>Re: SPI Reading problem</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802677#M48816</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Yes, it will still working even there is no FIFO.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 22 Jun 2018 10:08:32 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802677#M48816</guid>
      <dc:creator>guoli</dc:creator>
      <dc:date>2018-06-22T10:08:32Z</dc:date>
    </item>
    <item>
      <title>Re: SPI Reading problem</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802678#M48817</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Still no luck. I'm &lt;SPAN class="" lang="en"&gt;&lt;SPAN class=""&gt;quite&lt;/SPAN&gt;&lt;/SPAN&gt; frustrated. Do you have an example? Setting and transferring on SPI.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 22 Jun 2018 11:10:28 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802678#M48817</guid>
      <dc:creator>john71</dc:creator>
      <dc:date>2018-06-22T11:10:28Z</dc:date>
    </item>
    <item>
      <title>Re: SPI Reading problem</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802679#M48818</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;using |= will definitely cause a problem. It will write back a 1&amp;nbsp;to any bit that is set clearing all clearable bits.&lt;/P&gt;&lt;P&gt;You don't even have to wait for TCF all you need is to check if RX FIFO has any data.&lt;/P&gt;&lt;P&gt;try this:&lt;/P&gt;&lt;PRE class="language-c line-numbers"&gt;&lt;CODE&gt;uint32_t &lt;SPAN class="token function"&gt;SPI_TransferByte&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;uint32_t spi_num&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; uint8_t tx_data&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; uint8_t &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;rx_data&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;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;SPIx&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;spi_num&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;SR &lt;SPAN class="operator token"&gt;&amp;amp;&lt;/SPAN&gt; SPI_SR_TFFF_MASK&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="punctuation token"&gt;}&lt;/SPAN&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIx&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;spi_num&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;PUSHR &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;SPI_PUSHR_CTAS&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&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="operator token"&gt;|&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;SPI_PUSHR_TXDATA&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;uint32_t&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;tx_data&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;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;SPIx&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;spi_num&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;SR &lt;SPAN class="operator token"&gt;&amp;amp;&lt;/SPAN&gt; SPI_SR_RFDF_MASK&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="punctuation token"&gt;}&lt;/SPAN&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;rx_data &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;uint8_t&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;SPIx&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;spi_num&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;POPR&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIx&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;spi_num&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;SR &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; SPI_SR_TCF_MASK&lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt;SPI_SR_RFDF_MASK&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;// I believe this is not needed&lt;/SPAN&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;return&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;
‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;If it still doesn't work you could try checking RXCTR (bits 7-4 RX FIFO Counter) instead of RFDF.&lt;/P&gt;&lt;P&gt;By the way, I don't think you need to clear RFDF, it will clear when the fifo is empty. Writing a 1 to this bit will force it to discard all bytes in the fifo, so you should not write a 1 to this bit before reading POPR.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 22 Jun 2018 14:29:37 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802679#M48818</guid>
      <dc:creator>Ray_V</dc:creator>
      <dc:date>2018-06-22T14:29:37Z</dc:date>
    </item>
    <item>
      <title>Re: SPI Reading problem</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802680#M48819</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi, all&lt;/P&gt;&lt;P&gt;I am sorry, it is my fault, you can not use the &lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;SPIx[spi_num]-&amp;gt;SR |= SPI_SR_TCF_MASK; separately, &lt;/SPAN&gt;it will clear all the flags.&lt;/P&gt;&lt;P&gt;You can poll both the transmitter and reciever with the lines:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (!(SPIx[spi_num]-&amp;gt;SR &amp;amp; SPI_SR_TCF_MASK)) {}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (!(SPIx[spi_num]-&amp;gt;SR &amp;amp; SPI_SR_RFDF_MASK)) { }&lt;/P&gt;&lt;P&gt;In the end, clear all the flags with only ONE line&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;SPIx[spi_num]-&amp;gt;SR |= (SPI_SR_TCF_MASK&lt;/SPAN&gt;|&lt;CODE&gt;SPI_SR_TCF_MASK&lt;SPAN class=""&gt;|&lt;/SPAN&gt;SPI_SR_RFDF_MASK)&lt;SPAN class=""&gt;;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/P&gt;&lt;P&gt;&lt;CODE&gt;&lt;SPAN class=""&gt;BR&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/P&gt;&lt;P&gt;&lt;CODE&gt;&lt;SPAN class=""&gt;Xiangjun rong&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 23 Jun 2018 02:51:19 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802680#M48819</guid>
      <dc:creator>xiangjun_rong</dc:creator>
      <dc:date>2018-06-23T02:51:19Z</dc:date>
    </item>
    <item>
      <title>Re: SPI Reading problem</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802681#M48820</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I stay in&amp;nbsp; &lt;CODE&gt;&lt;SPAN class=""&gt;while&lt;/SPAN&gt; &lt;SPAN class=""&gt;(&lt;/SPAN&gt;&lt;SPAN class=""&gt;!&lt;/SPAN&gt;&lt;SPAN class=""&gt;(&lt;/SPAN&gt;SPIx&lt;SPAN class=""&gt;[&lt;/SPAN&gt;spi_num&lt;SPAN class=""&gt;]&lt;/SPAN&gt;&lt;SPAN class=""&gt;-&amp;gt;&lt;/SPAN&gt;SR &lt;SPAN class=""&gt;&amp;amp;&lt;/SPAN&gt; SPI_SR_RFDF_MASK&lt;SPAN class=""&gt;)&lt;/SPAN&gt;&lt;SPAN class=""&gt;)&lt;/SPAN&gt; &lt;SPAN class=""&gt;{&lt;/SPAN&gt; &lt;SPAN class=""&gt;}&lt;/SPAN&gt;&lt;/CODE&gt; loop.&lt;/P&gt;&lt;P&gt;I also try &lt;CODE&gt;&lt;SPAN class=""&gt;(&lt;/SPAN&gt;&lt;SPAN class=""&gt;!&lt;/SPAN&gt;&lt;SPAN class=""&gt;(&lt;/SPAN&gt;SPIx&lt;SPAN class=""&gt;[&lt;/SPAN&gt;spi_num&lt;SPAN class=""&gt;]&lt;/SPAN&gt;&lt;SPAN class=""&gt;-&amp;gt;&lt;/SPAN&gt;SR &lt;SPAN class=""&gt;&amp;amp;&lt;/SPAN&gt; 0xF0&lt;SPAN class=""&gt;)&lt;/SPAN&gt;&lt;SPAN class=""&gt;) to check RX FIFO counter - zero value in the counter bits - and I stay in the loop.&lt;BR /&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR style="height: 25px;"&gt;&lt;TD style="height: 25px;" width="550"&gt;&lt;SPAN class=""&gt;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;CODE&gt;&lt;SPAN class=""&gt;&lt;BR /&gt; &lt;BR style="font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" /&gt; &lt;/SPAN&gt;&lt;/CODE&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 24 Jun 2018 09:40:39 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802681#M48820</guid>
      <dc:creator>john71</dc:creator>
      <dc:date>2018-06-24T09:40:39Z</dc:date>
    </item>
    <item>
      <title>Re: SPI Reading problem</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802682#M48821</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Did it this way. Stay in while (!(SPIx[spi_num]-&amp;gt;SR &amp;amp; SPI_SR_RFDF_MASK)) { } loop.&lt;/P&gt;&lt;P&gt;Then I enabled RX FIFO, I was told the flag is not active without enabling RX FIFO - still no luck.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 24 Jun 2018 09:44:05 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802682#M48821</guid>
      <dc:creator>john71</dc:creator>
      <dc:date>2018-06-24T09:44:05Z</dc:date>
    </item>
    <item>
      <title>Re: SPI Reading problem</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802683#M48822</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Sorry my friends, It works! Thank you very much for your help!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 24 Jun 2018 10:09:36 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-Reading-problem/m-p/802683#M48822</guid>
      <dc:creator>john71</dc:creator>
      <dc:date>2018-06-24T10:09:36Z</dc:date>
    </item>
  </channel>
</rss>

