ST25R100: autonomous WU_MEASUREMENT never emits RF, but manual CALIBRATE_WU_MEASUREMENT does
Setup
-
Board: X-NUCLEO-NFC09A1 (ST25R100), brand new, unmodified, no jumpers/solder bridges changed
-
Host: STM32, custom C++17 driver (register-level, not RFAL)
-
SPI: confirmed working — bring-up sequence completes, all register reads/writes verified against DS14139 Rev 4
Symptom
The autonomous wake-up measurement cycle (triggered internally by the WUT every wut period) never emits any RF onto RFO1/RFO2, confirmed directly on an oscilloscope. However, the CALIBRATE_WU_MEASUREMENT direct command (0x74), issued manually once during bring-up, reliably emits a real RF burst every time (5 sub-pulses of ~26 µs each, ~130 µs total).
This has been reproduced consistently across many test runs, with the following independently confirmed facts:
-
wu_enis set and read back correctly (OPERATION= 0x01). -
The WU timer itself is confirmed running: with
wuti(WU_CONTROL_1 bit 3) set,I_wutfires reliably inIRQ_STATUS_3on schedule, tested at bothwut= 77.3 ms andwut= 9.7 ms. -
IRQ_MASK_3correctly unmasksM_wui/M_wuq. -
The physical IRQ pin → GPIO → ISR chain is confirmed working end-to-end (verified via a heartbeat counter incrementing on every notified
IRQ_STATUS_3read). -
WU_I_CALIBRATION/WU_Q_CALIBRATION(0x2E/0x33) read back non-zero, real values (e.g. 0x4C/0xA0) afterCALIBRATE_WU_MEASUREMENT— confirming the analog path is functional when driven manually. -
WU_I_ADC/WU_Q_ADC/WU_I_REFERENCE/WU_Q_REFERENCE(0x2C/0x31/0x2D/0x32) remain exactly 0x00 in every autonomous-cycle read, regardless of card presence, both with a card held directly against the antenna and without. -
RX_ANALOG_2afe_gain_td<3:0>set to maximum (0x0 → 26 dB) — no change. -
WU_CONTROL_2measurement pulse length (td_mf/td_mt<1:0>) set to maximum (43.7 µs) — no change. -
ADJUST_REGULATORSissued during bring-up before any WU configuration — no change. -
skip_cal(WU_CONTROL_2 bit 6) tried both set and cleared (i.e. with and without the chip's own automatic first-WUT calibration) — no change. -
GENERAL_CONFIGsinglebit left at 0 (differential antenna driving), matching the X-NUCLEO-NFC09A1 schematic (RFO1/RFO2 both routed to the matching network). -
IC_IDENTITY(0x3F) reads a plausible, stable, non-zero value on every bring-up — chip is alive and responsive on SPI. -
Directly probing
performIqMeasurement()(IQ_MEASUREMENT, 0x7A) withtx_en/rx_enexplicitly forced on beforehand: still 0x00/0x00. -
SENSE_RF(0x7C) result register (Display 3,rf_ind<6:0>): 0x00. -
Holding
tx_en/rx_enon continuously for 60 s with no measurement command involved at all (holdFieldOn()): oscilloscope shows nothing on RFO1/RFO2 for the whole window. -
Oscilloscope in free-running/high-persistence mode, 5–10 s capture windows, at both
wut= 77.3 ms andwut= 9.7 ms: RF is visible only during the initialCALIBRATE_WU_MEASUREMENTburst at bring-up, never during any subsequent autonomous cycle.
Question
CALIBRATE_WU_MEASUREMENT and the autonomous WU_MEASUREMENT cycle are documented as sharing the same underlying "temporarily enable → RF pulse → measure" mechanism (AN5993). Given the above, they appear to behave very differently on this device: the manual calibration command reliably drives RF (with a fixed ~130 µs / 5×26 µs sweep independent of the configured td_mf/td_mt), while the autonomous per-wut measurement pulse never does, under any tested register configuration.
Is there a register, bit, or sequencing requirement — not covered in DS14139 Rev 4 or AN5993 — that specifically arms the autonomous measurement pulse, separately from wu_en and the WUT itself? Or is this expected/known behavior under some configuration we may be missing?
Happy to share full SPI logic-analyzer captures (bring-up sequence + register values) and oscilloscope captures on request.
