<?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 SPI function for K66F in Kinetis Microcontrollers</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-function-for-K66F/m-p/727887#M44501</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi everybody,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am planning to establish a wireless connection between 2 K66F boards using nrf24L01+ modules. Therefore I plan on using the nrf24l01 library. It is a generic code except for the SPI and delay functions.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The SPI function is supposed to take the argument unsigned char byte and sent it through the SPI port to the 24L01. Then, it should wait until the 24L01 has returned its response over SPI. This received byte should be the return value of the function.&lt;/P&gt;&lt;P&gt;You find this kind of SPI function and the corresponding libraries for AVR-chips and other microcontrollers.&lt;/P&gt;&lt;P&gt;So I was wondering if anybody has already written a similar SPI function for the K66F (or one that is usable with my board) and would be willing to share it with me.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks in advance and best regards,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Constantin&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 22 Mar 2018 15:22:04 GMT</pubDate>
    <dc:creator>constantineulen</dc:creator>
    <dc:date>2018-03-22T15:22:04Z</dc:date>
    <item>
      <title>SPI function for K66F</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-function-for-K66F/m-p/727887#M44501</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi everybody,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am planning to establish a wireless connection between 2 K66F boards using nrf24L01+ modules. Therefore I plan on using the nrf24l01 library. It is a generic code except for the SPI and delay functions.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The SPI function is supposed to take the argument unsigned char byte and sent it through the SPI port to the 24L01. Then, it should wait until the 24L01 has returned its response over SPI. This received byte should be the return value of the function.&lt;/P&gt;&lt;P&gt;You find this kind of SPI function and the corresponding libraries for AVR-chips and other microcontrollers.&lt;/P&gt;&lt;P&gt;So I was wondering if anybody has already written a similar SPI function for the K66F (or one that is usable with my board) and would be willing to share it with me.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks in advance and best regards,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Constantin&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 22 Mar 2018 15:22:04 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-function-for-K66F/m-p/727887#M44501</guid>
      <dc:creator>constantineulen</dc:creator>
      <dc:date>2018-03-22T15:22:04Z</dc:date>
    </item>
    <item>
      <title>Re: SPI function for K66F</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-function-for-K66F/m-p/727888#M44502</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;HI Customer,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; About the K66F SPI code for 24L01, we still don't have the direct code for your reference.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; But don't worry, official have the K66 SPI driver, actually, if you have the other MCU code for 24L01 application, you totally can port the other MCU's 24L01 code to the K66 platform, with the official K66 SPI driver.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; K66 SPI driver can be found in the SDK, you can download it from this link:&lt;/P&gt;&lt;P&gt;&lt;A class="link-titled" href="https://mcuxpresso.nxp.com/en/welcome" title="https://mcuxpresso.nxp.com/en/welcome"&gt;Welcome | MCUXpresso SDK Builder&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;Choose the chip as K66, then generate the code and download it. Find the SPI project, then import your for 24L01 code.&lt;/P&gt;&lt;P&gt;&amp;nbsp; When you meet the detail problem with 24L01 and K66 SPI, please kindly let me know!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Have a great day,&lt;BR /&gt;Kerry&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;-----------------------------------------------------------------------------------------------------------------------&lt;BR /&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 23 Mar 2018 07:30:13 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-function-for-K66F/m-p/727888#M44502</guid>
      <dc:creator>kerryzhou</dc:creator>
      <dc:date>2018-03-23T07:30:13Z</dc:date>
    </item>
    <item>
      <title>Re: SPI function for K66F</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-function-for-K66F/m-p/727889#M44503</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Kerry,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you for your fast response! I have already downloaded the SDK Builder for my board and the corresponding drivers. Nevertheless I don't find any function which would fulfill the criteria I am looking for (neither in the fsl_dspi-files nor in fsl_dspi_cmsis). How should I port the 24L01 code to the K66F platform since the generic 24L01 code depends on this one function (which I don't find in the driver codes)? Is the only possibility to write the code myself (which I am not sure to be capable of) ?&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best,&lt;/P&gt;&lt;P&gt;Constantin&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 23 Mar 2018 13:11:52 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-function-for-K66F/m-p/727889#M44503</guid>
      <dc:creator>constantineulen</dc:creator>
      <dc:date>2018-03-23T13:11:52Z</dc:date>
    </item>
    <item>
      <title>Re: SPI function for K66F</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-function-for-K66F/m-p/727890#M44504</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;The SDKs are confusing for the simple reason that they are generic and try to be as complete as possible, e.g. from looking at it, it also contains routines for SPI slave modes, which you have no use for in your application. A good example of "generic-ism" is the function "DSPI_MasterSetDelayScaler". While it's intention is good, you can write what you need by a single line of code, because you are targetting a specific SPI device.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;And with some help, I'm sure you'll be able to do it from scratch. In that way you understand each line of the code and can maintain it if something goes wrong, or you need to expand it with further SPI devices. :smileyhappy:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Have you already setup the port configuration of the K66 to SPI for the specific pins you need (CSN, SCK, MOSI, MISO)?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The data sheet of the device is presumably this one: &lt;A class="link-titled" href="https://www.sparkfun.com/datasheets/Components/nRF24L01_prelim_prod_spec_1_2.pdf" title="https://www.sparkfun.com/datasheets/Components/nRF24L01_prelim_prod_spec_1_2.pdf"&gt;&lt;/A&gt;&lt;A href="https://www.sparkfun.com/datasheets/Components/nRF24L01_prelim_prod_spec_1_2.pdf" target="test_blank"&gt;https://www.sparkfun.com/datasheets/Components/nRF24L01_prelim_prod_spec_1_2.pdf&lt;/A&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 23 Mar 2018 18:09:49 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-function-for-K66F/m-p/727890#M44504</guid>
      <dc:creator>troelsoesteraa</dc:creator>
      <dc:date>2018-03-23T18:09:49Z</dc:date>
    </item>
    <item>
      <title>Re: SPI function for K66F</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-function-for-K66F/m-p/727891#M44505</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Constantin&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The uTasker project supports nRF24L01P on the FRDM-K66F. You can get the setup for the open source version at the links below.&lt;BR /&gt;In fact the only difference to the FRDM-K64F board (in case you have a reference for that) is that the Tx enable signal is connected on PTB20 rather than PTC12 - the SPI interface is identical and thus needs no modification.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;As reference the complete configuration for FRDMK64F and FRDM-K66F is shown here:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE class="language-c line-numbers"&gt;&lt;CODE&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="property macro token"&gt;#define nRF24L01P_SLAVE()&amp;nbsp;&amp;nbsp;&amp;nbsp; (_READ_PORT_MASK(B, PORTB_BIT19))&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class="comment token"&gt;// K64 J1-3/K66 J2-4 held to ground selects slave mode&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="property macro token"&gt;#define nRF24L01P_CS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTD_BIT4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;/SPAN&gt;&lt;SPAN class="comment token"&gt;// SPI chip select (active low)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="property macro token"&gt;#define nRF24L01P_DOUT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTD_BIT6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;/SPAN&gt;&lt;SPAN class="comment token"&gt;// SPI data to the nRF24L01+&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="property macro token"&gt;#define nRF24L01P_SCLK&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTD_BIT5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;/SPAN&gt;&lt;SPAN class="comment token"&gt;// SPI clock to the nRF24L01+&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="property macro token"&gt;#define nRF24L01P_DIN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTD_BIT7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;/SPAN&gt;&lt;SPAN class="comment token"&gt;// SPI data from the nRF24L01+&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="property macro token"&gt;#define nRF24L01P_IRQ&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTC_BIT18&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;/SPAN&gt;&lt;SPAN class="comment token"&gt;// maskable interrupt pin from the nRF24L01+, active low&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="property macro token"&gt;#define nRF24L01P_IRQ_PORT&amp;nbsp;&amp;nbsp; PORTC&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="property macro token"&gt;#define nRF24L01P_IRQ_PRIORITY PRIORITY_PORT_C_INT&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="property macro token"&gt;#if defined FRDM_K66F&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="property macro token"&gt;#define nRF24L01P_TX_ENABLE&amp;nbsp; PORTB_BIT20&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;/SPAN&gt;&lt;SPAN class="comment token"&gt;// chip enable activates rx or tx mode&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="property macro token"&gt;#define CONFIGURE_INTERFACE_nRF24L01() _CONFIG_PORT_INPUT_FAST_HIGH(B, (PORTB_BIT19), PORT_PS_UP_ENABLE); \
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _CONFIG_DRIVE_PORT_OUTPUT_VALUE_FAST_HIGH(B, nRF24L01P_TX_ENABLE, 0, (PORT_SRE_SLOW | PORT_DSE_LOW));\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _CONFIG_PERIPHERAL(D, 4, (PD_4_SPI1_PCS0 | PORT_DSE_HIGH | PORT_PS_UP_ENABLE | PORT_SRE_FAST));\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _CONFIG_PERIPHERAL(D, 6, (PD_6_SPI1_SOUT | PORT_DSE_HIGH | PORT_PS_UP_ENABLE | PORT_SRE_FAST));\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _CONFIG_PERIPHERAL(D, 7, (PD_7_SPI1_SIN | PORT_PS_UP_ENABLE));\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _CONFIG_PERIPHERAL(D, 5, (PD_5_SPI1_SCK&amp;nbsp; | PORT_DSE_HIGH | PORT_PS_UP_ENABLE | PORT_SRE_FAST))&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="property macro token"&gt;#else&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="property macro token"&gt;#define nRF24L01P_TX_ENABLE&amp;nbsp; PORTC_BIT12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;/SPAN&gt;&lt;SPAN class="comment token"&gt;// chip enable activates rx or tx mode&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="property macro token"&gt;#define CONFIGURE_INTERFACE_nRF24L01() _CONFIG_PORT_INPUT_FAST_HIGH(B, (PORTB_BIT19), PORT_PS_UP_ENABLE); \
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _CONFIG_DRIVE_PORT_OUTPUT_VALUE_FAST_LOW(C, nRF24L01P_TX_ENABLE, 0, (PORT_SRE_SLOW | PORT_DSE_LOW));\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _CONFIG_PERIPHERAL(D, 4, (PD_4_SPI1_PCS0 | PORT_DSE_HIGH | PORT_PS_UP_ENABLE | PORT_SRE_FAST));\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _CONFIG_PERIPHERAL(D, 6, (PD_6_SPI1_SOUT | PORT_DSE_HIGH | PORT_PS_UP_ENABLE | PORT_SRE_FAST));\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _CONFIG_PERIPHERAL(D, 7, (PD_7_SPI1_SIN | PORT_PS_UP_ENABLE));\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _CONFIG_PERIPHERAL(D, 5, (PD_5_SPI1_SCK&amp;nbsp; | PORT_DSE_HIGH | PORT_PS_UP_ENABLE | PORT_SRE_FAST))&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="property macro token"&gt;#endif&lt;/SPAN&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="property macro token"&gt;#define CONFIGURE_nRF24L01_SPI_MODE() POWER_UP_ATOMIC(6, SPI1); \
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPI1_MCR = (SPI_MCR_MSTR | SPI_MCR_DCONF_SPI | SPI_MCR_CLR_RXF | SPI_MCR_CLR_TXF | SPI_MCR_PCSIS_CS0 | SPI_MCR_PCSIS_CS1 | SPI_MCR_PCSIS_CS2 | SPI_MCR_PCSIS_CS3 | SPI_MCR_PCSIS_CS4 | SPI_MCR_PCSIS_CS5);\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPI1_CTAR0 = (SPI_CTAR_ASC_10 | SPI_CTAR_PBR_3 | SPI_CTAR_DBR | SPI_CTAR_FMSZ_8 | SPI_CTAR_PDT_7 | &lt;/SPAN&gt;&lt;SPAN class="comment token"&gt;/*SPI_CTAR_BR_4*/&lt;/SPAN&gt;SPI_CTAR_BR_2048 &lt;SPAN class="comment token"&gt;/*| SPI_CTAR_CPHA | SPI_CTAR_CPOL*/&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;// for 120MHz system, 10MHz speed&lt;/SPAN&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="property macro token"&gt;#define FLUSH_nRF24L01_SPI_FIFO_AND_FLAGS()&amp;nbsp; SPI1_MCR |= SPI_MCR_CLR_RXF; SPI1_SR = (SPI_SR_EOQF | SPI_SR_TFUF | SPI_SR_TFFF | SPI_SR_RFOF | SPI_SR_RFDF)&lt;/SPAN&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="property macro token"&gt;#define WRITE_nRF24L01_SPI(byte)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPI1_PUSHR = (byte | SPI_PUSHR_CONT | SPI_PUSHR_PCS0 | SPI_PUSHR_CTAS_CTAR0) &lt;/SPAN&gt;&lt;SPAN class="comment token"&gt;// write a single byte to the output FIFO - assert CS line&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="property macro token"&gt;#define WRITE_nRF24L01_SPI_LAST(byte)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPI1_PUSHR = (byte | SPI_PUSHR_EOQ&amp;nbsp; | SPI_PUSHR_PCS0 | SPI_PUSHR_CTAS_CTAR0) &lt;/SPAN&gt;&lt;SPAN class="comment token"&gt;// write final byte to output FIFO - this will negate the CS line when complete&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="property macro token"&gt;#define READ_nRF24L01_SPI_FLASH_DATA()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (unsigned char)SPI1_POPR&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="property macro token"&gt;#define WAIT_nRF24L01_SPI_RECEPTION_END()&amp;nbsp;&amp;nbsp; while ((SPI1_SR &amp;amp; SPI_SR_RFDF) == 0) {}&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="property macro token"&gt;#define CLEAR_nRF24L01_SPI_RECEPTION_FLAG() SPI1_SR |= SPI_SR_RFDF&lt;/SPAN&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="property macro token"&gt;#define SPI_FIFO_DEPTH_1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;/SPAN&gt;&lt;SPAN class="comment token"&gt;// K64/K66 SPI 1 has a FIFO depth of just 1 in SPI1 and SPI 2&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="property macro token"&gt;#if defined FRDM_K66F&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="property macro token"&gt;#define DISABLE_RX_TX()&amp;nbsp; _CLEARBITS(B, nRF24L01P_TX_ENABLE); fnRemoteSimulationInterface(REMOTE_RF_INTERFACE, REMOTE_RF_DISABLE_RX_TX, 0, 0, 0)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="property macro token"&gt;#define ENABLE_RX_TX()&amp;nbsp;&amp;nbsp; _SETBITS(B, nRF24L01P_TX_ENABLE);&amp;nbsp;&amp;nbsp; fnRemoteSimulationInterface(REMOTE_RF_INTERFACE, REMOTE_RF_ENABLE_RX_TX,&amp;nbsp; 0, 0, 0)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="property macro token"&gt;#else&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="property macro token"&gt;#define DISABLE_RX_TX()&amp;nbsp; _CLEARBITS(C, nRF24L01P_TX_ENABLE); fnRemoteSimulationInterface(REMOTE_RF_INTERFACE, REMOTE_RF_DISABLE_RX_TX, 0, 0, 0)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="property macro token"&gt;#define ENABLE_RX_TX()&amp;nbsp;&amp;nbsp; _SETBITS(C, nRF24L01P_TX_ENABLE);&amp;nbsp;&amp;nbsp; fnRemoteSimulationInterface(REMOTE_RF_INTERFACE, REMOTE_RF_ENABLE_RX_TX,&amp;nbsp; 0, 0, 0)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="property macro token"&gt;#endif‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍&lt;/SPAN&gt;&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;BR /&gt;Regards&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mark&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;SPAN&gt;Kinetis: &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fwww.utasker.com%2Fkinetis.html" rel="nofollow noopener noreferrer" target="_blank"&gt;http://www.utasker.com/kinetis.html&lt;/A&gt;&lt;BR /&gt;Kinetis K66:&lt;BR /&gt;&lt;SPAN&gt;- &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fwww.utasker.com%2Fkinetis%2FTWR-K65F180M.html" rel="nofollow noopener noreferrer" target="_blank"&gt;http://www.utasker.com/kinetis/TWR-K65F180M.html&lt;/A&gt;&lt;BR /&gt;&lt;SPAN&gt;- &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fwww.utasker.com%2Fkinetis%2FFRDM-K66F.html" rel="nofollow noopener noreferrer" target="_blank"&gt;http://www.utasker.com/kinetis/FRDM-K66F.html&lt;/A&gt;&lt;BR /&gt;&lt;SPAN&gt;- &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fwww.utasker.com%2Fkinetis%2FTEENSY_3.6.html" rel="nofollow noopener noreferrer" target="_blank"&gt;http://www.utasker.com/kinetis/TEENSY_3.6.html&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Free Open Source solution: &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=https%3A%2F%2Fgithub.com%2FuTasker%2FuTasker-Kinetis" rel="nofollow noopener noreferrer" target="_blank"&gt;https://github.com/uTasker/uTasker-Kinetis&lt;/A&gt;&lt;BR /&gt;&lt;SPAN&gt;Working project in 15 minutes video: &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=https%3A%2F%2Fyoutu.be%2FK8ScSgpgQ6M" rel="nofollow noopener noreferrer" target="_blank"&gt;https://youtu.be/K8ScSgpgQ6M&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;For better, faster, cheaper product developments consider the uTasker developer's version, professional Kinetis support, one-on-one training and complete fast-track project solutions to set you apart from the herd : &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fwww.utasker.com%2Fsupport.html" rel="nofollow noopener noreferrer" target="_blank"&gt;http://www.utasker.com/support.html&lt;/A&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 24 Mar 2018 00:34:10 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-function-for-K66F/m-p/727891#M44505</guid>
      <dc:creator>mjbcswitzerland</dc:creator>
      <dc:date>2018-03-24T00:34:10Z</dc:date>
    </item>
    <item>
      <title>Re: SPI function for K66F</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-function-for-K66F/m-p/727892#M44506</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Mark,&lt;/P&gt;&lt;P&gt;thank you for your answer ! I am working on this project with another person who is going to implement the code for the receiver on another board. Therefore we both want to use the same libraries with the same commands (see attached). So I don't think I can use uTasker.&lt;/P&gt;&lt;P&gt;Thanks anyway !&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 26 Mar 2018 08:31:11 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-function-for-K66F/m-p/727892#M44506</guid>
      <dc:creator>constantineulen</dc:creator>
      <dc:date>2018-03-26T08:31:11Z</dc:date>
    </item>
    <item>
      <title>Re: SPI function for K66F</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-function-for-K66F/m-p/727893#M44507</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;Thank you so much for your help!&amp;nbsp;&lt;/P&gt;&lt;P&gt;First of all I will be using the attached libraries for nrf24L01P.&amp;nbsp;&lt;/P&gt;&lt;P&gt;I did setup the port configuration for CE, CSN and IRQ:&amp;nbsp;&lt;/P&gt;&lt;P style="color: #008400; background-color: #ffffff; font-size: 11px;"&gt;//defines for uC pins CE pin is connected to&lt;/P&gt;&lt;P style="color: #008400; background-color: #ffffff; font-size: 11px;"&gt;//This is used so that the routines can send TX payload data and&amp;nbsp;&lt;/P&gt;&lt;P style="color: #008400; background-color: #ffffff; font-size: 11px;"&gt;//&lt;SPAN class=""&gt; &lt;/SPAN&gt;properly initialize the nrf24l01 in TX and RX states.&lt;/P&gt;&lt;P style="color: #008400; background-color: #ffffff; font-size: 11px;"&gt;//Change these definitions (and then recompile) to suit your particular application.&lt;/P&gt;&lt;P style="color: #78492a; background-color: #ffffff; font-size: 11px;"&gt;#define nrf24l01_CE_IOREGISTER&lt;SPAN class=""&gt; &lt;/SPAN&gt;PORTB&lt;/P&gt;&lt;P style="color: #78492a; background-color: #ffffff; font-size: 11px;"&gt;#define nrf24l01_CE_PINMASK&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN style="color: #272ad8;"&gt;0x14&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="background-color: #ffffff; font-size: 12px;"&gt;&lt;/P&gt;&lt;P style="color: #008400; background-color: #ffffff; font-size: 11px;"&gt;//defines for uC pins CSN pin is connected to&lt;/P&gt;&lt;P style="color: #008400; background-color: #ffffff; font-size: 11px;"&gt;//This is used so that the routines can send properly operate the SPI interface&lt;/P&gt;&lt;P style="color: #008400; background-color: #ffffff; font-size: 11px;"&gt;// on the nrf24l01.&lt;/P&gt;&lt;P style="color: #008400; background-color: #ffffff; font-size: 11px;"&gt;//Change these definitions (and then recompile) to suit your particular application.&lt;/P&gt;&lt;P style="color: #78492a; background-color: #ffffff; font-size: 11px;"&gt;#define nrf24l01_CSN_IOREGISTER&lt;SPAN class=""&gt; &lt;/SPAN&gt;PORTD&lt;/P&gt;&lt;P style="color: #78492a; background-color: #ffffff; font-size: 11px;"&gt;#define nrf24l01_CSN_PINMASK&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN style="color: #272ad8;"&gt;0x04&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="background-color: #ffffff; font-size: 12px;"&gt;&lt;/P&gt;&lt;P style="color: #008400; background-color: #ffffff; font-size: 11px;"&gt;//defines for uC pins IRQ pin is connected to&lt;/P&gt;&lt;P style="color: #008400; background-color: #ffffff; font-size: 11px;"&gt;//This is used so that the routines can poll for IRQ or create an ISR.&lt;/P&gt;&lt;P style="color: #008400; background-color: #ffffff; font-size: 11px;"&gt;//Change these definitions (and then recompile) to suit your particular application.&lt;/P&gt;&lt;P style="color: #78492a; background-color: #ffffff; font-size: 11px;"&gt;#define nrf24l01_IRQ_IOREGISTER&lt;SPAN class=""&gt; &lt;/SPAN&gt;PORTC&lt;/P&gt;&lt;P style="color: #78492a; background-color: #ffffff; font-size: 11px;"&gt;#define nrf24l01_IRQ_PINMASK&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN style="color: #272ad8;"&gt;0x12&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I guess I will setup the configuration for&lt;SPAN&gt;&amp;nbsp;MISO, MOSI and SCK in the SPI file.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;The part&amp;nbsp;of&amp;nbsp;&lt;/SPAN&gt;the file nrf24l01.h I am concerned about right now is the following:&lt;/P&gt;&lt;P style="color: #008400; background-color: #ffffff; font-size: 11px;"&gt;/////////////////////////////////////////////////////////////////////////////////&lt;/P&gt;&lt;P style="color: #008400; background-color: #ffffff; font-size: 11px;"&gt;// SPI function requirements&lt;/P&gt;&lt;P style="color: #008400; background-color: #ffffff; font-size: 11px;"&gt;//&lt;/P&gt;&lt;P style="color: #008400; background-color: #ffffff; font-size: 11px;"&gt;// The user must define a function to send one byte of data and also return the&lt;/P&gt;&lt;P style="color: #008400; background-color: #ffffff; font-size: 11px;"&gt;// &amp;nbsp; resulting byte of data data through the SPI port. The function used here&amp;nbsp;&lt;/P&gt;&lt;P style="color: #008400; background-color: #ffffff; font-size: 11px;"&gt;// &amp;nbsp; has the function prototype&lt;/P&gt;&lt;P style="color: #008400; background-color: #ffffff; font-size: 11px;"&gt;//&lt;/P&gt;&lt;P style="color: #008400; background-color: #ffffff; font-size: 11px;"&gt;//&lt;SPAN class=""&gt; &lt;/SPAN&gt;&amp;nbsp; &amp;nbsp; unsigned char spi_send_read_byte(unsigned char byte);&lt;/P&gt;&lt;P style="color: #008400; background-color: #ffffff; font-size: 11px;"&gt;//&lt;/P&gt;&lt;P style="color: #008400; background-color: #ffffff; font-size: 11px;"&gt;// This function should take the argument unsigned char byte and send it through&lt;/P&gt;&lt;P style="color: #008400; background-color: #ffffff; font-size: 11px;"&gt;// &amp;nbsp; the SPI port to the 24L01.&amp;nbsp; Then, it should wait until the 24L01 has returned&lt;/P&gt;&lt;P style="color: #008400; background-color: #ffffff; font-size: 11px;"&gt;// &amp;nbsp; its response over SPI.&amp;nbsp; This received byte should be the return value of the&lt;/P&gt;&lt;P style="color: #008400; background-color: #ffffff; font-size: 11px;"&gt;// &amp;nbsp; function.&lt;/P&gt;&lt;P style="color: #008400; background-color: #ffffff; font-size: 11px;"&gt;//&lt;/P&gt;&lt;P style="color: #008400; background-color: #ffffff; font-size: 11px;"&gt;// You should also change the include file name below to whatever the name of your&amp;nbsp;&lt;/P&gt;&lt;P style="color: #008400; background-color: #ffffff; font-size: 11px;"&gt;// &amp;nbsp; SPI include file is.&lt;/P&gt;&lt;P style="color: #008400; background-color: #ffffff; font-size: 11px;"&gt;//////////////////////////////////////////////////////////////////////////////////&lt;/P&gt;&lt;P style="color: #008400; background-color: #ffffff; font-size: 11px;"&gt;//#include "spi1.h"&lt;/P&gt;&lt;P style="color: #78492a; background-color: #ffffff; font-size: 11px;"&gt;#define spi_send_read_byte(byte)&lt;SPAN class=""&gt; &lt;/SPAN&gt;spi1_send_read_byte(byte)&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;So you would suggest to create a new SPI library and not change some code in the&amp;nbsp;SDK-file and use it instead ?&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Thanks again!&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 26 Mar 2018 08:42:55 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-function-for-K66F/m-p/727893#M44507</guid>
      <dc:creator>constantineulen</dc:creator>
      <dc:date>2018-03-26T08:42:55Z</dc:date>
    </item>
    <item>
      <title>Re: SPI function for K66F</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-function-for-K66F/m-p/727894#M44508</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Constantin&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Attached is the nRF24201.c file from the uTasker project which does the same as the code in your file. &lt;EM&gt;It supports both transmitter and receiver modes&lt;/EM&gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If you need a quick working solution with nRF2401, including USB, Ethernet, SD card etc. you can just download the open source project and immediately build the complete operation.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If you don't have any urgency and only need the nRF2401 without any requirements for using the other features of the K66 you can also analyse the functions and the headers in order to work out how to interface to the HW in your original library code too; &lt;EM&gt;essentially is is a case of inserting the HW operations shown in the header into the interface routines that are empty in your library&lt;/EM&gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mark&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 26 Mar 2018 12:14:56 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-function-for-K66F/m-p/727894#M44508</guid>
      <dc:creator>mjbcswitzerland</dc:creator>
      <dc:date>2018-03-26T12:14:56Z</dc:date>
    </item>
    <item>
      <title>Re: SPI function for K66F</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-function-for-K66F/m-p/727895#M44509</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;As you will likely need to discard most of the SDK file lines, i'd start over.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Not sure completely what K66 part you're using or what compiler, but I'm assuming&amp;nbsp;&lt;A data-dtmname="MK66FN2M0VLQ18" href="https://www.nxp.com/search?client=nxp_search_all_results&amp;amp;site=nxp_en&amp;amp;proxystylesheet=nxp_search_style_fe&amp;amp;sort=date%3AD%3AL%3Ad1&amp;amp;oe=UTF-8&amp;amp;ie=UTF-8&amp;amp;ud=1&amp;amp;output=xml_no_dtd&amp;amp;exclude_apps=1&amp;amp;callback=ss_show&amp;amp;lang_cd=en&amp;amp;filter=0&amp;amp;getfields=*&amp;amp;baseUrl=%2F%2Fwww.nxp.com%2Fwebapp&amp;amp;SEARCH_OPERATOR=Contains&amp;amp;attempt=-1&amp;amp;rc=1&amp;amp;hl=en&amp;amp;dnavs=&amp;amp;q=%20MK66FN2M0VLQ18" rel="nofollow noopener noreferrer" target="_blank"&gt;MK66FN2M0VLQ18&lt;/A&gt;. I assume you include the "MK66F18.h" which is included in the SDK, accessing the different parts of the K66 becomes a lot easier.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So here goes. No matter which module you want to use, you should always enable the clock for it first. After we have done this, the different modules are configured. I did not try to compile this, as I'm out of office this week. I also only have experience with K2x, but the K66 should be similar in this regard. I am using Pin 1-4, e.g. PTE0-3 as they have SPI functionality. I also assume the bus clock (SPI module clock) is 60 MHz.&lt;/P&gt;&lt;PRE&gt;void PORT_init(void)
{
&amp;nbsp;&amp;nbsp; SIM-&amp;gt;SIM_SCG5 |= SIM_SCGC5_PORTE_MASK;
&amp;nbsp;&amp;nbsp; PORTE-&amp;gt;PCR[0] = PORT_PCR_MUX(2); // SPI1_PCS1 - CSN
&amp;nbsp;&amp;nbsp;&amp;nbsp;PORTE-&amp;gt;PCR[1] = PORT_PCR_MUX(2); // SPI1_SOUT - MOSI&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;PORTE-&amp;gt;PCR[2] = PORT_PCR_MUX(2); // SPI1_SCK - SCK
&amp;nbsp;&amp;nbsp;&amp;nbsp;PORTE-&amp;gt;PCR[3] = PORT_PCR_MUX(2); // SPI1_SIN - MISO

&amp;nbsp;&amp;nbsp;&amp;nbsp;return;
}

void SPI1_init(void)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;SIM-&amp;gt;SIM_SCG6 |= SIM_SCGC6_SPI1_MASK;
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;// Enable SPI1 module (MDIS is cleared), set halt mode.
&amp;nbsp;&amp;nbsp; SPI1-&amp;gt;MCR = SPI_MCR_HALT_MASK;
&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;// Set the K66 as master, and do not use any kind of FIFOs. For certain bits to be accepted, MDIS must have been cleared first, as we did above.
&amp;nbsp;&amp;nbsp; // Also set the inactive level of PCS0-1 as high. Remember to update the initialization if higher than PCS1 is to be used with high as inactive.
&amp;nbsp;&amp;nbsp; SPI1-&amp;gt;MCR |= SPI_MCR_MSTR_MASK | SPI_MCR_CLR_RXF_MASK | SPI_MCR_CLR_TXF_MASK | SPI_MCR_DIS_RXF_MASK | SPI_MCR_DIS_TXF_MASK | SPI_MCR_PCSIS(0x03);

&amp;nbsp;&amp;nbsp; /* Establish CTAR (Clock and Transfer Attribute Register) suitable for device.
&amp;nbsp;&amp;nbsp; The idea with this is that you can have more pre-configured CTARs, and when you read/write the specific SPI device, you just specify
&amp;nbsp;&amp;nbsp; which pre-configured CTAR you want to use for the transfer.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;nRF24L01 requirements:
&amp;nbsp;&amp;nbsp; SPI mode 3 -&amp;gt; CPOL=1, CPHA=1
&amp;nbsp;&amp;nbsp; SCK &amp;lt;= 8 MHz
&amp;nbsp;&amp;nbsp; CSC =&amp;gt; 2 ns, no compensation needed
&amp;nbsp;&amp;nbsp; ASC &amp;gt;= 2 ns, no compensation needed
&amp;nbsp;&amp;nbsp; 50 ns hold time between assertions
&amp;nbsp;&amp;nbsp; */&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;

&amp;nbsp;&amp;nbsp; // Thus CTAR0: CPOL=1, CPHA=1, PBR = 2, BR = 8 (3.75 MHz SCK), PDT = 1, DT = 4 (66.6 ns hold time between assertions)
&amp;nbsp;&amp;nbsp; // Just use 8 bit frame sizes, even though the nRF24L01 uses 24 frames. As long as we keep CSN low between multiple 8 bit accesses, there is no problem.
&amp;nbsp;&amp;nbsp; SPI1-&amp;gt;CTAR[0] = SPI_CTAR_FMSZ(0x07) | SPI_CTAR_PBR(0) | SPI_CTAR_BR(3) | SPI_CTAR_CPOL_MASK | SPI_CTAR_CPHA_MASK | SPI_CTAR_DT(1);

&amp;nbsp;&amp;nbsp; return;
}

