<?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 MQX receive buffer only even buffer correct mk60 in Kinetis Microcontrollers</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-MQX-receive-buffer-only-even-buffer-correct-mk60/m-p/502233#M31467</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;This is not a solution.&amp;nbsp; I have further details on this issue, as this came from my company.&amp;nbsp; Hope someone can recognize this issue and can theorize on a possible cause.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #1f497d; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt;We turn ON FIFO but not DMA.&amp;nbsp; We use the Receive FIFO Drain Interrupt to tell us when data is received in the FIFO.&amp;nbsp; We read POPR register and clear RFDF bit to retrieve each data word in the ISR.&amp;nbsp; We use a frame size of 16 bits.&amp;nbsp;&amp;nbsp; So each read of POPR register will retrieve two bytes.&amp;nbsp; The received data is clocked and pushed into the RX FIFO correctly.&amp;nbsp; We can observe&amp;nbsp; this using the RXFR0,&amp;nbsp; RXFR1,&amp;nbsp; RXFR2, and RXFR3 register contents.&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #1f497d; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #1f497d; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt;The problem is that the SR register’s&lt;/SPAN&gt; &lt;SPAN style="color: #1f497d; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt;POPNXTPTR field (least significant nibble) always jumps from 0 to 2 (skipping 1) after reading POPR register and clearing SR register’s RFDF status bit.&amp;nbsp; In other words: POPNXTPTR would point to RXFR0.&amp;nbsp; Then jumps to pointing to&lt;BR /&gt;RXFR2.&amp;nbsp; Next it points to RXFR3 and then to RXFR0 again.&amp;nbsp; This skipping of RXFR1 causes problems.&amp;nbsp; Here is an illustration of the&lt;BR /&gt;sequence that we observe:&lt;/SPAN&gt;&lt;/P&gt;&lt;OL style="list-style-type: decimal;"&gt;&lt;LI&gt;&lt;SPAN style="color: #1f497d; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt;In the beginning POPNXTPTR = 0, pointing to RXFR0&lt;/SPAN&gt;&lt;/LI&gt;&lt;LI&gt;&lt;SPAN style="color: #1f497d; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt;We got data clocked and pushed into the FIFO, We read POPR register and clear RFDF bit.&amp;nbsp; POPNXTPTR now equals 2, pointing to&lt;BR /&gt;RXFR2&amp;nbsp; (&lt;/SPAN&gt;&lt;SPAN style="color: #00b0f0; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt;POPNXTPTR should equal 1&lt;/SPAN&gt;&lt;SPAN style="color: #1f497d; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt;)&lt;/SPAN&gt;&lt;/LI&gt;&lt;LI&gt;&lt;SPAN style="color: #1f497d; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt;We got new data again.&amp;nbsp; We read POPR register and clear RFDF bit.&amp;nbsp; POPNXTPTR now equals 3, pointing to RXFR3&amp;nbsp; &lt;/SPAN&gt;&lt;/LI&gt;&lt;LI&gt;&lt;SPAN style="color: #1f497d; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt;We got new data again.&amp;nbsp; We read POPR register and clear RFDF bit.&amp;nbsp; POPNXTPTR now equals 0, pointing to RXFR0&lt;/SPAN&gt;&lt;/LI&gt;&lt;LI&gt;&lt;SPAN style="color: #1f497d; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt;The cycle repeats.&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;&lt;SPAN style="color: #1f497d; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #1f497d; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt;Additionally, when reading the POPR register (16 bits data), the received 16 bit word always consists of one byte (8 bits) from current FIFO&lt;BR /&gt;entry and another byte (8 bits) from the next FIFO entry.&amp;nbsp; For instance:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #1f497d; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If POPNXTPTR = 0, reading POPR would get the first 8 bits of RXFR0 and the second 8 bits of RXFR1.&amp;nbsp; – &lt;/SPAN&gt;&lt;SPAN style="color: #00b0f0; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt;POPR&lt;BR /&gt;should contain all 16 bits from RXFR0&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #1f497d; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If POPNXTPTR = 1, reading POPR would get the first 8 bits of RXFR1 and the second 8 bits of RXFR2. - &lt;/SPAN&gt;&lt;SPAN style="color: #00b0f0; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt;POPR&lt;BR /&gt;should contain all 16 bits from RXFR1&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #1f497d; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; And so on . . .&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #1f497d; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #1f497d; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt;In summary, the problem seem to be the SPI HW module is not updating pointers correctly internally.&amp;nbsp; It is possible that we may not have initialized it properly.&amp;nbsp; Our init routine is already posted here by jparish88.&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 16 Feb 2016 19:54:50 GMT</pubDate>
    <dc:creator>henryle</dc:creator>
    <dc:date>2016-02-16T19:54:50Z</dc:date>
    <item>
      <title>SPI MQX receive buffer only even buffer correct mk60</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-MQX-receive-buffer-only-even-buffer-correct-mk60/m-p/502232#M31466</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;SPAN style="font-family: 'arial black', 'avant garde'; color: black; font-size: 12pt;"&gt;The initialization of SPI is the same in bootcode and firmware:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt;&lt;STRONG style="color: #7f0055;"&gt;static&lt;/STRONG&gt; &lt;STRONG style="color: #7f0055;"&gt;void&lt;/STRONG&gt;&lt;SPAN style="color: black;"&gt; &lt;STRONG&gt;init_SPI_Channel&lt;/STRONG&gt;(&lt;/SPAN&gt;&lt;SPAN style="color: #005032;"&gt;SPI_MemMapPtr&lt;/SPAN&gt;&lt;SPAN style="color: black;"&gt; spi_ptr, &lt;/SPAN&gt;&lt;SPAN style="color: #005032;"&gt;uchar&lt;/SPAN&gt;&lt;SPAN style="color: black;"&gt; ucFlagMaster)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt;&lt;SPAN style="color: black;"&gt;{&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #005032;"&gt;uint_32&lt;/SPAN&gt;&lt;SPAN style="color: black;"&gt; ctar;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt;&lt;SPAN style="color: black;"&gt;&amp;nbsp;&amp;nbsp; ctar= 0x7E000000; &lt;/SPAN&gt;&lt;SPAN style="color: #3f7f5f;"&gt;//frame size 16&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt; &lt;SPAN style="color: #3f7f5f;"&gt;//CPOL= 1 //CPHA= 1&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt; &lt;SPAN style="color: #3f7f5f;"&gt;//Big &lt;SPAN style="text-decoration: underline;"&gt;Endian&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #3f7f5f;"&gt;/* Disable and clear SPI */&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt;&lt;SPAN style="color: black;"&gt;&amp;nbsp;&amp;nbsp; spi_ptr-&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="color: #0000c0;"&gt;MCR&lt;/SPAN&gt;&lt;SPAN style="color: black;"&gt; &amp;amp;= (~SPI_MCR_MDIS_MASK);&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt;&lt;SPAN style="color: black;"&gt;&amp;nbsp;&amp;nbsp; spi_ptr-&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="color: #0000c0;"&gt;MCR&lt;/SPAN&gt;&lt;SPAN style="color: black;"&gt; = SPI_MCR_HALT_MASK | SPI_MCR_CLR_TXF_MASK | SPI_MCR_CLR_RXF_MASK;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt;&lt;SPAN style="color: black;"&gt;&amp;nbsp;&amp;nbsp; spi_ptr-&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="color: #0000c0;"&gt;CTAR&lt;/SPAN&gt;&lt;SPAN style="color: black;"&gt;[0] = ctar;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #3f7f5f;"&gt;/* Receive FIFO overflow enable */&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt;&lt;SPAN style="color: black;"&gt;&amp;nbsp;&amp;nbsp; spi_ptr-&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="color: #0000c0;"&gt;MCR&lt;/SPAN&gt;&lt;SPAN style="color: black;"&gt; |= SPI_MCR_ROOE_MASK;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #3f7f5f;"&gt;/* Set CS0-7 inactive high */&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt;&lt;SPAN style="color: black;"&gt;&amp;nbsp;&amp;nbsp; spi_ptr-&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="color: #0000c0;"&gt;MCR&lt;/SPAN&gt;&lt;SPAN style="color: black;"&gt; |= SPI_MCR_PCSIS(0xFF);&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #3f7f5f;"&gt;/* Disable interrupts */&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt;&lt;SPAN style="color: black;"&gt;&amp;nbsp;&amp;nbsp; spi_ptr-&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="color: #0000c0;"&gt;RSER&lt;/SPAN&gt;&lt;SPAN style="color: black;"&gt; = 0;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #3f7f5f;"&gt;/* Clear all flags */&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt;&lt;SPAN style="color: black;"&gt;&amp;nbsp;&amp;nbsp; spi_ptr-&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="color: #0000c0;"&gt;SR&lt;/SPAN&gt;&lt;SPAN style="color: black;"&gt; = ~SPI_SR_TFFF_MASK;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt;&lt;SPAN style="color: black;"&gt;&amp;nbsp;&amp;nbsp; spi_ptr-&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="color: #0000c0;"&gt;RSER&lt;/SPAN&gt;&lt;SPAN style="color: black;"&gt;= SPI_RSER_RFDF_RE_MASK;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #3f7f5f;"&gt;/* Enable SPI module */&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt;&lt;SPAN style="color: black;"&gt;&amp;nbsp;&amp;nbsp; spi_ptr-&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="color: #0000c0;"&gt;MCR&lt;/SPAN&gt;&lt;SPAN style="color: black;"&gt; &amp;amp;= (~SPI_MCR_HALT_MASK);&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde'; color: black;"&gt;}&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'arial black', 'avant garde'; font-size: 12pt;"&gt;The ISR to receive data on SPI is the same in bootcode and firmware:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;BLOCKQUOTE&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt;&lt;STRONG style="color: #7f0055;"&gt;__attribute__&lt;/STRONG&gt;&lt;SPAN style="color: black;"&gt; ((interrupt(&lt;/SPAN&gt;&lt;SPAN style="color: #2a00ff;"&gt;"IRQ"&lt;/SPAN&gt;&lt;SPAN style="color: black;"&gt;)))&lt;/SPAN&gt;&lt;STRONG style="color: #7f0055;"&gt;void&lt;/STRONG&gt;&lt;SPAN style="color: black;"&gt; &lt;STRONG style="background: silver;"&gt;ISR_SPI_SLAVE&lt;/STRONG&gt;(&lt;/SPAN&gt;&lt;STRONG style="color: #7f0055;"&gt;void&lt;/STRONG&gt;&lt;SPAN style="color: black;"&gt;)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde'; color: black;"&gt;{&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #005032;"&gt;SPI_MemMapPtr&lt;/SPAN&gt;&lt;SPAN style="color: black;"&gt; spi_ptr= (&lt;/SPAN&gt;&lt;SPAN style="color: #005032;"&gt;SPI_MemMapPtr&lt;/SPAN&gt;&lt;SPAN style="color: black;"&gt;)RH_SPI_SLAVE_PTR;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde'; color: black;"&gt; DISABLE_INTERUPTS;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG style="color: #7f0055;"&gt;while&lt;/STRONG&gt;&lt;SPAN style="color: black;"&gt; (spi_ptr-&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="color: #0000c0;"&gt;SR&lt;/SPAN&gt;&lt;SPAN style="color: black;"&gt; &amp;amp; SPI_SR_RFDF_MASK)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde'; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt; &lt;STRONG style="color: #7f0055;"&gt;static&lt;/STRONG&gt; &lt;SPAN style="color: #005032;"&gt;uchar&lt;/SPAN&gt;&lt;SPAN style="color: black;"&gt; *ucRxPtr;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt; &lt;SPAN style="color: #005032;"&gt;uint16_t&lt;/SPAN&gt;&lt;SPAN style="color: black;"&gt; uiData&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = spi_ptr-&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="color: #0000c0;"&gt;POPR&lt;/SPAN&gt;&lt;SPAN style="color: black;"&gt;;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt;&lt;SPAN style="color: black;"&gt; spi_ptr-&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="color: #0000c0;"&gt;SR&lt;/SPAN&gt;&lt;SPAN style="color: black;"&gt; = SPI_SR_RFDF_MASK;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt; &lt;STRONG style="color: #7f0055;"&gt;if&lt;/STRONG&gt;&lt;SPAN style="color: black;"&gt; ( g_RHspi.&lt;/SPAN&gt;&lt;SPAN style="color: #0000c0;"&gt;uiSlaveTimeout&lt;/SPAN&gt;&lt;SPAN style="color: black;"&gt; == 0 )&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde'; color: black;"&gt; {&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt;&lt;SPAN style="color: black;"&gt;&amp;nbsp; ucRxPtr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = (&lt;/SPAN&gt;&lt;SPAN style="color: #005032;"&gt;uint8_t&lt;/SPAN&gt;&lt;SPAN style="color: black;"&gt;*)&amp;amp;(g_RHspi.&lt;/SPAN&gt;&lt;SPAN style="color: #0000c0;"&gt;buf&lt;/SPAN&gt;&lt;SPAN style="color: black;"&gt;[g_RHspi.&lt;/SPAN&gt;&lt;SPAN style="color: #0000c0;"&gt;uiBufNum&lt;/SPAN&gt;&lt;SPAN style="color: black;"&gt;].&lt;/SPAN&gt;&lt;SPAN style="color: #0000c0;"&gt;ucRx_buf&lt;/SPAN&gt;&lt;SPAN style="color: black;"&gt;[0]);&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde'; color: black;"&gt; }&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde'; color: black;"&gt; *ucRxPtr++= ((uiData&amp;gt;&amp;gt;8)&amp;amp; 0x0ff);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde'; color: black;"&gt; *ucRxPtr++= (uiData &amp;amp; 0x0ff);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt;&lt;SPAN style="color: black;"&gt; g_RHspi.&lt;/SPAN&gt;&lt;SPAN style="color: #0000c0;"&gt;uiSlaveTimeout&lt;/SPAN&gt;&lt;SPAN style="color: black;"&gt;= 2;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde';"&gt;&lt;SPAN style="color: black;"&gt; g_RHspi.&lt;/SPAN&gt;&lt;SPAN style="color: #0000c0;"&gt;uiSlaveRxCnt&lt;/SPAN&gt;&lt;SPAN style="color: black;"&gt;+= 2;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde'; color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde'; color: black;"&gt; ENABLE_INTERUPTS;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde'; color: black;"&gt;}&lt;/SPAN&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde'; color: black;"&gt;The code works correctly in Boot, but once it's inside MQX it develops an issue where the data received on even buffer indexes are the correctly received values, but the odd bytes are shifted in memory by 6 index slots. So if byte 9 is incorrect, the correct byte will be at byte 15 and byte 10 is the correct byte that should have been received. &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt; font-family: 'arial black', 'avant garde'; color: black;"&gt;Debug has only given me:&lt;/SPAN&gt;&lt;SPAN style="color: black; font-family: 'arial black', 'avant garde';"&gt; "RESERVED_X” registers are all 0xBA in firmware, where they have various values in bootcode&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 10 Feb 2016 18:39:08 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-MQX-receive-buffer-only-even-buffer-correct-mk60/m-p/502232#M31466</guid>
      <dc:creator>jparrish88</dc:creator>
      <dc:date>2016-02-10T18:39:08Z</dc:date>
    </item>
    <item>
      <title>Re: SPI MQX receive buffer only even buffer correct mk60</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-MQX-receive-buffer-only-even-buffer-correct-mk60/m-p/502233#M31467</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;This is not a solution.&amp;nbsp; I have further details on this issue, as this came from my company.&amp;nbsp; Hope someone can recognize this issue and can theorize on a possible cause.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #1f497d; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt;We turn ON FIFO but not DMA.&amp;nbsp; We use the Receive FIFO Drain Interrupt to tell us when data is received in the FIFO.&amp;nbsp; We read POPR register and clear RFDF bit to retrieve each data word in the ISR.&amp;nbsp; We use a frame size of 16 bits.&amp;nbsp;&amp;nbsp; So each read of POPR register will retrieve two bytes.&amp;nbsp; The received data is clocked and pushed into the RX FIFO correctly.&amp;nbsp; We can observe&amp;nbsp; this using the RXFR0,&amp;nbsp; RXFR1,&amp;nbsp; RXFR2, and RXFR3 register contents.&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #1f497d; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #1f497d; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt;The problem is that the SR register’s&lt;/SPAN&gt; &lt;SPAN style="color: #1f497d; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt;POPNXTPTR field (least significant nibble) always jumps from 0 to 2 (skipping 1) after reading POPR register and clearing SR register’s RFDF status bit.&amp;nbsp; In other words: POPNXTPTR would point to RXFR0.&amp;nbsp; Then jumps to pointing to&lt;BR /&gt;RXFR2.&amp;nbsp; Next it points to RXFR3 and then to RXFR0 again.&amp;nbsp; This skipping of RXFR1 causes problems.&amp;nbsp; Here is an illustration of the&lt;BR /&gt;sequence that we observe:&lt;/SPAN&gt;&lt;/P&gt;&lt;OL style="list-style-type: decimal;"&gt;&lt;LI&gt;&lt;SPAN style="color: #1f497d; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt;In the beginning POPNXTPTR = 0, pointing to RXFR0&lt;/SPAN&gt;&lt;/LI&gt;&lt;LI&gt;&lt;SPAN style="color: #1f497d; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt;We got data clocked and pushed into the FIFO, We read POPR register and clear RFDF bit.&amp;nbsp; POPNXTPTR now equals 2, pointing to&lt;BR /&gt;RXFR2&amp;nbsp; (&lt;/SPAN&gt;&lt;SPAN style="color: #00b0f0; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt;POPNXTPTR should equal 1&lt;/SPAN&gt;&lt;SPAN style="color: #1f497d; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt;)&lt;/SPAN&gt;&lt;/LI&gt;&lt;LI&gt;&lt;SPAN style="color: #1f497d; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt;We got new data again.&amp;nbsp; We read POPR register and clear RFDF bit.&amp;nbsp; POPNXTPTR now equals 3, pointing to RXFR3&amp;nbsp; &lt;/SPAN&gt;&lt;/LI&gt;&lt;LI&gt;&lt;SPAN style="color: #1f497d; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt;We got new data again.&amp;nbsp; We read POPR register and clear RFDF bit.&amp;nbsp; POPNXTPTR now equals 0, pointing to RXFR0&lt;/SPAN&gt;&lt;/LI&gt;&lt;LI&gt;&lt;SPAN style="color: #1f497d; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt;The cycle repeats.&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;&lt;SPAN style="color: #1f497d; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #1f497d; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt;Additionally, when reading the POPR register (16 bits data), the received 16 bit word always consists of one byte (8 bits) from current FIFO&lt;BR /&gt;entry and another byte (8 bits) from the next FIFO entry.&amp;nbsp; For instance:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #1f497d; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If POPNXTPTR = 0, reading POPR would get the first 8 bits of RXFR0 and the second 8 bits of RXFR1.&amp;nbsp; – &lt;/SPAN&gt;&lt;SPAN style="color: #00b0f0; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt;POPR&lt;BR /&gt;should contain all 16 bits from RXFR0&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #1f497d; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If POPNXTPTR = 1, reading POPR would get the first 8 bits of RXFR1 and the second 8 bits of RXFR2. - &lt;/SPAN&gt;&lt;SPAN style="color: #00b0f0; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt;POPR&lt;BR /&gt;should contain all 16 bits from RXFR1&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #1f497d; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; And so on . . .&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #1f497d; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #1f497d; font-family: 'Calibri',sans-serif; font-size: 11pt;"&gt;In summary, the problem seem to be the SPI HW module is not updating pointers correctly internally.&amp;nbsp; It is possible that we may not have initialized it properly.&amp;nbsp; Our init routine is already posted here by jparish88.&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 16 Feb 2016 19:54:50 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-MQX-receive-buffer-only-even-buffer-correct-mk60/m-p/502233#M31467</guid>
      <dc:creator>henryle</dc:creator>
      <dc:date>2016-02-16T19:54:50Z</dc:date>
    </item>
    <item>
      <title>Re: SPI MQX receive buffer only even buffer correct mk60</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-MQX-receive-buffer-only-even-buffer-correct-mk60/m-p/502234#M31468</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello, &lt;/P&gt;&lt;P&gt;MQX includes a SPI driver, there are some example codes that you can use as reference.&lt;/P&gt;&lt;P&gt;Which MQX version are you using?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;Soledad&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 16 Feb 2016 22:56:15 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-MQX-receive-buffer-only-even-buffer-correct-mk60/m-p/502234#M31468</guid>
      <dc:creator>soledad</dc:creator>
      <dc:date>2016-02-16T22:56:15Z</dc:date>
    </item>
  </channel>
</rss>

