<?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 Re: LPC55s16 PN5190 nfc library porting? in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC55s16-PN5190-nfc-library-porting/m-p/1646308#M52443</link>
    <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;I am not familiar with NFC, can you post the NxpNfcRdLib and the header file and user guide so that we can have a review?&lt;/P&gt;
&lt;P&gt;On the LPC55S16, you have to select the SPI port, assign the SPI pins, enable the SPI gated clock, then call the spi driver which is based on Cortex-M33.&lt;/P&gt;
&lt;P&gt;BR&lt;/P&gt;
&lt;P&gt;XiangJun Rong&lt;/P&gt;</description>
    <pubDate>Mon, 08 May 2023 09:37:09 GMT</pubDate>
    <dc:creator>xiangjun_rong</dc:creator>
    <dc:date>2023-05-08T09:37:09Z</dc:date>
    <item>
      <title>LPC55s16 PN5190 nfc library porting?</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC55s16-PN5190-nfc-library-porting/m-p/1646242#M52441</link>
      <description>&lt;P&gt;Hi everyone,&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;I'm trying to test my LPC55s16 custom board to communicate with NFC PN5190 via NxpNfcRdLib and am stuck on Platform\DAL\src and phOsal.&lt;/P&gt;&lt;P&gt;Could anyone give me a clue on how to either rewrite those function using LPC55s16 or an example using half duplex SPI to talk with PN5190? That could help me a lot. Thank you all in advance.&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 08 May 2023 07:59:47 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC55s16-PN5190-nfc-library-porting/m-p/1646242#M52441</guid>
      <dc:creator>rockynguyen92</dc:creator>
      <dc:date>2023-05-08T07:59:47Z</dc:date>
    </item>
    <item>
      <title>Re: LPC55s16 PN5190 nfc library porting?</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC55s16-PN5190-nfc-library-porting/m-p/1646308#M52443</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;I am not familiar with NFC, can you post the NxpNfcRdLib and the header file and user guide so that we can have a review?&lt;/P&gt;
