I'm experiencing a non-deterministic but ultimately repeatable issue with the CC1352P:
Use case:
- CC1352P enters RF receive after power up (and remains in an RF receive state until canceled using RF_cancelCmd())
- all RF packets are processed by the CC1352P upon receipt when the callback function is called
- when the CC1352P has an RF packet to transmit the RF receive command is canceled using RF_cancelCmd()
- when the CC1352P completes the RF transmit, the CC1352P reenters RF receive
- this process repeats in perpetuity
Problem statement:
At some non-predictable point during execution, some time after entering RF receive and while waiting for a RF packet to be received the callback is called unexpectedly. No RF packet is indicated by the RF event mask. Instead, the rfEvtMask variable is set to RF_EventLastCmdDone (indicating the RF receive command is done). Shortly thereafter the RF receive command is removed from the RF command queue by the RF core finite state machine.
At this point, every RF receive command posted ends with the same result: RF receive is entered in the command queue (with an allocated channel index returned), the command callback is called with RF_EventLastCmdDone as the event mask, and then the RF receive command is removed from the command queue. This process is not aborted or canceled by user firmware, and breakpoints and callback stack trace confirm that is true. No longer are RF packets received until the CC1352P is reset. Once the reset occurs, expected operation continues until the problem reemerges.
Why does this behavior happen? Is it documented somewhere in the RF core documentation? What can I do to cause intended execution?