Skip to main content
Associate
August 18, 2026
Question

ST25R3920B NFC Reader Card Detection Timing Analysis

  • August 18, 2026
  • 3 replies
  • 91 views

Hi ,

We observed the timing details for each state during card detection. These measurements were captured while running the demo cycle continuously in a while loop for card detection on bare metal.

 

We are using the NFC Reader stack on an AUTOSAR platform and executing the NFC task every 1 ms. During testing with NFC-A and Proprietary technologies, we observed that the card detection and validation process takes approximately 300 ms.

Could you help us understand how these timing values are expected to be observed and interpreted?

We observed that the PollTechDetectCnt reached 1162 during testing. Could you please confirm the expected number of iterations for each state in the polling and card detection sequence?

 Initialization for discovery parameters - 

 

 discParam.compMode = RFAL_COMPLIANCE_MODE_NFC;

  discParam.devLimit = 1U;

  discParam.nfcfBR = RFAL_BR_212;

  discParam.maxBR = RFAL_BR_KEEP;

  discParam.p2pNfcaPrio = false;

  discParam.wakeupEnabled = false;

  discParam.wakeupConfigDefault = false;

  discParam.wakeupNPolls = DISCOVERY_CNT;

  discParam.wakeupConfig.period = RFAL_WUM_PERIOD_100MS;

  discParam.wakeupConfig.irqTout = false;

  discParam.wakeupConfig.indAmp.enabled = true;

  discParam.wakeupConfig.indAmp.reference = RFAL_WUM_REFERENCE_AUTO;

  discParam.wakeupConfig.indAmp.delta = RFAL_WKPU_DELTA_TWO;

  discParam.wakeupConfig.indAmp.autoAvg = true; /**Changed to TRUE as per  HSI Requirement  */

  discParam.wakeupConfig.indAmp.aaWeight = RFAL_WUM_AA_WEIGHT_4; /**Added as per  HSI Requirement  */

  discParam.wakeupConfig.indPha.enabled = true;

  discParam.wakeupConfig.indPha.reference = RFAL_WUM_REFERENCE_AUTO;

  discParam.wakeupConfig.indPha.delta = RFAL_WKPU_DELTA_TWO;

  discParam.wakeupConfig.indPha.autoAvg = true;

  discParam.wakeupConfig.indPha.aaWeight = RFAL_WUM_AA_WEIGHT_4; 

  discParam.wakeupConfig.cap.enabled = false;

  #ifdef ST25R3916

  discParam.wakeupConfig.swTagDetect = true;

  #endif /* ST25R3916 */

  #ifdef SW_ALPCD

  discParam.wakeupEnabled = true;

  #endif /* SW_ALPCD */

  (void)ST_MEMSET(&discParam.propNfc, 0x00, sizeof(rfalNfcPropCallbacks));

  discParam.propNfc.rfalNfcpPollerInitialize = NULL;

  discParam.propNfc.rfalNfcpPollerTechnologyDetection = &PropNfcTechnologyDetection;

  discParam.notifyCb = &NFCNotif;

  discParam.totalDuration = 5ms;

  discParam.techs2Find = (RFAL_NFC_POLL_TECH_A | RFAL_NFC_POLL_TECH_PROP);

  discParam.isoDepFS = RFAL_ISODEP_FSXI_256;

3 replies

Ulysses HERNIOSUS
ST Technical Moderator
August 24, 2026

Hello Anithak,

not sure I am following completely your experiments. My question and points are:

  1. What is your “card validation process”? Does it include APDUs? Data exchange timing can heavily depend on the card and its processing time.
  2. Where do your 300ms start and where do they stop exactly?
  3. Are the 300ms again on bare-metal?
  4. I don’t fully understand which times you are measuring and how you are measuring:
    • screenshot just shows a time stamp being taken and not a duration.
    • What is poll_disc_time? Maybe you could share your instrumented test code?
  5. What is the counter part of the reader? A card or a mobile? Which exact model?
  6. Most helpful would also be a logic analyzer trace (SPI+IRQ) as it will also allow to verify your timing measurements and give additional insights on potential optimization.
  7. Which value is reached for PollTechDetectCnt  will depend on the frequency of rfalnfcWorker() calls and maybe the speed of your MCU.
  8. Is the card already on the reader antenna when you start your test?

BR, Ulysses

AnithakAuthor
Associate
August 27, 2026

Hi  Ulysses,
 Thanks for your response. Please find below information.

  1. What is your “card validation process”? Does it include APDUs? Data exchange timing can heavily depend on the card and its processing time. -  yes
  2. Where do your 300ms start and where do they stop exactly? - From controller wake up to till data exchange state starts
  3. Are the 300ms again on bare-metal? - we are running SW on  Autosar OS with NFC task periodicity as 5ms
  4. I don’t fully understand which times you are measuring and how you are measuring:
    • screenshot just shows a time stamp being taken and not a duration. - i am measuring each state timing values like discovery state, poll tech detect state
    • What is poll_tech_time? Maybe you could share your instrumented test code? - Poll tech detect state start time
  5. What is the counter part of the reader? A card or a mobile? Which exact model? - using NFC type - A card 
  6. Most helpful would also be a logic analyzer trace (SPI+IRQ) as it will also allow to verify your timing measurements and give additional insights on potential optimization. - 
  7. Which value is reached for PollTechDetectCnt  will depend on the frequency of rfalnfcWorker() calls and maybe the speed of your MCU. - MCU Core clock frequency is 120MHz, and Spi clck frequency is 60MhZ
  8. Is the card already on the reader antenna when you start your test? - yes card is present on the hardware
  9.  
  10. NFC Polling example
    Free RTOS task polling task running at 1ms
  11. Free RTOS example polling task running at 5ms
  12. We are using NXP S32k312 MCU with EB autosar stack

Regards,

Anitha

Ulysses HERNIOSUS
ST Technical Moderator
August 28, 2026

Hi Anitha,

it is expected if you call rfalNfcWorker() less frequently then it will take more time to perform the same NFC transactions. 

There are ways to improve:

  1. Increase the frequency (you are already trying)
  2. Increase the number of calls (e.g. do rfalNfcWorker();rfalNfcWorker();rfalNfcWorker();) instead of just a single call. Of course this will increase the time spent each execution of the NFC thread.
  3. Do something more sophisticated: Dynamically find out in which state the NFC is and whether it needs more or less call. Some reference can be found in our linux packages: STSW-ST25R024 for ST25R300 ( not sure STSW-ST25R013 if it contains these codes already).

BR, Ulysses