&lt;P&gt;On the LPC55S16, you have to select the SPI port, assign the SPI pins, enable the SPI gated clock, then call the spi driver which is based on Cortex-M33.&lt;/P&gt;
&lt;P&gt;BR&lt;/P&gt;
&lt;P&gt;XiangJun Rong&lt;/P&gt;</description>
      <pubDate>Mon, 08 May 2023 09:37:09 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC55s16-PN5190-nfc-library-porting/m-p/1646308#M52443</guid>
      <dc:creator>xiangjun_rong</dc:creator>
      <dc:date>2023-05-08T09:37:09Z</dc:date>
    </item>
    <item>
      <title>Re: LPC55s16 PN5190 nfc library porting?</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC55s16-PN5190-nfc-library-porting/m-p/1655876#M52678</link>
      <description>&lt;P&gt;Hi all, for testing purposes, I used the LPC55s28 kit to communicate with the PNEV5190B kit via external SPI. I have succeeded in initiating the library and reading out the&amp;nbsp;phhalHw_Pn5190_Instr_GetVersion. The&amp;nbsp;SimplifiedApiDemo example is stuck at&amp;nbsp;&lt;BR /&gt;/* Activating the card with blocking activation mode */&lt;BR /&gt;dwStatus = phNfcLib_Activate(wTechnologyMask, &amp;amp;PeerInfo, NULL);&lt;BR /&gt;&lt;BR /&gt;I have modified the&amp;nbsp;phbalReg_Exchange function to work with lpc55s28 and the&amp;nbsp;&lt;SPAN&gt;SPI_MasterTransferBlocking is the reason why the example code halt&lt;/SPAN&gt;&lt;/P&gt;&lt;DIV&gt;phStatus_t phbalReg_Exchange(&lt;/DIV&gt;&lt;DIV&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; void * pDataParams,&lt;/DIV&gt;&lt;DIV&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; uint16_t wOption,&lt;/DIV&gt;&lt;DIV&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; uint8_t * pTxBuffer,&lt;/DIV&gt;&lt;DIV&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; uint16_t wTxLength,&lt;/DIV&gt;&lt;DIV&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; uint16_t wRxBufSize,&lt;/DIV&gt;&lt;DIV&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; uint8_t * pRxBuffer,&lt;/DIV&gt;&lt;DIV&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; uint16_t * pRxLength&lt;/DIV&gt;&lt;DIV&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; )&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp;phStatus_t status = PH_DRIVER_SUCCESS;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; uint8_t * pRxBuf;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; status_t dspiStatus;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; spi_transfer_t g_masterXfer;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; memset(&amp;amp;g_masterXfer, 0, sizeof(spi_transfer_t));&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; if(pRxBuffer == NULL)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pRxBuf = g_dummyBuffer;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; else&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pRxBuf = pRxBuffer;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; if(pTxBuffer == NULL)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; wTxLength = wRxBufSize;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; g_dummyBuffer[0] = 0xFF;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pTxBuffer = g_dummyBuffer;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; /* Set up the transfer */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; g_masterXfer.txData = pTxBuffer;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; g_masterXfer.rxData = pRxBuf;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; g_masterXfer.dataSize = wTxLength;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;// &amp;nbsp; &amp;nbsp; g_masterXfer.configFlags = kSPI_FrameDelay;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; /* Start transfer */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; dspiStatus = SPI_MasterTransferBlocking(FC8_SPI_NFC_PERIPHERAL, &amp;amp;g_masterXfer);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; if (dspiStatus != kStatus_Success)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return (PH_DRIVER_FAILURE | PH_COMP_DRIVER);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; if (pRxLength != NULL)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *pRxLength = wTxLength;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; return status;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="My example code stuck at spi exchange data function" style="width: 653px;"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/224514i97E0FB845D4569EE/image-size/large?v=v2&amp;amp;px=999" role="button" title="Screenshot 2023-05-23 215804.png" alt="My example code stuck at spi exchange data function" /&gt;&lt;span class="lia-inline-image-caption" onclick="event.preventDefault();"&gt;My example code stuck at spi exchange data function&lt;/span&gt;&lt;/span&gt;&lt;BR /&gt;Could anyone give me some clues to fix these problems? Thank you all in advance.&lt;/P&gt;</description>
      <pubDate>Tue, 23 May 2023 15:31:10 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC55s16-PN5190-nfc-library-porting/m-p/1655876#M52678</guid>
      <dc:creator>rockynguyen92</dc:creator>
      <dc:date>2023-05-23T15:31:10Z</dc:date>
    </item>
    <item>
      <title>Re: LPC55s16 PN5190 nfc library porting?</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC55s16-PN5190-nfc-library-porting/m-p/1656157#M52683</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;Regarding your question, I suppose that you have to call the following function before you call the SPI_MasterTransferBlocking(FC8_SPI_NFC_PERIPHERAL, &amp;amp;g_masterXfer);&lt;/P&gt;
