Your interpretation and measurements are both correct – PERS_RX does not override the RX timeout:
A finite RX timeout (your TIMERS5/TIMERS4 = 0x10 / 0x80) will always stop RX when it expires, regardless of PERS_RX. When the timer elapses with no valid packet, the S2‑LP asserts the RX timeout interrupt, discards the data and goes back to READY. This is exactly what you observed and it is expected behaviour.
PERS_RX only affects what happens after a packet event:
- with PERS_RX = 0, after a successful receive the state machine may move to another state (READY, SLEEP, TX for ACK, etc.), depending on the protocol configuration (especially in STack mode)
- with PERS_RX = 1, after a successful receive the device will remain in RX / return to RX, instead of staying in that other state - as long as nothing else (timeout or explicit command) forces it out of RX.
So your persistent RX with TIMERS5/TIMERS4 = 0x01/0x00 comes simply from the infinite RX timeout; RX is never stopped by the timer, and it stays active until a packet or a command terminates it. PERS_RX does not extend RX beyond a finite timeout; it only prevents the protocol state machine from leaving RX after a packet event in situations where it would normally move to another state (e.g. READY or TX‑ACK), especially in STack protocol mode.
Regards
/Peter
In order to give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.