<?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 ECSPI chipselect toggle after each word with DMA in i.MX Processors</title>
    <link>https://community.nxp.com/t5/i-MX-Processors/ECSPI-chipselect-toggle-after-each-word-with-DMA/m-p/1060724#M155970</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I have been working with the ECSPI module exported on the J1003 pins of the i.MX 8 Mini evaluation kit (imx8mmevk).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have edited the DeviceTree to include a proper node under the &lt;EM&gt;ecspi&lt;/EM&gt; node, written a driver for it and it communicates fine.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am using a single SPI message with a single transfer, sent by &lt;EM&gt;spi_async()&lt;/EM&gt;. I have noticed that for transfer lengths &amp;lt;32B, the driver &lt;EM&gt;spi-imx.c&lt;/EM&gt; uses PIO implementation and transfers the bytes with CS = low, as it should (except that for len=30, the last two bytes are sent somewhat later, and CS toggles in between).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;However, my question is about DMA transfer, which is used for len&amp;gt;=32. In this mode, the CS signal toggles after each word. &lt;STRONG&gt;How can this behavior be suppressed?&lt;/STRONG&gt; Alternatively, how can the PIO mode be made to transfer all the bytes at the same time, without toggling CS?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 21 May 2020 18:32:16 GMT</pubDate>
    <dc:creator>jan_remes</dc:creator>
    <dc:date>2020-05-21T18:32:16Z</dc:date>
    <item>
      <title>ECSPI chipselect toggle after each word with DMA</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/ECSPI-chipselect-toggle-after-each-word-with-DMA/m-p/1060724#M155970</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I have been working with the ECSPI module exported on the J1003 pins of the i.MX 8 Mini evaluation kit (imx8mmevk).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have edited the DeviceTree to include a proper node under the &lt;EM&gt;ecspi&lt;/EM&gt; node, written a driver for it and it communicates fine.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am using a single SPI message with a single transfer, sent by &lt;EM&gt;spi_async()&lt;/EM&gt;. I have noticed that for transfer lengths &amp;lt;32B, the driver &lt;EM&gt;spi-imx.c&lt;/EM&gt; uses PIO implementation and transfers the bytes with CS = low, as it should (except that for len=30, the last two bytes are sent somewhat later, and CS toggles in between).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;However, my question is about DMA transfer, which is used for len&amp;gt;=32. In this mode, the CS signal toggles after each word. &lt;STRONG&gt;How can this behavior be suppressed?&lt;/STRONG&gt; Alternatively, how can the PIO mode be made to transfer all the bytes at the same time, without toggling CS?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 21 May 2020 18:32:16 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/ECSPI-chipselect-toggle-after-each-word-with-DMA/m-p/1060724#M155970</guid>
      <dc:creator>jan_remes</dc:creator>
      <dc:date>2020-05-21T18:32:16Z</dc:date>
    </item>
    <item>
      <title>Re: ECSPI chipselect toggle after each word with DMA</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/ECSPI-chipselect-toggle-after-each-word-with-DMA/m-p/1060725#M155971</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;A class="jx-jive-macro-user" href="https://community.nxp.com/people/jan.remes@invasys.com"&gt;jan.remes@invasys.com&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; I've sent some comments directly to You.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Yuri&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 03 Jun 2020 13:19:32 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/ECSPI-chipselect-toggle-after-each-word-with-DMA/m-p/1060725#M155971</guid>
      <dc:creator>Yuri</dc:creator>
      <dc:date>2020-06-03T13:19:32Z</dc:date>
    </item>
    <item>
      <title>Re: ECSPI chipselect toggle after each word with DMA</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/ECSPI-chipselect-toggle-after-each-word-with-DMA/m-p/1060726#M155972</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Yuri,&lt;/P&gt;&lt;P&gt;I have the same problem regarding the chip select toggling while making DMA transfers. Could you please send me the comments too?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Kind regards,&lt;/P&gt;&lt;P&gt;Dominik&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 19 Jun 2020 08:46:36 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/ECSPI-chipselect-toggle-after-each-word-with-DMA/m-p/1060726#M155972</guid>
      <dc:creator>dnortmeyer</dc:creator>
      <dc:date>2020-06-19T08:46:36Z</dc:date>
    </item>
    <item>
      <title>Re: ECSPI chipselect toggle after each word with DMA</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/ECSPI-chipselect-toggle-after-each-word-with-DMA/m-p/1060727#M155973</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;A class="jx-jive-macro-user" href="https://community.nxp.com/people/jan.remes@invasys.com"&gt;jan.remes@invasys.com&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;A class="jx-jive-macro-user" href="https://community.nxp.com/people/dnortmeyer@de.pepperl-fuchs.com"&gt;dnortmeyer@de.pepperl-fuchs.com&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; I hope, the following clarifies the issue.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;A href="https://community.nxp.com/thread/239078"&gt;Control SPI SS_CTL for single burst operation.&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Yuri.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 23 Jun 2020 07:19:51 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/ECSPI-chipselect-toggle-after-each-word-with-DMA/m-p/1060727#M155973</guid>
      <dc:creator>Yuri</dc:creator>
      <dc:date>2020-06-23T07:19:51Z</dc:date>
    </item>
    <item>
      <title>Re: ECSPI chipselect toggle after each word with DMA</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/ECSPI-chipselect-toggle-after-each-word-with-DMA/m-p/1060728#M155974</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;A class="jx-jive-macro-user" href="https://community.nxp.com/people/dnortmeyer@de.pepperl-fuchs.com"&gt;dnortmeyer@de.pepperl-fuchs.com&lt;/A&gt;‌&lt;/P&gt;&lt;P&gt;&lt;A class="jx-jive-macro-user" href="https://community.nxp.com/people/YuriMuhin_ng"&gt;YuriMuhin_ng&lt;/A&gt;‌&lt;/P&gt;&lt;P&gt;I have finally solved this issue by using a GPIO pin for Slave Select instead of the SS0 signal. I was propmted to do so by the file &lt;EM&gt;include/linux/platform_data/spi-imx.h&lt;/EM&gt; in the Linux kernel sources, which literally says:&lt;/P&gt;&lt;BLOCKQUOTE class="jive_macro_quote jive-quote jive_text_macro"&gt;&lt;P&gt;Normally you want to use gpio based chip selects as the CSPI module tries to be intelligent about when to assert the chipselect: The CSPI module deasserts the chipselect once it runs out of input data.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So I have done the following:&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;In the DeviceTree, I have configured the ECSPI to have two CS lines with:&lt;BR /&gt;&lt;EM&gt;&amp;amp;ecspi2 {&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cs-gpios = &amp;lt;0&amp;gt;, &amp;lt;&amp;amp;gpio5 8 GPIO_ACTIVE_LOW&amp;gt;;&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;};&lt;/EM&gt;&lt;BR /&gt;&lt;BR /&gt;AFAIK, this means that child node with &lt;EM&gt;reg = &amp;lt;0&amp;gt;;&lt;/EM&gt; is selected by ECSPI's integrated &lt;EM&gt;SS0&lt;/EM&gt; signal and child node with &lt;EM&gt;reg = &amp;lt;1&amp;gt;;&lt;/EM&gt; is selected by activating (pulling low) the GPIO5_IO8.&lt;BR /&gt;&lt;BR /&gt;&lt;/LI&gt;&lt;LI&gt;In the DeviceTree, I have configured the pins 7,8,10,11 (on the J1003 header of the evaluation board) to work as GPIO pins thus:&lt;BR /&gt;&lt;BR /&gt;&lt;EM&gt;/* Disable the UART3 device that was originally using those pins and delete its pin control settings */&lt;BR /&gt;&amp;amp;uart3 {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /delete-property/ pinctrl-names;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /delete-property/ pinctrl-0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; status = "disabled";&lt;BR /&gt;};&lt;BR /&gt;&lt;BR /&gt;&amp;amp;iomuxc {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; imx8mmevk {&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; /delete-node/ uart3grp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;BR /&gt;};&lt;BR /&gt;&lt;BR /&gt;/* Setup the pins to be MUXed to GPIO controller */&lt;BR /&gt;&amp;amp;iomuxc {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; imx8mm-evk {&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; pinctrl_adc: adcgrp {&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fsl,pins = &amp;lt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MX8MM_IOMUXC_ECSPI1_SCLK_GPIO5_IO6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x140&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MX8MM_IOMUXC_ECSPI1_MOSI_GPIO5_IO7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x140&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MX8MM_IOMUXC_ECSPI1_SS0_GPIO5_IO9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x140&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MX8MM_IOMUXC_ECSPI1_MISO_GPIO5_IO8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x140&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;;&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;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;BR /&gt;};&lt;BR /&gt;&lt;/EM&gt;&lt;/LI&gt;&lt;LI&gt;In my SPI device DeviceTree description, I used &lt;EM&gt;reg = &amp;lt;1&amp;gt;;&lt;BR /&gt;&lt;BR /&gt;&lt;/EM&gt;&lt;/LI&gt;&lt;LI&gt;I have physically connected the ChipSelect wire of my SPI device to J1003 pin 7 (labeled UART3_CTS).&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Now the SPI works like a charm and the chipselect is low across the whole SPI transfer.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Note:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;- pin 7 is GPIO5_IO8&lt;/P&gt;&lt;P&gt;- pin 8 is GPIO5_IO7&lt;/P&gt;&lt;P&gt;- pin 10 is GPIO5_IO6&lt;/P&gt;&lt;P&gt;- pin 11 is GPIO5_IO9&lt;/P&gt;&lt;P&gt;- see &lt;EM&gt;include/dt-bindings/pinctrl/pins-imx8mm.h&lt;/EM&gt; in the Linux kernel source for possible configurations&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hope this helps.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 22 Jul 2020 08:44:59 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/ECSPI-chipselect-toggle-after-each-word-with-DMA/m-p/1060728#M155974</guid>
      <dc:creator>jan_remes</dc:creator>
      <dc:date>2020-07-22T08:44:59Z</dc:date>
    </item>
  </channel>
</rss>