&lt;P&gt;1)pin assignment&lt;/P&gt;
&lt;P&gt;you have to configure the SPI pins in IOCON register&lt;/P&gt;
&lt;P&gt;CLOCK_EnableClock(kCLOCK_Iocon);&lt;/P&gt;
&lt;P&gt;const uint32_t port0_pin20_config = (&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;IOCON_PIO_FUNC7 |&lt;BR /&gt;/* Selects pull-up function */&lt;BR /&gt;IOCON_PIO_MODE_PULLUP |&lt;BR /&gt;/* Standard mode, output slew rate control is enabled */&lt;BR /&gt;IOCON_PIO_SLEW_STANDARD |&lt;BR /&gt;/* Input function is not inverted */&lt;BR /&gt;IOCON_PIO_INV_DI |&lt;BR /&gt;/* Enables digital function */&lt;BR /&gt;IOCON_PIO_DIGITAL_EN |&lt;BR /&gt;/* Open drain is disabled */&lt;BR /&gt;IOCON_PIO_OPENDRAIN_DI);&lt;BR /&gt;/* PORT0 PIN20 (coords: 74) is configured as FC7_RXD_SDA_MOSI_DATA */&lt;BR /&gt;IOCON_PinMuxSet(IOCON, 0U, 20U, port0_pin20_config);&lt;/P&gt;
&lt;P&gt;.............&lt;/P&gt;
&lt;P&gt;The above code just give you a format, finally, it is dependent on which pin is assigned for LPC5528.&lt;/P&gt;
&lt;P&gt;2)configure the SPI module:&lt;/P&gt;
&lt;P&gt;#define EXAMPLE_SPI_MASTER SPI7&lt;BR /&gt;#define EXAMPLE_SPI_MASTER_IRQ FLEXCOMM7_IRQn&lt;BR /&gt;#define EXAMPLE_SPI_MASTER_CLK_SRC kCLOCK_Flexcomm7&lt;BR /&gt;#define EXAMPLE_SPI_MASTER_CLK_FREQ CLOCK_GetFlexCommClkFreq(7U)&lt;BR /&gt;#define EXAMPLE_SPI_SSEL 1&lt;BR /&gt;#define EXAMPLE_SPI_SPOL kSPI_SpolActiveAllLow&lt;/P&gt;
&lt;P&gt;CLOCK_AttachClk(kFRO12M_to_FLEXCOMM7);&lt;/P&gt;
&lt;P&gt;SPI_MasterGetDefaultConfig(&amp;amp;userConfig);&lt;BR /&gt;srcFreq = EXAMPLE_SPI_MASTER_CLK_FREQ;&lt;BR /&gt;userConfig.sselNum = (spi_ssel_t)EXAMPLE_SPI_SSEL;&lt;BR /&gt;userConfig.sselPol = (spi_spol_t)EXAMPLE_SPI_SPOL;&lt;BR /&gt;SPI_MasterInit(EXAMPLE_SPI_MASTER, &amp;amp;userConfig, srcFreq);&lt;/P&gt;
&lt;P&gt;/* Init Buffer */&lt;BR /&gt;for (i = 0; i &amp;lt; BUFFER_SIZE; i++)&lt;BR /&gt;{&lt;BR /&gt;srcBuff[i] = i;&lt;BR /&gt;}&lt;/P&gt;
&lt;P&gt;/* Send to slave */&lt;BR /&gt;xfer.txData = srcBuff;&lt;BR /&gt;xfer.rxData = destBuff;&lt;BR /&gt;xfer.dataSize = sizeof(destBuff);&lt;BR /&gt;xfer.configFlags = kSPI_FrameAssert;&lt;/P&gt;
&lt;P&gt;then call the function:&lt;/P&gt;
&lt;P&gt;dspiStatus = SPI_MasterTransferBlocking(FC8_SPI_NFC_PERIPHERAL, &amp;amp;g_masterXfer);&lt;/P&gt;
&lt;P&gt;pls check the data width for each spi transfer&lt;/P&gt;
&lt;P&gt;Pls try the above procedure.&lt;/P&gt;
&lt;P&gt;If you still have issue, pls check where the code hangs on so that we can have a check.&lt;/P&gt;
&lt;P&gt;BR&lt;/P&gt;
&lt;P&gt;XiangJun Rong&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 24 May 2023 02:49:46 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC55s16-PN5190-nfc-library-porting/m-p/1656157#M52683</guid>
      <dc:creator>xiangjun_rong</dc:creator>
      <dc:date>2023-05-24T02:49:46Z</dc:date>
    </item>
    <item>
      <title>Re: LPC55s16 PN5190 nfc library porting?</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC55s16-PN5190-nfc-library-porting/m-p/1656222#M52687</link>
      <description>&lt;P&gt;Thank you for your reply, I have already initiated the spi channel:&lt;BR /&gt;&lt;BR /&gt;RESET_PeripheralReset(kHSLSPI_RST_SHIFT_RSTn);&lt;/P&gt;&lt;P&gt;const spi_master_config_t FC8_SPI_NFC_config = {&lt;BR /&gt;.enableLoopback = false,&lt;BR /&gt;.enableMaster = true,&lt;BR /&gt;.polarity = kSPI_ClockPolarityActiveHigh,&lt;BR /&gt;.phase = kSPI_ClockPhaseFirstEdge,&lt;BR /&gt;.direction = kSPI_MsbFirst,&lt;BR /&gt;.baudRate_Bps = 1200000UL,&lt;BR /&gt;.dataWidth = kSPI_Data8Bits,&lt;BR /&gt;.sselNum = kSPI_Ssel0,&lt;BR /&gt;.sselPol = kSPI_SpolActiveAllLow,&lt;BR /&gt;.txWatermark = kSPI_TxFifo0,&lt;BR /&gt;.rxWatermark = kSPI_RxFifo1,&lt;BR /&gt;.delayConfig = {&lt;BR /&gt;.preDelay = 0U,&lt;BR /&gt;.postDelay = 0U,&lt;BR /&gt;.frameDelay = 0U,&lt;BR /&gt;.transferDelay = 0U&lt;BR /&gt;}&lt;BR /&gt;};&lt;/P&gt;&lt;P&gt;static void FC8_SPI_NFC_init(void) {&lt;BR /&gt;/* Initialization function */&lt;BR /&gt;SPI_MasterInit(FC8_SPI_NFC_PERIPHERAL, &amp;amp;FC8_SPI_NFC_config, FC8_SPI_NFC_CLOCK_SOURCE);&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;I can read out the pn5190 firmware version via spi&amp;nbsp; using the library function as below:&lt;BR /&gt;&lt;FONT size="2"&gt;phhalHw_Pn5190_Version_t _pVersion;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;status = phhalHw_Pn5190_Instr_GetVersion(&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;&amp;amp;gphNfcLib_Params.sHal, /**&amp;lt; [In] Pointer to this layer's parameter structure. */&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;&amp;amp;_pVersion /**&amp;lt; [InOut] structure pointer for, 4 byte Version Information read from PN5190. */&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;);&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;if(status == PH_ERR_SUCCESS)&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;{&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;PRINTF("phhalHw_Pn5190_Instr_GetVersion bHw_Version %x bROM_Version %x wFW_Version %x\n", _pVersion.bHw_Version, _pVersion.bROM_Version, _pVersion.wFW_Version);&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;}else&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;{&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;PRINTF("phhalHw_Pn5190_Instr_GetVersion %x\n",status);&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;return 1;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;}&lt;/FONT&gt;&lt;BR /&gt;=&amp;gt;&amp;gt; GOT:&amp;nbsp;phhalHw_Pn5190_Instr_GetVersion bHw_Version&amp;nbsp;&amp;nbsp;52 bROM_Version 2 wFW_Version 205&lt;BR /&gt;&lt;BR /&gt;I think the problem is the phbalReg_Exchange. This is the original one from the library for LCP1769:&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;phStatus_t phbalReg_Exchange(&lt;BR /&gt;void * pDataParams,&lt;BR /&gt;uint16_t wOption,&lt;BR /&gt;uint8_t * pTxBuffer,&lt;BR /&gt;uint16_t wTxLength,&lt;BR /&gt;uint16_t wRxBufSize,&lt;BR /&gt;uint8_t * pRxBuffer,&lt;BR /&gt;uint16_t * pRxLength&lt;BR /&gt;)&lt;BR /&gt;{&lt;BR /&gt;uint16_t xferLen;&lt;BR /&gt;Chip_SSP_DATA_SETUP_T xferConfig;&lt;/P&gt;&lt;P&gt;xferConfig.length = wTxLength;&lt;BR /&gt;xferConfig.rx_data = pRxBuffer;&lt;BR /&gt;xferConfig.tx_data = pTxBuffer;&lt;BR /&gt;xferConfig.rx_cnt = 0;&lt;BR /&gt;xferConfig.tx_cnt = 0;&lt;/P&gt;&lt;P&gt;/* data exchange */&lt;BR /&gt;if ( wRxBufSize == 0 )&lt;BR /&gt;{&lt;BR /&gt;Chip_SSP_WriteFrames_Blocking(LPC_SSP, pTxBuffer, wTxLength);&lt;BR /&gt;xferLen = wTxLength; /* Fake as a full duplex */&lt;BR /&gt;}&lt;BR /&gt;else&lt;BR /&gt;{&lt;BR /&gt;if ( wTxLength == 0 )&lt;BR /&gt;{&lt;BR /&gt;xferLen = Chip_SSP_ReadFrames_Blocking(LPC_SSP, pRxBuffer, wRxBufSize);&lt;BR /&gt;}&lt;BR /&gt;else&lt;BR /&gt;{&lt;BR /&gt;xferLen = Chip_SSP_RWFrames_Blocking(LPC_SSP, &amp;amp;xferConfig);&lt;BR /&gt;}&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;if ( wTxLength !=0 &amp;amp;&amp;amp; wRxBufSize != 0 )&lt;BR /&gt;{&lt;BR /&gt;if (xferLen != wTxLength)&lt;BR /&gt;{&lt;BR /&gt;return (PH_DRIVER_FAILURE | PH_COMP_DRIVER);&lt;BR /&gt;}&lt;BR /&gt;}&lt;BR /&gt;if ( pRxLength != NULL)&lt;BR /&gt;*pRxLength = xferLen;&lt;/P&gt;&lt;P&gt;return PH_DRIVER_SUCCESS;&lt;BR /&gt;}&lt;BR /&gt;Could you check if my porting code is correct?&lt;/P&gt;</description>
      <pubDate>Wed, 24 May 2023 04:03:06 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC55s16-PN5190-nfc-library-porting/m-p/1656222#M52687</guid>
      <dc:creator>rockynguyen92</dc:creator>
      <dc:date>2023-05-24T04:03:06Z</dc:date>
    </item>
    <item>
      <title>Re: LPC55s16 PN5190 nfc library porting?</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC55s16-PN5190-nfc-library-porting/m-p/1656291#M52689</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;Regarding your api function Chip_SSP_ReadFrames_Blocking(LPC_SSP, pRxBuffer, wRxBufSize); and Chip_SSP_RWFrames_Blocking(), can you tell us where you get the api function?&lt;/P&gt;
&lt;P&gt;Do you use LPC55S16 part number?&lt;/P&gt;
&lt;P&gt;As you know that the SSP is another independent module, which only integrates in old LPC family for example LPC43xx, if you use LPC55S16, I am sure that the LPC55S16 does not include SSP module, it only includes FlexCommx module which can be configured as spi.&lt;/P&gt;
&lt;P&gt;Pls check yourself, anyway, pls post the above api function code to check if the peripheral is SSP or spi module.&lt;/P&gt;
&lt;P&gt;BTW, I suggest you write a simple code for example write/read 8 bytes definitely via spi without "if"&lt;/P&gt;
&lt;P&gt;BR&lt;/P&gt;
&lt;P&gt;XiangJun Rong&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 24 May 2023 06:02:14 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC55s16-PN5190-nfc-library-porting/m-p/1656291#M52689</guid>
      <dc:creator>xiangjun_rong</dc:creator>
      <dc:date>2023-05-24T06:02:14Z</dc:date>
    </item>
    <item>
      <title>Re: LPC55s16 PN5190 nfc library porting?</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC55s16-PN5190-nfc-library-porting/m-p/1656338#M52690</link>
      <description>&lt;P&gt;Hi XiangJun,&lt;BR /&gt;Sorry if I got you misunderstanding.&lt;BR /&gt;Yes, Chip_SSP_ReadFrames_Blocking(LPC_SSP, pRxBuffer, wRxBufSize); andhip_SSP_RWFrames_Blocking() is from example code of NXP&amp;nbsp;NxpNfcRdLib using LPCOpen&lt;BR /&gt;And yes I re-write it myself for LPC55s28, you can see code below:&lt;/P&gt;&lt;DIV&gt;phStatus_t phbalReg_Exchange(&lt;/DIV&gt;&lt;DIV&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; void * pDataParams,&lt;/DIV&gt;&lt;DIV&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; uint16_t wOption,&lt;/DIV&gt;&lt;DIV&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; uint8_t * pTxBuffer,&lt;/DIV&gt;&lt;DIV&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; uint16_t wTxLength,&lt;/DIV&gt;&lt;DIV&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; uint16_t wRxBufSize,&lt;/DIV&gt;&lt;DIV&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; uint8_t * pRxBuffer,&lt;/DIV&gt;&lt;DIV&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; uint16_t * pRxLength&lt;/DIV&gt;&lt;DIV&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; )&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;phStatus_t status = PH_DRIVER_SUCCESS;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; uint8_t * pRxBuf;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; status_t dspiStatus;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; spi_transfer_t g_masterXfer;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; uint8_t g_dummyBuffer[RX_BUFFER_SIZE_MAX];&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; memset(&amp;amp;g_masterXfer, 0, sizeof(spi_transfer_t));&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; if(pRxBuffer == NULL)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pRxBuf = g_dummyBuffer;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; else&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pRxBuf = pRxBuffer;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; if(pTxBuffer == NULL)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; wTxLength = wRxBufSize;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; g_dummyBuffer[0] = 0xFF;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pTxBuffer = g_dummyBuffer;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; /* Set up the transfer */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; g_masterXfer.txData = pTxBuffer;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; g_masterXfer.rxData = pRxBuf;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; g_masterXfer.dataSize = wTxLength;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;// &amp;nbsp; &amp;nbsp; g_masterXfer.configFlags = kSPI_FrameAssert;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; /* Start transfer */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; dspiStatus = SPI_MasterTransferBlocking(FC8_SPI_NFC_PERIPHERAL, &amp;amp;g_masterXfer);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; if (dspiStatus != kStatus_Success)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return (PH_DRIVER_FAILURE | PH_COMP_DRIVER);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; if (pRxLength != NULL)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *pRxLength = wTxLength;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; return status;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;P&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;The problem is I still can read out the firmware version of PN5190 and am able to force it to run in normal boot mode via SPI, but in a deeper process like detecting card sweeper. It is stuck at SPI master transfer function.&lt;BR /&gt;&lt;BR /&gt;All the mechanism was followed library example code, I am only rewriting the phbalReg_Exchange data function&lt;/P&gt;&lt;P&gt;Thanks.&lt;/P&gt;</description>
      <pubDate>Wed, 24 May 2023 06:41:46 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC55s16-PN5190-nfc-library-porting/m-p/1656338#M52690</guid>
      <dc:creator>rockynguyen92</dc:creator>
      <dc:date>2023-05-24T06:41:46Z</dc:date>
    </item>
    <item>
      <title>Re: LPC55s16 PN5190 nfc library porting?</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC55s16-PN5190-nfc-library-porting/m-p/1656367#M52692</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;This is the api function, can you debug and check which line the core hangs on?&lt;/P&gt;
&lt;P&gt;BR&lt;/P&gt;
&lt;P&gt;XiangJun Rong&lt;/P&gt;
&lt;P&gt;/*!&lt;BR /&gt;* brief Transfers a block of data using a polling method.&lt;BR /&gt;*&lt;BR /&gt;* param base SPI base pointer&lt;BR /&gt;* param xfer pointer to spi_xfer_config_t structure&lt;BR /&gt;* retval kStatus_Success Successfully start a transfer.&lt;BR /&gt;* retval kStatus_InvalidArgument Input argument is invalid.&lt;BR /&gt;* retval kStatus_SPI_Timeout The transfer timed out and was aborted.&lt;BR /&gt;*/&lt;BR /&gt;status_t SPI_MasterTransferBlocking(SPI_Type *base, spi_transfer_t *xfer)&lt;BR /&gt;{&lt;BR /&gt;uint32_t instance;&lt;BR /&gt;uint32_t tx_ctrl = 0U, last_ctrl = 0U;&lt;BR /&gt;uint32_t tmp32, rxRemainingBytes, txRemainingBytes, dataWidth;&lt;BR /&gt;uint32_t toReceiveCount = 0;&lt;BR /&gt;uint8_t *txData, *rxData;&lt;BR /&gt;uint32_t fifoDepth;&lt;BR /&gt;#if SPI_RETRY_TIMES&lt;BR /&gt;uint32_t waitTimes = SPI_RETRY_TIMES;&lt;BR /&gt;#endif&lt;/P&gt;
&lt;P&gt;/* check params */&lt;BR /&gt;assert(!((NULL == base) || (NULL == xfer) || ((NULL == xfer-&amp;gt;txData) &amp;amp;&amp;amp; (NULL == xfer-&amp;gt;rxData))));&lt;BR /&gt;if ((NULL == base) || (NULL == xfer) || ((NULL == xfer-&amp;gt;txData) &amp;amp;&amp;amp; (NULL == xfer-&amp;gt;rxData)))&lt;BR /&gt;{&lt;BR /&gt;return kStatus_InvalidArgument;&lt;BR /&gt;}&lt;/P&gt;
&lt;P&gt;fifoDepth = SPI_FIFO_DEPTH(base);&lt;BR /&gt;txData = xfer-&amp;gt;txData;&lt;BR /&gt;rxData = xfer-&amp;gt;rxData;&lt;BR /&gt;txRemainingBytes = (txData != NULL) ? xfer-&amp;gt;dataSize : 0U;&lt;BR /&gt;rxRemainingBytes = (rxData != NULL) ? xfer-&amp;gt;dataSize : 0U;&lt;/P&gt;
&lt;P&gt;instance = SPI_GetInstance(base);&lt;BR /&gt;dataWidth = (uint32_t)(g_configs[instance].dataWidth);&lt;/P&gt;
&lt;P&gt;/* dataSize (in bytes) is not aligned to 16bit (2B) transfer */&lt;BR /&gt;if ((dataWidth &amp;gt; (uint32_t)kSPI_Data8Bits) &amp;amp;&amp;amp; ((xfer-&amp;gt;dataSize &amp;amp; 0x1U) != 0U))&lt;BR /&gt;{&lt;BR /&gt;return kStatus_InvalidArgument;&lt;BR /&gt;}&lt;/P&gt;
&lt;P&gt;/* clear tx/rx errors and empty FIFOs */&lt;BR /&gt;base-&amp;gt;FIFOCFG |= SPI_FIFOCFG_EMPTYTX_MASK | SPI_FIFOCFG_EMPTYRX_MASK;&lt;BR /&gt;base-&amp;gt;FIFOSTAT |= SPI_FIFOSTAT_TXERR_MASK | SPI_FIFOSTAT_RXERR_MASK;&lt;BR /&gt;/* select slave to talk with */&lt;BR /&gt;tx_ctrl |= (SPI_DEASSERT_ALL &amp;amp; (~SPI_DEASSERTNUM_SSEL((uint32_t)(g_configs[instance].sselNum))));&lt;BR /&gt;/* set width of data - range asserted at entry */&lt;BR /&gt;tx_ctrl |= SPI_FIFOWR_LEN(dataWidth);&lt;BR /&gt;/* delay for frames */&lt;BR /&gt;tx_ctrl |= ((xfer-&amp;gt;configFlags &amp;amp; (uint32_t)kSPI_FrameDelay) != 0U) ? (uint32_t)kSPI_FrameDelay : 0U;&lt;BR /&gt;/* end of transfer */&lt;BR /&gt;last_ctrl |= ((xfer-&amp;gt;configFlags &amp;amp; (uint32_t)kSPI_FrameAssert) != 0U) ? (uint32_t)kSPI_FrameAssert : 0U;&lt;BR /&gt;/* last index of loop */&lt;BR /&gt;while ((txRemainingBytes != 0U) || (rxRemainingBytes != 0U) || (toReceiveCount != 0U))&lt;BR /&gt;{&lt;BR /&gt;#if SPI_RETRY_TIMES&lt;BR /&gt;if (--waitTimes == 0U)&lt;BR /&gt;{&lt;BR /&gt;return kStatus_SPI_Timeout;&lt;BR /&gt;}&lt;BR /&gt;#endif&lt;BR /&gt;/* if rxFIFO is not empty */&lt;BR /&gt;if ((base-&amp;gt;FIFOSTAT &amp;amp; SPI_FIFOSTAT_RXNOTEMPTY_MASK) != 0U)&lt;BR /&gt;{&lt;BR /&gt;tmp32 = base-&amp;gt;FIFORD;&lt;BR /&gt;/* rxBuffer is not empty */&lt;BR /&gt;if (rxRemainingBytes != 0U)&lt;BR /&gt;{&lt;BR /&gt;*(rxData++) = (uint8_t)tmp32;&lt;BR /&gt;rxRemainingBytes--;&lt;BR /&gt;/* read 16 bits at once */&lt;BR /&gt;if (dataWidth &amp;gt; 8U)&lt;BR /&gt;{&lt;BR /&gt;*(rxData++) = (uint8_t)(tmp32 &amp;gt;&amp;gt; 8);&lt;BR /&gt;rxRemainingBytes--;&lt;BR /&gt;}&lt;BR /&gt;}&lt;BR /&gt;/* decrease number of data expected to receive */&lt;BR /&gt;toReceiveCount -= 1U;&lt;BR /&gt;}&lt;BR /&gt;/* transmit if txFIFO is not full and data to receive does not exceed FIFO depth */&lt;BR /&gt;if (((base-&amp;gt;FIFOSTAT &amp;amp; SPI_FIFOSTAT_TXNOTFULL_MASK) != 0U) &amp;amp;&amp;amp; (toReceiveCount &amp;lt; fifoDepth) &amp;amp;&amp;amp;&lt;BR /&gt;((txRemainingBytes != 0U) || (rxRemainingBytes &amp;gt;= SPI_COUNT_TO_BYTES(dataWidth, toReceiveCount + 1U))))&lt;BR /&gt;{&lt;BR /&gt;/* txBuffer is not empty */&lt;BR /&gt;if (txRemainingBytes != 0U)&lt;BR /&gt;{&lt;BR /&gt;tmp32 = *(txData++);&lt;BR /&gt;txRemainingBytes--;&lt;BR /&gt;/* write 16 bit at once */&lt;BR /&gt;if (dataWidth &amp;gt; 8U)&lt;BR /&gt;{&lt;BR /&gt;tmp32 |= ((uint32_t)(*(txData++))) &amp;lt;&amp;lt; 8U;&lt;BR /&gt;txRemainingBytes--;&lt;BR /&gt;}&lt;BR /&gt;if (txRemainingBytes == 0U)&lt;BR /&gt;{&lt;BR /&gt;tx_ctrl |= last_ctrl;&lt;BR /&gt;}&lt;BR /&gt;}&lt;BR /&gt;else&lt;BR /&gt;{&lt;BR /&gt;tmp32 = (uint32_t)s_dummyData[instance];&lt;BR /&gt;tmp32 |= (uint32_t)s_dummyData[instance] &amp;lt;&amp;lt; 8U;&lt;BR /&gt;/* last transfer */&lt;BR /&gt;if (rxRemainingBytes == SPI_COUNT_TO_BYTES(dataWidth, toReceiveCount + 1U))&lt;BR /&gt;{&lt;BR /&gt;tx_ctrl |= last_ctrl;&lt;BR /&gt;}&lt;BR /&gt;}&lt;BR /&gt;/* send data */&lt;BR /&gt;tmp32 = tx_ctrl | tmp32;&lt;BR /&gt;base-&amp;gt;FIFOWR = tmp32;&lt;BR /&gt;toReceiveCount += 1U;&lt;BR /&gt;}&lt;BR /&gt;}&lt;BR /&gt;/* wait if TX FIFO of previous transfer is not empty */&lt;BR /&gt;#if SPI_RETRY_TIMES&lt;BR /&gt;waitTimes = SPI_RETRY_TIMES;&lt;BR /&gt;while ((0U == (base-&amp;gt;FIFOSTAT &amp;amp; SPI_FIFOSTAT_TXEMPTY_MASK)) &amp;amp;&amp;amp; (0U != --waitTimes))&lt;BR /&gt;#else&lt;BR /&gt;while (0U == (base-&amp;gt;FIFOSTAT &amp;amp; SPI_FIFOSTAT_TXEMPTY_MASK))&lt;BR /&gt;#endif&lt;BR /&gt;{&lt;BR /&gt;}&lt;BR /&gt;#if SPI_RETRY_TIMES&lt;BR /&gt;if (waitTimes == 0U)&lt;BR /&gt;{&lt;BR /&gt;return kStatus_SPI_Timeout;&lt;BR /&gt;}&lt;BR /&gt;#endif&lt;BR /&gt;return kStatus_Success;&lt;BR /&gt;}&lt;/P&gt;</description>
      <pubDate>Wed, 24 May 2023 07:19:17 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC55s16-PN5190-nfc-library-porting/m-p/1656367#M52692</guid>
      <dc:creator>xiangjun_rong</dc:creator>
      <dc:date>2023-05-24T07:19:17Z</dc:date>
    </item>
  </channel>
</rss>

