<?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>Kinetis MicrocontrollersのトピックRe: FRDM-K28F SPI</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/FRDM-K28F-SPI/m-p/797249#M48482</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Jing,&lt;/P&gt;&lt;P&gt;Thanks for your response.&lt;/P&gt;&lt;P&gt;Could you please help in clarifying folllowing,&lt;/P&gt;&lt;P&gt;1. SPI I/O means SPI without DMA. We want to use SPI with DMA and without DMA simultaneously. I understood that, once DMA is configured to send/receive some data, the complete transaction is done by DMA. What we would like to check is, if we can 1 packet using DMA and the 2nd packet without DMA?&lt;/P&gt;&lt;P&gt;2. Ok agreed. Thanks.&lt;/P&gt;&lt;P&gt;3. Ok agreed. Thanks.&lt;/P&gt;&lt;P&gt;4. Our application needs to have good throughput numbers. So would need inputs on tuning DMA parameters, if possible.&lt;/P&gt;&lt;P&gt;Like, if we can configure DMA beat size or major/minor loop count etc to make it more efficient.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;&lt;P&gt;Ravitej&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 08 Nov 2018 16:48:04 GMT</pubDate>
    <dc:creator>ravitej_tanneru</dc:creator>
    <dc:date>2018-11-08T16:48:04Z</dc:date>
    <item>
      <title>FRDM-K28F SPI</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/FRDM-K28F-SPI/m-p/797247#M48480</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Support Team,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;We are using FRDM-K28F for one of our product development. One of our main requirement is to achieve good throughput over SPI.&lt;/P&gt;&lt;P&gt;Could it be taken on priority as we are at a critical stage of completion.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;We are using SPI0 on K28 as SPI Master at 33 MHz (I suppose this is the maximum) and using EDMA as well with SPI.&lt;/P&gt;&lt;P&gt;Need help with following,&lt;/P&gt;&lt;P&gt;1. Can we use SPI I/O and SPI_EMDA simultaneously? Some SPI transaction using DMA and some without DMA? If yes, is it possible to get any example for the same?&lt;/P&gt;&lt;P&gt;2. We observed that, for reading each byte, K28 takes 12 clock (SCK) cycles with 33Mhz Clock. 8 Clock cycles + 4 clock cycles gap before providing next clock of 8 cycles. Attaching SPI capture [Each_byte.PNG] How can we reduce this gap?&lt;/P&gt;&lt;P&gt;3. We tried to use Continuous mode, buy we were able to run only till 25MHz. Can we use 'Continuous Mode' at 33MHz?&lt;/P&gt;&lt;P&gt;4. Can we tune EDMA parameters to&amp;nbsp; increase the SPI throughput? If yes, can you provide related information like what all parameters can be configured. We are using DSPI_MasterTransferEDMA() api.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;-&amp;gt; Following code was used for SPI_DMA init.&lt;/P&gt;&lt;P&gt;/*********************************************************************************************************************&lt;BR /&gt;dspi_master_config_t spi_init()&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uint32_t srcClock_Hz;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;dspi_master_config_t masterConfig;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Master config */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;masterConfig.whichCtar = kDSPI_Ctar0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;masterConfig.ctarConfig.baudRate = TRANSFER_BAUDRATE;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;masterConfig.ctarConfig.bitsPerFrame = 8U;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;masterConfig.ctarConfig.cpol = kDSPI_ClockPolarityActiveHigh;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;masterConfig.ctarConfig.cpha = kDSPI_ClockPhaseFirstEdge;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;masterConfig.ctarConfig.direction = kDSPI_MsbFirst;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;masterConfig.ctarConfig.pcsToSckDelayInNanoSec = 1000000000U / TRANSFER_BAUDRATE;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;masterConfig.ctarConfig.lastSckToPcsDelayInNanoSec = 1000000000U / TRANSFER_BAUDRATE;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;masterConfig.ctarConfig.betweenTransferDelayInNanoSec = 1000000000U / TRANSFER_BAUDRATE;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;masterConfig.whichPcs = EXAMPLE_DSPI_MASTER_PCS_FOR_INIT;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;masterConfig.pcsActiveHighOrLow = kDSPI_PcsActiveLow;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;masterConfig.enableContinuousSCK = false;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;masterConfig.enableRxFifoOverWrite = false;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;masterConfig.enableModifiedTimingFormat = false;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;masterConfig.samplePoint = kDSPI_SckToSin0Clock;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;srcClock_Hz = DSPI_MASTER_CLK_FREQ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;DSPI_MasterInit(EXAMPLE_DSPI_MASTER_BASEADDR, &amp;amp;masterConfig, srcClock_Hz);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;return masterConfig;&lt;BR /&gt;}&lt;BR /&gt;#else&lt;BR /&gt;dspi_master_config_t SPI_DMA_INIT()&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* DMA Mux setting and EDMA init */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uint32_t masterRxChannel, masterTxChannel;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;edma_config_t userConfig;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;masterRxChannel = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;masterTxChannel = 1;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* If DSPI instances support Gasket feature, only two channels are needed. */&lt;BR /&gt;#if (!(defined(FSL_FEATURE_DSPI_HAS_GASKET) &amp;amp;&amp;amp; FSL_FEATURE_DSPI_HAS_GASKET))&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uint32_t masterIntermediaryChannel;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;masterIntermediaryChannel = 2U;&lt;BR /&gt;#endif&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* DMA MUX init */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;DMAMUX_Init(EXAMPLE_DSPI_MASTER_DMA_MUX_BASEADDR);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;DMAMUX_SetSource(EXAMPLE_DSPI_MASTER_DMA_MUX_BASEADDR, masterRxChannel,&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;(uint8_t)EXAMPLE_DSPI_MASTER_DMA_RX_REQUEST_SOURCE);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;DMAMUX_EnableChannel(EXAMPLE_DSPI_MASTER_DMA_MUX_BASEADDR, masterRxChannel);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#if (defined EXAMPLE_DSPI_MASTER_DMA_TX_REQUEST_SOURCE)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;DMAMUX_SetSource(EXAMPLE_DSPI_MASTER_DMA_MUX_BASEADDR, masterTxChannel,&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;(uint8_t)EXAMPLE_DSPI_MASTER_DMA_TX_REQUEST_SOURCE);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;DMAMUX_EnableChannel(EXAMPLE_DSPI_MASTER_DMA_MUX_BASEADDR, masterTxChannel);&lt;BR /&gt;#endif&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* EDMA init */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/*&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * userConfig.enableRoundRobinArbitration = false;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * userConfig.enableHaltOnError = true;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * userConfig.enableContinuousLinkMode = false;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * userConfig.enableDebugMode = false;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;EDMA_GetDefaultConfig(&amp;amp;userConfig);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;EDMA_Init(EXAMPLE_DSPI_MASTER_DMA_BASEADDR, &amp;amp;userConfig);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uint32_t srcClock_Hz;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;dspi_master_config_t masterConfig;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Master config */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;masterConfig.whichCtar = kDSPI_Ctar0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;masterConfig.ctarConfig.baudRate = TRANSFER_BAUDRATE;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;masterConfig.ctarConfig.bitsPerFrame = 8;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;masterConfig.ctarConfig.cpol = kDSPI_ClockPolarityActiveHigh;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;masterConfig.ctarConfig.cpha = kDSPI_ClockPhaseFirstEdge;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;masterConfig.ctarConfig.direction = kDSPI_MsbFirst;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;masterConfig.ctarConfig.pcsToSckDelayInNanoSec = 1000000000U / TRANSFER_BAUDRATE;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;masterConfig.ctarConfig.lastSckToPcsDelayInNanoSec = 1000000000U / TRANSFER_BAUDRATE;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;masterConfig.ctarConfig.betweenTransferDelayInNanoSec = 1000000000U / TRANSFER_BAUDRATE;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;masterConfig.whichPcs = EXAMPLE_DSPI_MASTER_PCS_FOR_INIT;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;masterConfig.pcsActiveHighOrLow = kDSPI_PcsActiveLow;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;masterConfig.enableContinuousSCK = false;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;masterConfig.enableRxFifoOverWrite = false;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;masterConfig.enableModifiedTimingFormat = false;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;masterConfig.samplePoint = kDSPI_SckToSin0Clock;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;srcClock_Hz = DSPI_MASTER_CLK_FREQ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;DSPI_MasterInit(EXAMPLE_DSPI_MASTER_BASEADDR, &amp;amp;masterConfig, srcClock_Hz);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* Set up dspi master */&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;memset(&amp;amp;(dspiEdmaMasterRxRegToRxDataHandle), 0, sizeof(dspiEdmaMasterRxRegToRxDataHandle));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#if (!(defined(FSL_FEATURE_DSPI_HAS_GASKET) &amp;amp;&amp;amp; FSL_FEATURE_DSPI_HAS_GASKET))&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;memset(&amp;amp;(dspiEdmaMasterTxDataToIntermediaryHandle), 0, sizeof(dspiEdmaMasterTxDataToIntermediaryHandle));&lt;BR /&gt;#endif&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;memset(&amp;amp;(dspiEdmaMasterIntermediaryToTxRegHandle), 0, sizeof(dspiEdmaMasterIntermediaryToTxRegHandle));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;EDMA_CreateHandle(&amp;amp;(dspiEdmaMasterRxRegToRxDataHandle), EXAMPLE_DSPI_MASTER_DMA_BASEADDR, masterRxChannel);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#if (!(defined(FSL_FEATURE_DSPI_HAS_GASKET) &amp;amp;&amp;amp; FSL_FEATURE_DSPI_HAS_GASKET))&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;EDMA_CreateHandle(&amp;amp;(dspiEdmaMasterTxDataToIntermediaryHandle), EXAMPLE_DSPI_MASTER_DMA_BASEADDR,&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;masterIntermediaryChannel);&lt;BR /&gt;#endif&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;EDMA_CreateHandle(&amp;amp;(dspiEdmaMasterIntermediaryToTxRegHandle), EXAMPLE_DSPI_MASTER_DMA_BASEADDR, masterTxChannel);&lt;BR /&gt;#if (defined(FSL_FEATURE_DSPI_HAS_GASKET) &amp;amp;&amp;amp; FSL_FEATURE_DSPI_HAS_GASKET)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;DSPI_MasterTransferCreateHandleEDMA(EXAMPLE_DSPI_MASTER_BASEADDR, &amp;amp;g_dspi_edma_m_handle, DSPI_MasterUserCallback,&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;NULL, &amp;amp;dspiEdmaMasterRxRegToRxDataHandle, NULL,&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;amp;dspiEdmaMasterIntermediaryToTxRegHandle);&lt;BR /&gt;#else&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;DSPI_MasterTransferCreateHandleEDMA(EXAMPLE_DSPI_MASTER_BASEADDR, &amp;amp;g_dspi_edma_m_handle, DSPI_MasterUserCallback,&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;NULL, &amp;amp;dspiEdmaMasterRxRegToRxDataHandle,&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;amp;dspiEdmaMasterTxDataToIntermediaryHandle,&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;amp;dspiEdmaMasterIntermediaryToTxRegHandle);&lt;BR /&gt;#endif&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;return masterConfig;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/*********************************************************************************************************************/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ANY QUICK HELP ON THIS WOULD BE HIGHLY APPRECIATED.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;&lt;P&gt;Ravitej&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;(E-Mail: &lt;/SPAN&gt;&lt;A class="jive-link-email-small" href="mailto:ravitej.tanneru@redpinesignals.com"&gt;ravitej.tanneru@redpinesignals.com&lt;/A&gt;&lt;SPAN&gt;)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 02 Nov 2018 10:24:51 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/FRDM-K28F-SPI/m-p/797247#M48480</guid>
      <dc:creator>ravitej_tanneru</dc:creator>
      <dc:date>2018-11-02T10:24:51Z</dc:date>
    </item>
    <item>
      <title>Re: FRDM-K28F SPI</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/FRDM-K28F-SPI/m-p/797248#M48481</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Ravitej,&lt;/P&gt;&lt;P&gt;1. What does SPI I/O mean? In a SPI block, if DMA is enabled, all data must transfer by DMA. It can't only transfer part of them.&lt;BR /&gt;2. In K28 datasheet table 49, it says that the max frequency of operation is 30M. So I thinks it's better to obey the rules.&lt;BR /&gt;3. No. Please look at datasheet page 65. When DSPI is configured with continuous CS and SCK, there is a constraint that SPI clock should not be greater than 1/6 of bus clock. So, 150/6=25M.&lt;BR /&gt;4. I think it's hard to speed up any more.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Jing&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 06 Nov 2018 07:45:06 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/FRDM-K28F-SPI/m-p/797248#M48481</guid>
      <dc:creator>jingpan</dc:creator>
      <dc:date>2018-11-06T07:45:06Z</dc:date>
    </item>
    <item>
      <title>Re: FRDM-K28F SPI</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/FRDM-K28F-SPI/m-p/797249#M48482</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Jing,&lt;/P&gt;&lt;P&gt;Thanks for your response.&lt;/P&gt;&lt;P&gt;Could you please help in clarifying folllowing,&lt;/P&gt;&lt;P&gt;1. SPI I/O means SPI without DMA. We want to use SPI with DMA and without DMA simultaneously. I understood that, once DMA is configured to send/receive some data, the complete transaction is done by DMA. What we would like to check is, if we can 1 packet using DMA and the 2nd packet without DMA?&lt;/P&gt;&lt;P&gt;2. Ok agreed. Thanks.&lt;/P&gt;&lt;P&gt;3. Ok agreed. Thanks.&lt;/P&gt;&lt;P&gt;4. Our application needs to have good throughput numbers. So would need inputs on tuning DMA parameters, if possible.&lt;/P&gt;&lt;P&gt;Like, if we can configure DMA beat size or major/minor loop count etc to make it more efficient.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;&lt;P&gt;Ravitej&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 08 Nov 2018 16:48:04 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/FRDM-K28F-SPI/m-p/797249#M48482</guid>
      <dc:creator>ravitej_tanneru</dc:creator>
      <dc:date>2018-11-08T16:48:04Z</dc:date>
    </item>
    <item>
      <title>Re: FRDM-K28F SPI</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/FRDM-K28F-SPI/m-p/797250#M48483</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Ravitej,&lt;/P&gt;&lt;P&gt;If you want to use SPI with DMA and without DMA simultaneously, you have to turn on and turn off DMA by software.&lt;/P&gt;&lt;P&gt;I think DMA always has higher priority to occupy system bus. The configuration has little influence to transfer speed. And after all, the speed of DMA controller is far&amp;nbsp;more fast than SPI serial port.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Jing&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 09 Nov 2018 02:15:37 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/FRDM-K28F-SPI/m-p/797250#M48483</guid>
      <dc:creator>jingpan</dc:creator>
      <dc:date>2018-11-09T02:15:37Z</dc:date>
    </item>
    <item>
      <title>Re: FRDM-K28F SPI</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/FRDM-K28F-SPI/m-p/797251#M48484</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I'm using the K22F, but I think the SPI module is the same.&amp;nbsp; I use a mix of polled and DMA access.&amp;nbsp; I'm not using the SDK code, though - I was on Processor Expert before, but I've rewritten everything myself now.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'm not sure about the current version, but previous SDK versions have had pretty heavy SPI drivers that imposed a lot of latency for small transfers.&amp;nbsp; I'm usually interfacing with SPI flash memory, and there's a lot of polling for completion and setting of write enable flags that requires some back-and-forth that can really slow down transactions.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;For that stuff, I've got some very minimalist blocking functions for SPI access.&amp;nbsp; When a FreeRTOS task needs to read or write a block of data, it uses the DMA block read or write functions (after setting up the transaction in polled mode) so that other tasks can keep running while it waits.&amp;nbsp; I have one place where read/write access is needed in a critical section, and since there's no benefit to using DMA when you're just sitting and waiting anyway, it has a more complicated polling read/write that switches to 16-bit transfers to eliminate a wasted bit between words, so it gains a few percent in transfer speed over an 8-bit DMA transfer.&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="Screenshot 2017-10-22 12.39.33.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/77654i02A66B50D773FFCB/image-size/large?v=v2&amp;amp;px=999" role="button" title="Screenshot 2017-10-22 12.39.33.png" alt="Screenshot 2017-10-22 12.39.33.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This is an old capture showing what I've been able to attain.&amp;nbsp; The big gap at +5 us is the switch between byte-at-a-time access and the 16-bit polled block transfer.&amp;nbsp; Note that there's still a 1-bit dead time between words, and I haven't found a way to get rid of that.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Scott&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 22 Nov 2018 18:59:17 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/FRDM-K28F-SPI/m-p/797251#M48484</guid>
      <dc:creator>scottm</dc:creator>
      <dc:date>2018-11-22T18:59:17Z</dc:date>
    </item>
  </channel>
</rss>

