Skip to main content
MP.17
Associate II
March 19, 2019
Solved

Implementing ST25R3911B

Hi there, we want to use the ST25R3911B on our own board, so I've implemented the whole SPI communication in a Xilinx Zynq FPGA. So SPI communication is tested and working, so reading writing to registers is no problem.

Now I have to implement the RFID protocols, which are nicely provided by ST. So I've downloaded the software implementation from:

https://my.st.com/content/my_st_com/en/products/embedded-software/mcu-mpu-embedded-software/stm32-embedded-software/stm32cube-expansion-packages/x-cube-nfc5.license=1552982656184.product=X-CUBE-NFC5.version=1.3.0.html

To save some wires (interrupt wires), instead of interrupts I do poll the interrupt registers on every function call "st25r3911CheckForReceivedInterrupts".

So running the main.c of this example, the process got stuck in a while code of the example:

static ReturnCode rfalTransceiveRunBlockingTx( void )

{

   ReturnCode ret;

// following while loop will never finishd:

   do{

       rfalWorker();

   }

   while( ((ret = rfalGetTransceiveStatus() ) == ERR_BUSY) && rfalIsTransceiveInTx() );

   if( rfalIsTransceiveInRx() )

   {

       return ERR_NONE;

   }

   return ret;

}

So by further debugging, I recognized that the problem seems to be in following function:

static void rfalTransceiveTx( void ){

[...]

       case RFAL_TXRX_STATE_TX_WAIT_TXE:

           irqs = st25r3911GetInterrupt( (ST25R3911_IRQ_MASK_FWL | ST25R3911_IRQ_MASK_TXE) );

           if( irqs == ST25R3911_IRQ_MASK_NONE )

           {

              // my interrupt is at the moment 0x82

              break; /* No interrupt to process */

           }

[...]

}

My problem is now, I am confused because there is no timeout or something to leave the loop. Also no new interrupts appear in this loop, even if i poll all interrupt registers with "st25r3911CheckForReceivedInterrupts()".

So perhaps someone had a similar problem when using this code in a non-ST-Evalboard?

Did I miss something?

    This topic has been closed for replies.
    MP.17
    MP.17Best answer
    Associate II
    May 16, 2019

    Sorry for the late answer, it was a little busy meantime.

    Ok I figured out the problem: This code isn't working without interrupts. I wanted to avoid interrupts in my system, so we decided to use a separate STM32 to control this RFID module.

    Thanks anyway.

    2 replies

    Ulysses HERNIOSUS
    ST Technical Moderator
    March 21, 2019

    Hi Martin,

    can you provide a logic analyzer trace of this issue, please?

    Regards, Ulysses

    MP.17
    MP.17AuthorBest answer
    Associate II
    May 16, 2019

    Sorry for the late answer, it was a little busy meantime.

    Ok I figured out the problem: This code isn't working without interrupts. I wanted to avoid interrupts in my system, so we decided to use a separate STM32 to control this RFID module.

    Thanks anyway.