<?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のトピックimx6qp ECSPI slave mode TX data missing</title>
    <link>https://community.nxp.com/t5/i-MX-Processors/imx6qp-ECSPI-slave-mode-TX-data-missing/m-p/476889#M75665</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;We have developed a custom ECSPI slave driver for iMX6 and tested it on saber AI development board with imx6qp processor (MCIMX6QPAICPU3.)&lt;/P&gt;&lt;P&gt;The ECSPI_1 lines of the development board is connected to another microcontroller for testing.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="text-decoration: underline;"&gt;Following are our observations.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;The Reception (MOSI) on imx6 side was working perfectly. but on the transmission side (MISO) we observed that some bytes are missing in TX data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Could you please help us to resolve this issue.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #e23d39;"&gt;&lt;STRONG&gt;Another strange thing is that the same code works perfectly in a imx6 saber lite evaluation board, both Tx and Rx data is perfect.&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#define SPI_LENGTH 64&lt;/P&gt;&lt;P&gt;struct spi_transfer&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; uint8_t rx[SPI_LENGTH];&lt;/P&gt;&lt;P&gt;&amp;nbsp; uint8_t tx[SPI_LENGTH];&lt;/P&gt;&lt;P&gt;};&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;typedef struct __spi_dev{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; struct spi_transfer spi_xfer;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; int irq;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; void __iomem *base;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; struct clk *clk_per;&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;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; struct clk *clk_ipg;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; unsigned long spi_clk;&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;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; unsigned int spi_bus_clk;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; struct completion xfer_done; &lt;/P&gt;&lt;P&gt;}spi_dev_t;&lt;/P&gt;&lt;P&gt;spi_dev_t * p_spi_dev = NULL;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="text-decoration: underline;"&gt;Reg Configuration:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;static int setup_spi_slave(spi_dev_t *spi_imx)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel(0x00000000, p_spi_dev-&amp;gt;base + MX51_ECSPI_CTRL); /* Reset ecspi*/&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;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; writel(0x00700001, p_spi_dev-&amp;gt;base + MX51_ECSPI_CTRL); /* Burst length to 1 byte */&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;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; writel(0x00000011, p_spi_dev-&amp;gt;base + MX51_ECSPI_CONFIG); /* Set PHA and POL*/&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; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; writel(0x003f0000, p_spi_dev-&amp;gt;base + MX51_ECSPI_DMA); /* Set threshold to 63 bytes */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; writel(0x00000010, p_spi_dev-&amp;gt;base + MX51_ECSPI_INT); /* Set threshold interrupt */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="text-decoration: underline;"&gt;ISR code&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;static irqreturn_t imx6_spi_slave_isr(int irq, void *dev_id)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; static unsigned int count = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (rx_available(p_spi_dev))&lt;/P&gt;&lt;P&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p_spi_dev-&amp;gt;spi_xfer.rx[count] = (uint8_t)readl(p_spi_dev-&amp;gt;base + MXC_CSPIRXDATA);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel(p_spi_dev-&amp;gt;spi_xfer.tx[count],p_spi_dev-&amp;gt;base + MXC_CSPITXDATA);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; count++;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; count = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*Clear TX buff*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; memset(&amp;amp;p_spi_dev-&amp;gt;spi_xfer.tx,0,SPI_LENGTH);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; complete(&amp;amp;p_spi_dev-&amp;gt;xfer_done);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;return IRQ_HANDLED;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="text-decoration: underline;"&gt;The buffer is filled with following data.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;static void fill_tx_buff(void)&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;&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;&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;P&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;&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;&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;&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;&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;P&gt;&amp;nbsp;&amp;nbsp; snprintf(p_spi_dev-&amp;gt;spi_xfer.tx,64,"%s","This code is to test ECSPI communication between two micro&amp;nbsp;&amp;nbsp; \r\n");&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="text-decoration: underline;"&gt;The output is as follows.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;[0] 'T'&lt;/P&gt;&lt;P&gt;[1] 'h'&lt;/P&gt;&lt;P&gt;[2] 'i'&lt;/P&gt;&lt;P&gt;[3] 's'&lt;/P&gt;&lt;P&gt;[4] ' '&lt;/P&gt;&lt;P&gt;[5] 'o' /* c&amp;nbsp; is missing */&lt;/P&gt;&lt;P&gt;[6] 'd'&lt;/P&gt;&lt;P&gt;[7] 'e'&lt;/P&gt;&lt;P&gt;[8] ' '&lt;/P&gt;&lt;P&gt;[9] 'i'&lt;/P&gt;&lt;P&gt;[10] 's'&lt;/P&gt;&lt;P&gt;[11] ' '&lt;/P&gt;&lt;P&gt;[12] 't'&lt;/P&gt;&lt;P&gt;[13] ' ' /* o missing */&lt;/P&gt;&lt;P&gt;[14] 't'&lt;/P&gt;&lt;P&gt;[15] 's' /* e missing */&lt;/P&gt;&lt;P&gt;[16] 't'&lt;/P&gt;&lt;P&gt;[17] ' '&lt;/P&gt;&lt;P&gt;[18] 'E'&lt;/P&gt;&lt;P&gt;[19] 'C'&lt;/P&gt;&lt;P&gt;[20] 'S'&lt;/P&gt;&lt;P&gt;[21] 'P'&lt;/P&gt;&lt;P&gt;[22] 'I'&lt;/P&gt;&lt;P&gt;[23] ' '&lt;/P&gt;&lt;P&gt;[24] 'c'&lt;/P&gt;&lt;P&gt;[25] 'o'&lt;/P&gt;&lt;P&gt;[26] 'm'&lt;/P&gt;&lt;P&gt;[27] 'm'&lt;/P&gt;&lt;P&gt;[28] 'u'&lt;/P&gt;&lt;P&gt;[29] 'n'&lt;/P&gt;&lt;P&gt;[30] 'i'&lt;/P&gt;&lt;P&gt;[31] 'c'&lt;/P&gt;&lt;P&gt;[32] 'a'&lt;/P&gt;&lt;P&gt;[33] 't'&lt;/P&gt;&lt;P&gt;[34] 'i'&lt;/P&gt;&lt;P&gt;[35] 'o'&lt;/P&gt;&lt;P&gt;[36] 'n'&lt;/P&gt;&lt;P&gt;[37] ' '&lt;/P&gt;&lt;P&gt;[38] 'b'&lt;/P&gt;&lt;P&gt;[39] 't' /* e missing */&lt;/P&gt;&lt;P&gt;[40] 'w'&lt;/P&gt;&lt;P&gt;[41] 'e'&lt;/P&gt;&lt;P&gt;[42] 'e'&lt;/P&gt;&lt;P&gt;[43] 'n'&lt;/P&gt;&lt;P&gt;[44] ' '&lt;/P&gt;&lt;P&gt;[45] 't'&lt;/P&gt;&lt;P&gt;[46] 'w'&lt;/P&gt;&lt;P&gt;[47] 'o'&lt;/P&gt;&lt;P&gt;[48] ' '&lt;/P&gt;&lt;P&gt;[49] 'm'&lt;/P&gt;&lt;P&gt;[50] 'i'&lt;/P&gt;&lt;P&gt;[51] 'c'&lt;/P&gt;&lt;P&gt;[52] 'r'&lt;/P&gt;&lt;P&gt;[53] 'o'&lt;/P&gt;&lt;P&gt;[54] ' '&lt;/P&gt;&lt;P&gt;[55] ' '&lt;/P&gt;&lt;P&gt;[56] '\r&lt;/P&gt;&lt;P&gt;[57] '\n&lt;/P&gt;&lt;P&gt;[58] ' '&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 26 Apr 2016 06:45:30 GMT</pubDate>
    <dc:creator>sijilcv</dc:creator>
    <dc:date>2016-04-26T06:45:30Z</dc:date>
    <item>
      <title>imx6qp ECSPI slave mode TX data missing</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/imx6qp-ECSPI-slave-mode-TX-data-missing/m-p/476889#M75665</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;We have developed a custom ECSPI slave driver for iMX6 and tested it on saber AI development board with imx6qp processor (MCIMX6QPAICPU3.)&lt;/P&gt;&lt;P&gt;The ECSPI_1 lines of the development board is connected to another microcontroller for testing.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="text-decoration: underline;"&gt;Following are our observations.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;The Reception (MOSI) on imx6 side was working perfectly. but on the transmission side (MISO) we observed that some bytes are missing in TX data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Could you please help us to resolve this issue.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #e23d39;"&gt;&lt;STRONG&gt;Another strange thing is that the same code works perfectly in a imx6 saber lite evaluation board, both Tx and Rx data is perfect.&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#define SPI_LENGTH 64&lt;/P&gt;&lt;P&gt;struct spi_transfer&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; uint8_t rx[SPI_LENGTH];&lt;/P&gt;&lt;P&gt;&amp;nbsp; uint8_t tx[SPI_LENGTH];&lt;/P&gt;&lt;P&gt;};&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;typedef struct __spi_dev{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; struct spi_transfer spi_xfer;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; int irq;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; void __iomem *base;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; struct clk *clk_per;&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;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; struct clk *clk_ipg;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; unsigned long spi_clk;&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;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; unsigned int spi_bus_clk;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; struct completion xfer_done; &lt;/P&gt;&lt;P&gt;}spi_dev_t;&lt;/P&gt;&lt;P&gt;spi_dev_t * p_spi_dev = NULL;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="text-decoration: underline;"&gt;Reg Configuration:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;static int setup_spi_slave(spi_dev_t *spi_imx)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel(0x00000000, p_spi_dev-&amp;gt;base + MX51_ECSPI_CTRL); /* Reset ecspi*/&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;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; writel(0x00700001, p_spi_dev-&amp;gt;base + MX51_ECSPI_CTRL); /* Burst length to 1 byte */&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;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; writel(0x00000011, p_spi_dev-&amp;gt;base + MX51_ECSPI_CONFIG); /* Set PHA and POL*/&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; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; writel(0x003f0000, p_spi_dev-&amp;gt;base + MX51_ECSPI_DMA); /* Set threshold to 63 bytes */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; writel(0x00000010, p_spi_dev-&amp;gt;base + MX51_ECSPI_INT); /* Set threshold interrupt */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="text-decoration: underline;"&gt;ISR code&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;static irqreturn_t imx6_spi_slave_isr(int irq, void *dev_id)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; static unsigned int count = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (rx_available(p_spi_dev))&lt;/P&gt;&lt;P&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p_spi_dev-&amp;gt;spi_xfer.rx[count] = (uint8_t)readl(p_spi_dev-&amp;gt;base + MXC_CSPIRXDATA);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writel(p_spi_dev-&amp;gt;spi_xfer.tx[count],p_spi_dev-&amp;gt;base + MXC_CSPITXDATA);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; count++;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; count = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*Clear TX buff*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; memset(&amp;amp;p_spi_dev-&amp;gt;spi_xfer.tx,0,SPI_LENGTH);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; complete(&amp;amp;p_spi_dev-&amp;gt;xfer_done);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;return IRQ_HANDLED;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="text-decoration: underline;"&gt;The buffer is filled with following data.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;static void fill_tx_buff(void)&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;&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;&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;P&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;&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;&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;&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;&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;P&gt;&amp;nbsp;&amp;nbsp; snprintf(p_spi_dev-&amp;gt;spi_xfer.tx,64,"%s","This code is to test ECSPI communication between two micro&amp;nbsp;&amp;nbsp; \r\n");&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="text-decoration: underline;"&gt;The output is as follows.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;[0] 'T'&lt;/P&gt;&lt;P&gt;[1] 'h'&lt;/P&gt;&lt;P&gt;[2] 'i'&lt;/P&gt;&lt;P&gt;[3] 's'&lt;/P&gt;&lt;P&gt;[4] ' '&lt;/P&gt;&lt;P&gt;[5] 'o' /* c&amp;nbsp; is missing */&lt;/P&gt;&lt;P&gt;[6] 'd'&lt;/P&gt;&lt;P&gt;[7] 'e'&lt;/P&gt;&lt;P&gt;[8] ' '&lt;/P&gt;&lt;P&gt;[9] 'i'&lt;/P&gt;&lt;P&gt;[10] 's'&lt;/P&gt;&lt;P&gt;[11] ' '&lt;/P&gt;&lt;P&gt;[12] 't'&lt;/P&gt;&lt;P&gt;[13] ' ' /* o missing */&lt;/P&gt;&lt;P&gt;[14] 't'&lt;/P&gt;&lt;P&gt;[15] 's' /* e missing */&lt;/P&gt;&lt;P&gt;[16] 't'&lt;/P&gt;&lt;P&gt;[17] ' '&lt;/P&gt;&lt;P&gt;[18] 'E'&lt;/P&gt;&lt;P&gt;[19] 'C'&lt;/P&gt;&lt;P&gt;[20] 'S'&lt;/P&gt;&lt;P&gt;[21] 'P'&lt;/P&gt;&lt;P&gt;[22] 'I'&lt;/P&gt;&lt;P&gt;[23] ' '&lt;/P&gt;&lt;P&gt;[24] 'c'&lt;/P&gt;&lt;P&gt;[25] 'o'&lt;/P&gt;&lt;P&gt;[26] 'm'&lt;/P&gt;&lt;P&gt;[27] 'm'&lt;/P&gt;&lt;P&gt;[28] 'u'&lt;/P&gt;&lt;P&gt;[29] 'n'&lt;/P&gt;&lt;P&gt;[30] 'i'&lt;/P&gt;&lt;P&gt;[31] 'c'&lt;/P&gt;&lt;P&gt;[32] 'a'&lt;/P&gt;&lt;P&gt;[33] 't'&lt;/P&gt;&lt;P&gt;[34] 'i'&lt;/P&gt;&lt;P&gt;[35] 'o'&lt;/P&gt;&lt;P&gt;[36] 'n'&lt;/P&gt;&lt;P&gt;[37] ' '&lt;/P&gt;&lt;P&gt;[38] 'b'&lt;/P&gt;&lt;P&gt;[39] 't' /* e missing */&lt;/P&gt;&lt;P&gt;[40] 'w'&lt;/P&gt;&lt;P&gt;[41] 'e'&lt;/P&gt;&lt;P&gt;[42] 'e'&lt;/P&gt;&lt;P&gt;[43] 'n'&lt;/P&gt;&lt;P&gt;[44] ' '&lt;/P&gt;&lt;P&gt;[45] 't'&lt;/P&gt;&lt;P&gt;[46] 'w'&lt;/P&gt;&lt;P&gt;[47] 'o'&lt;/P&gt;&lt;P&gt;[48] ' '&lt;/P&gt;&lt;P&gt;[49] 'm'&lt;/P&gt;&lt;P&gt;[50] 'i'&lt;/P&gt;&lt;P&gt;[51] 'c'&lt;/P&gt;&lt;P&gt;[52] 'r'&lt;/P&gt;&lt;P&gt;[53] 'o'&lt;/P&gt;&lt;P&gt;[54] ' '&lt;/P&gt;&lt;P&gt;[55] ' '&lt;/P&gt;&lt;P&gt;[56] '\r&lt;/P&gt;&lt;P&gt;[57] '\n&lt;/P&gt;&lt;P&gt;[58] ' '&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 26 Apr 2016 06:45:30 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/imx6qp-ECSPI-slave-mode-TX-data-missing/m-p/476889#M75665</guid>
      <dc:creator>sijilcv</dc:creator>
      <dc:date>2016-04-26T06:45:30Z</dc:date>
    </item>
    <item>
      <title>Re: imx6qp ECSPI slave mode TX data missing</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/imx6qp-ECSPI-slave-mode-TX-data-missing/m-p/476890#M75666</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Sijil CV,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This seems to be a hardware problem rather than a software problem, since it works correctly with the i.MX6 Sabrelite board.&lt;/P&gt;&lt;P&gt;I would recommend checking how the ESCPI lines are connected since it’s possible that the voltages are falling due to unwanted loads on the line.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 03 May 2016 19:33:24 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/imx6qp-ECSPI-slave-mode-TX-data-missing/m-p/476890#M75666</guid>
      <dc:creator>gusarambula</dc:creator>
      <dc:date>2016-05-03T19:33:24Z</dc:date>
    </item>
    <item>
      <title>Re: imx6qp ECSPI slave mode TX data missing</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/imx6qp-ECSPI-slave-mode-TX-data-missing/m-p/476891#M75667</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;Would you mind sharing this slave driver source code? Or does it include proprietary sections you can't share?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Gary&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 04 May 2016 10:10:07 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/imx6qp-ECSPI-slave-mode-TX-data-missing/m-p/476891#M75667</guid>
      <dc:creator>gary_bisson</dc:creator>
      <dc:date>2016-05-04T10:10:07Z</dc:date>
    </item>
    <item>
      <title>Re: imx6qp ECSPI slave mode TX data missing</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/imx6qp-ECSPI-slave-mode-TX-data-missing/m-p/476892#M75668</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks gusarambula yes it was a hardware issue.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 04 May 2016 15:48:38 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/imx6qp-ECSPI-slave-mode-TX-data-missing/m-p/476892#M75668</guid>
      <dc:creator>sijilcv</dc:creator>
      <dc:date>2016-05-04T15:48:38Z</dc:date>
    </item>
  </channel>
</rss>

