<?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>i.MX Processorsのトピックi.MX6 SPI slave occasionally missing RX bursts</title>
    <link>https://community.nxp.com/t5/i-MX-Processors/i-MX6-SPI-slave-occasionally-missing-RX-bursts/m-p/452241#M70286</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;On our custom i.MX6Q based board we use the SPI controller as slave.&lt;/P&gt;&lt;P&gt;Since we are running under Linux, we had to write a custom SPI slave driver.&lt;/P&gt;&lt;P&gt;This driver is very lean. It's basically just bare metal register configuration and IRQ handling - no unneccessary overhead.&lt;/P&gt;&lt;P&gt;The driver seems to work pretty good, because the master can communicate with our board and we can answer.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;However occasionally the SPI controller seems to be missing SPI bursts from the master.&lt;/P&gt;&lt;P&gt;My test environment:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Raspberry Pi 2 as SPI master sending an 8 bit value that is incremented by 1 each iteration&lt;/LI&gt;&lt;LI&gt;8 bits per word&lt;/LI&gt;&lt;LI&gt;SPI mode 0&lt;/LI&gt;&lt;LI&gt;very slow SPI clock: 7629Hz&lt;/LI&gt;&lt;LI&gt;100ms delay between each burst&lt;/LI&gt;&lt;LI&gt;Slave just sends back the data it received&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Even though the IRQ load on the i.MX6 is extremely low, about 0.5% of all SPI bursts are not recognized/lost by the i.MX6 SPI controller.&lt;/P&gt;&lt;P&gt;Things get worse as we increase the clock speed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I read about the silicon SPI bug on the i.MX6, but as far I understood this only applies to burst lengths of (32 * n) + 1.&lt;/P&gt;&lt;P&gt;Does anyone have an idea what might be going wrong?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;My relevant source code:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;SPI Master main loop:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_1444477634114227 jive_text_macro" data-renderedposition="510.6000061035156_8_1233_176" jivemacro_uid="_1444477634114227" modifiedtitle="true"&gt;&lt;P&gt;uint8_t i = 0;&lt;/P&gt;&lt;P&gt;while ( 1 ) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tx_buffer = i++;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rc = ioctl(fd, SPI_IOC_MESSAGE(1), &amp;amp;transfer);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( rc &amp;lt; 0 ) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("Error transmitting SPI frame\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exit(255);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(f, "Sent: 0x%.2X - Received: 0x%.2X\n", tx_buffer, rx_buffer);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; usleep(100 * 1000);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Slave Kernel configuration code:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_macro_code jive_text_macro _jivemacro_uid_14444779096472277" data-renderedposition="749.5999755859375_8_1233_144" jivemacro_uid="_14444779096472277"&gt;&lt;P&gt;reg = 0x70f4e1; // 7629Hz 8bpw&lt;/P&gt;&lt;P&gt;writel(reg, slave-&amp;gt;io_base + OFFSET_CONREG);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;reg = 0;&lt;/P&gt;&lt;P&gt;writel(reg, slave-&amp;gt;io_base + OFFSET_CONFIGREG);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;reg = 0;&lt;/P&gt;&lt;P&gt;reg |= MX51_ECSPI_INT_RREN;&lt;/P&gt;&lt;P&gt;writel(reg, slave-&amp;gt;io_base + OFFSET_INTREG);&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Slave ISR code:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_macro_code jive_text_macro _jivemacro_uid_14444780475237317" data-renderedposition="956.5999755859375_8_1233_224" jivemacro_uid="_14444780475237317" modifiedtitle="true"&gt;&lt;P&gt;static irqreturn_t spi_slave_isr(int irq, void *dev_id) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; struct spi_slave_data* slave = dev_id;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned value;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned rxcnt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; value = readl(slave-&amp;gt;io_base + OFFSET_TESTREG);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rxcnt = (value &amp;amp; MASK_RX_FIFO_COUNT) &amp;gt;&amp;gt; SHIFT_RX_FIFO_COUNT;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for ( ; rxcnt; --rxcnt ) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; value = readl(slave-&amp;gt;io_base + OFFSET_RXDATA);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((uint32_t)value, slave-&amp;gt;io_base + OFFSET_TXDATA); // just resend what we just received&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printk(KERN_INFO "rx: 0x%.2X\n", value); // not a problem here because we have 100ms delay&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return IRQ_HANDLED;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Erroneous console output on the slave:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="plain" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_14444785545685023 jive_text_macro" data-renderedposition="1243.5999755859375_8_1233_160" jivemacro_uid="_14444785545685023"&gt;&lt;P&gt;rx: 0x91&lt;/P&gt;&lt;P&gt;rx: 0x92&lt;/P&gt;&lt;P&gt;rx: 0x93&lt;/P&gt;&lt;P&gt;rx: 0x94&lt;/P&gt;&lt;P&gt;rx: 0x95&lt;/P&gt;&lt;P&gt;rx: 0x96&lt;/P&gt;&lt;P&gt;rx: 0x98&lt;/P&gt;&lt;P&gt;rx: 0x99&lt;/P&gt;&lt;P&gt;rx: 0x9A&lt;/P&gt;&lt;P&gt;rx: 0x9B&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;Note that 0x97 is missing&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Corresponding output on the master:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="plain" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_1444478649870348 jive_text_macro" data-renderedposition="1487.5999755859375_8_1233_176" jivemacro_uid="_1444478649870348"&gt;&lt;P&gt;Sent: 0x92 - Received: 0x91&lt;/P&gt;&lt;P&gt;Sent: 0x93 - Received: 0x92&lt;/P&gt;&lt;P&gt;Sent: 0x94 - Received: 0x93&lt;/P&gt;&lt;P&gt;Sent: 0x95 - Received: 0x94&lt;/P&gt;&lt;P&gt;Sent: 0x96 - Received: 0x95&lt;/P&gt;&lt;P&gt;Sent: 0x97 - Received: 0x95&lt;/P&gt;&lt;P&gt;Sent: 0x98 - Received: 0x56&lt;/P&gt;&lt;P&gt;Sent: 0x99 - Received: 0x98&lt;/P&gt;&lt;P&gt;Sent: 0x9A - Received: 0x99&lt;/P&gt;&lt;P&gt;Sent: 0x9B - Received: 0x9A&lt;/P&gt;&lt;P&gt;Sent: 0x9C - Received: 0x9B&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks for any help in advance.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Chris&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sat, 10 Oct 2015 12:07:00 GMT</pubDate>
    <dc:creator>christian_s</dc:creator>
    <dc:date>2015-10-10T12:07:00Z</dc:date>
    <item>
      <title>i.MX6 SPI slave occasionally missing RX bursts</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/i-MX6-SPI-slave-occasionally-missing-RX-bursts/m-p/452241#M70286</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;On our custom i.MX6Q based board we use the SPI controller as slave.&lt;/P&gt;&lt;P&gt;Since we are running under Linux, we had to write a custom SPI slave driver.&lt;/P&gt;&lt;P&gt;This driver is very lean. It's basically just bare metal register configuration and IRQ handling - no unneccessary overhead.&lt;/P&gt;&lt;P&gt;The driver seems to work pretty good, because the master can communicate with our board and we can answer.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;However occasionally the SPI controller seems to be missing SPI bursts from the master.&lt;/P&gt;&lt;P&gt;My test environment:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Raspberry Pi 2 as SPI master sending an 8 bit value that is incremented by 1 each iteration&lt;/LI&gt;&lt;LI&gt;8 bits per word&lt;/LI&gt;&lt;LI&gt;SPI mode 0&lt;/LI&gt;&lt;LI&gt;very slow SPI clock: 7629Hz&lt;/LI&gt;&lt;LI&gt;100ms delay between each burst&lt;/LI&gt;&lt;LI&gt;Slave just sends back the data it received&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;Even though the IRQ load on the i.MX6 is extremely low, about 0.5% of all SPI bursts are not recognized/lost by the i.MX6 SPI controller.&lt;/P&gt;&lt;P&gt;Things get worse as we increase the clock speed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I read about the silicon SPI bug on the i.MX6, but as far I understood this only applies to burst lengths of (32 * n) + 1.&lt;/P&gt;&lt;P&gt;Does anyone have an idea what might be going wrong?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;My relevant source code:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;SPI Master main loop:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_1444477634114227 jive_text_macro" data-renderedposition="510.6000061035156_8_1233_176" jivemacro_uid="_1444477634114227" modifiedtitle="true"&gt;&lt;P&gt;uint8_t i = 0;&lt;/P&gt;&lt;P&gt;while ( 1 ) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tx_buffer = i++;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rc = ioctl(fd, SPI_IOC_MESSAGE(1), &amp;amp;transfer);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( rc &amp;lt; 0 ) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("Error transmitting SPI frame\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exit(255);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf(f, "Sent: 0x%.2X - Received: 0x%.2X\n", tx_buffer, rx_buffer);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; usleep(100 * 1000);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Slave Kernel configuration code:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_macro_code jive_text_macro _jivemacro_uid_14444779096472277" data-renderedposition="749.5999755859375_8_1233_144" jivemacro_uid="_14444779096472277"&gt;&lt;P&gt;reg = 0x70f4e1; // 7629Hz 8bpw&lt;/P&gt;&lt;P&gt;writel(reg, slave-&amp;gt;io_base + OFFSET_CONREG);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;reg = 0;&lt;/P&gt;&lt;P&gt;writel(reg, slave-&amp;gt;io_base + OFFSET_CONFIGREG);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;reg = 0;&lt;/P&gt;&lt;P&gt;reg |= MX51_ECSPI_INT_RREN;&lt;/P&gt;&lt;P&gt;writel(reg, slave-&amp;gt;io_base + OFFSET_INTREG);&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Slave ISR code:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_macro_code jive_text_macro _jivemacro_uid_14444780475237317" data-renderedposition="956.5999755859375_8_1233_224" jivemacro_uid="_14444780475237317" modifiedtitle="true"&gt;&lt;P&gt;static irqreturn_t spi_slave_isr(int irq, void *dev_id) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; struct spi_slave_data* slave = dev_id;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned value;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned rxcnt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; value = readl(slave-&amp;gt;io_base + OFFSET_TESTREG);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rxcnt = (value &amp;amp; MASK_RX_FIFO_COUNT) &amp;gt;&amp;gt; SHIFT_RX_FIFO_COUNT;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for ( ; rxcnt; --rxcnt ) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; value = readl(slave-&amp;gt;io_base + OFFSET_RXDATA);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel((uint32_t)value, slave-&amp;gt;io_base + OFFSET_TXDATA); // just resend what we just received&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printk(KERN_INFO "rx: 0x%.2X\n", value); // not a problem here because we have 100ms delay&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return IRQ_HANDLED;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Erroneous console output on the slave:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="plain" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_14444785545685023 jive_text_macro" data-renderedposition="1243.5999755859375_8_1233_160" jivemacro_uid="_14444785545685023"&gt;&lt;P&gt;rx: 0x91&lt;/P&gt;&lt;P&gt;rx: 0x92&lt;/P&gt;&lt;P&gt;rx: 0x93&lt;/P&gt;&lt;P&gt;rx: 0x94&lt;/P&gt;&lt;P&gt;rx: 0x95&lt;/P&gt;&lt;P&gt;rx: 0x96&lt;/P&gt;&lt;P&gt;rx: 0x98&lt;/P&gt;&lt;P&gt;rx: 0x99&lt;/P&gt;&lt;P&gt;rx: 0x9A&lt;/P&gt;&lt;P&gt;rx: 0x9B&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;Note that 0x97 is missing&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Corresponding output on the master:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="plain" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_1444478649870348 jive_text_macro" data-renderedposition="1487.5999755859375_8_1233_176" jivemacro_uid="_1444478649870348"&gt;&lt;P&gt;Sent: 0x92 - Received: 0x91&lt;/P&gt;&lt;P&gt;Sent: 0x93 - Received: 0x92&lt;/P&gt;&lt;P&gt;Sent: 0x94 - Received: 0x93&lt;/P&gt;&lt;P&gt;Sent: 0x95 - Received: 0x94&lt;/P&gt;&lt;P&gt;Sent: 0x96 - Received: 0x95&lt;/P&gt;&lt;P&gt;Sent: 0x97 - Received: 0x95&lt;/P&gt;&lt;P&gt;Sent: 0x98 - Received: 0x56&lt;/P&gt;&lt;P&gt;Sent: 0x99 - Received: 0x98&lt;/P&gt;&lt;P&gt;Sent: 0x9A - Received: 0x99&lt;/P&gt;&lt;P&gt;Sent: 0x9B - Received: 0x9A&lt;/P&gt;&lt;P&gt;Sent: 0x9C - Received: 0x9B&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks for any help in advance.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Chris&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 10 Oct 2015 12:07:00 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/i-MX6-SPI-slave-occasionally-missing-RX-bursts/m-p/452241#M70286</guid>
      <dc:creator>christian_s</dc:creator>
      <dc:date>2015-10-10T12:07:00Z</dc:date>
    </item>
    <item>
      <title>Re: i.MX6 SPI slave occasionally missing RX bursts</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/i-MX6-SPI-slave-occasionally-missing-RX-bursts/m-p/452242#M70287</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi, &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have not tried to implement a driver for the ECSPI&amp;nbsp; module as slave in Linux. But you may find useful the below document:&lt;/P&gt;&lt;P&gt;&lt;A href="https://community.nxp.com/docs/DOC-97380"&gt;i.MX6 ESPI slave mode support patch based on rel_imx_3.0.35_4.1.0&lt;/A&gt; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The driver is non-dtb compatible, so you will have to perform a few changes. I believe it´s worth taking a look at it.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best Regards,&lt;/P&gt;&lt;P&gt;Alejandro&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 20 Oct 2015 20:57:44 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/i-MX6-SPI-slave-occasionally-missing-RX-bursts/m-p/452242#M70287</guid>
      <dc:creator>alejandrolozan1</dc:creator>
      <dc:date>2015-10-20T20:57:44Z</dc:date>
    </item>
  </channel>
</rss>