// Now for the read/write routines. It is up for you to define the uData_tx array with the correct data.

void SPI1_read_write(uint8_t *uData_tx, uint8_t *uData_rx, uint8_t uBytes)
{
&amp;nbsp;&amp;nbsp; uint8_t i;
&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;// Clear previous completed transfer. If not doing so, SPI module remains in stopped state.
&amp;nbsp;&amp;nbsp; SPI1-&amp;gt;SR |= SPI_SR_EOQF_MASK;

&amp;nbsp;&amp;nbsp; for(i=0;i&amp;lt;uBytes;i++)
&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SPI1-&amp;gt;PUSHR = SPI_PUSHR_PCS(2) | SPI_PUSHR_CTAS(0) | uData_tx[i]; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(i==uBytes-1)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SPI1-&amp;gt;PUSHR |= SPI_PUSHR_EOQ_MASK;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SPI1-&amp;gt;PUSHR |= SPI_PUSHR_CONT_MASK;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&lt;PRE&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Transfer SPI frame
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPI1-&amp;gt;MCR &amp;amp;= ~SPI_MCR_HALT_MASK;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Wait for transfer completion
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(!(SPI1-&amp;gt;SR &amp;amp; SPI_SR_TCF_MASK));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Clear TCF
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPI1-&amp;gt;SR &amp;amp;= ~SPI_SR_TCF_MASK;&lt;/PRE&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Read MISO data for each 8 bit frame.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uData_rx[i] = SPI1-&amp;gt;POPR;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp;return;
}&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 26 Mar 2018 13:33:48 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-function-for-K66F/m-p/727895#M44509</guid>
      <dc:creator>troelsoesteraa</dc:creator>
      <dc:date>2018-03-26T13:33:48Z</dc:date>
    </item>
    <item>
      <title>Re: SPI function for K66F</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-function-for-K66F/m-p/727896#M44510</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 attached a binary file that can be loaded to the FRDM-K66F boards. &lt;EM&gt;Connect an nRF24201 module to each on the 8 pin RF/WIFI connector.&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;The board will be a primary device (master) unless there is a connection between GND and J2-4, therefore set one of the two boards to secondary (slave) mode.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The primary device will now send a test message (10 bytes of content 0,1,2,3,4,5,6,7,8,9) ever 5 seconds.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Connect the OpenSDA VCOM at 115'200 Baud for debug interface (or connect the K66's HS USB, which will also appear as a VCOM with the same debug interface) and the primary device does:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;nRF24L01P+ master&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;Eth0 link-up 100 full-duplex&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;Ping RF&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;----------------- sends a broadcast message&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;No ACK ;-(&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;----------------- it is normal that no ACK is received from a broadcast&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;Ping RF&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;----------------- sends a multicast message&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;No ACK ;-(&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;----------------- it is normal that no ACK is received from a multicast&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;Ping RF&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;----------------- sends a message addressed to the slave&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;DATA ACKED!!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;---------------- ACK is received&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;Rx data available - pipe 0 : 5&amp;nbsp;&amp;nbsp; &amp;lt;-------------- Slave echoes the first 5 bytes of data back&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;&amp;nbsp;0x01 0x02 0x03 0x04 0x05&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;-------------- The received data (from slave) is displayed&lt;/STRONG&gt;&lt;BR /&gt;&lt;EM&gt;&lt;STRONG&gt;.. repeats.&lt;/STRONG&gt;&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;At the board that is configured as slave:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;nRF24L01P+ slave&lt;BR /&gt;Eth0 link-up 100 full-duplex&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;Rx data available - pipe 1 : 10&amp;nbsp;&amp;nbsp; &amp;lt;-----------------This is the reception&amp;nbsp; of the broadcast (which doesn't get acknowledge) &lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;&amp;nbsp;0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a&amp;nbsp;&amp;nbsp; &amp;lt;--- the data that is received is displayed&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;Rx data available - pipe 1 : 10&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;--------------- This is the reception on the slave's address&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;&amp;nbsp;0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a&amp;nbsp;&amp;nbsp; &amp;lt;--- the data that is received is displayed&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;DATA ACKED!!&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;lt;--- this is the acknowledgement to the data that the slave echoed back&lt;/STRONG&gt;&lt;BR /&gt;&lt;EM&gt;&lt;STRONG&gt;.. repeats&lt;/STRONG&gt;&lt;/EM&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;To get an idea of how the address is controlled and the data sent, this is the routine that is called every 5s at the primary device and cycles through the three addressing types:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE class="language-c line-numbers"&gt;&lt;CODE&gt;&lt;SPAN class="keyword token"&gt;extern&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;void&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;fnTest_nRF24L01_Write&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="keyword token"&gt;int&lt;/SPAN&gt; iPingPong&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;static&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;const&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;unsigned&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;char&lt;/SPAN&gt; ucTestData&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;2&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;3&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;4&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;5&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;6&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;7&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;8&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;9&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;10&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;switch&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;iPingPong&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;case&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="token function"&gt;fnWrite_nRF24L01&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;nRF24L01_TX_ADDR &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; W_REGISTER&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="keyword token"&gt;unsigned&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;char&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;cAddress&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;sizeof&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;cAddress&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;// set the address for transmission&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="token function"&gt;fnData_nRF24L01&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="keyword token"&gt;unsigned&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;char&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;ucTestData&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;sizeof&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;ucTestData&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; W_TX_PAYLOAD&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;// send test transmission&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;break&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;case&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="token function"&gt;fnWrite_nRF24L01&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;nRF24L01_TX_ADDR &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; W_REGISTER&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="keyword token"&gt;unsigned&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;char&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;cBroadcastAddress&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;sizeof&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;cBroadcastAddress&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;// set the address for transmission&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="token function"&gt;fnData_nRF24L01&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="keyword token"&gt;unsigned&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;char&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;ucTestData&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;sizeof&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;ucTestData&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; W_ACK_PAYLOAD_NOACK&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;// send test transmission&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;break&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;case&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;2&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="token function"&gt;fnWrite_nRF24L01&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;nRF24L01_TX_ADDR &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; W_REGISTER&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="keyword token"&gt;unsigned&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;char&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;cMulticastAddress&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;sizeof&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;cMulticastAddress&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;// set the address for transmission&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="token function"&gt;fnData_nRF24L01&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="keyword token"&gt;unsigned&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;char&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;ucTestData&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;sizeof&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;ucTestData&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; W_ACK_PAYLOAD_NOACK&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;// send test transmission&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;break&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;To make it a bit more interesting, there is also a TCP/IP stack on the Ethernet interface of the board with web server and telnet (the same command line interface can also be accessed via Telnet). It also has an &lt;STRONG&gt;MQTT&lt;/STRONG&gt; client which can be controlled in the MQTT menu (on the command line interface).&lt;/P&gt;&lt;P&gt;If the &lt;EM&gt;slave&lt;/EM&gt; device is connected to a remote MQTT broker (such as "test.mosquitto.org" - &lt;EM&gt;use the command "mqtt_con 37.187.106.16" to connect to this one&lt;/EM&gt;) it will publish the data that it receives to a topic called "nRF24201" at the broker. All other devices subscribed to this topic (anywhere in the world) will then also receive the same data!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mark&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 27 Mar 2018 04:31:12 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/SPI-function-for-K66F/m-p/727896#M44510</guid>
      <dc:creator>mjbcswitzerland</dc:creator>
      <dc:date>2018-03-27T04:31:12Z</dc:date>
    </item>
  </channel>
</rss>

