Transitions to State TRX_OFF [08]

This section describes how the state TRX_OFF is entered. There are mainly two commands how to get into this state.

  1. Writing CMD_TRX_OFF to sub register SR_TRX_CMD causes a "delayed" transition. That means, if the radio transceiver is in one of the [BUSY] states, the ongoing transaction is finished before the state change occurs.
  2. Writing CMD_FORCE_TRX_OFF to sub register SR_TRX_CMD causes an immediate transition. In this case, any ongoing transaction in one of the [BUSY] states is canceled and the state change is done.


PHY_STATE_[PLL_ACTIVE]__TRX_OFF

inline_mscgraph_24
Code example
    trx_bit_write(SR_TRX_CMD, CMD_TRX_OFF);
    delay_us(1);
    trxstat = trx_bit_read(SR_TRX_STATUS);
    ASSERT(trxstat==TRX_OFF);

PHY_STATE_[BUSY]__TRX_OFF

If the command CMD_TRX_OFF is written to the sub register SR_TRX_CMD and the radio transceiver is in one of the [BUSY] states, the ongoing transmit or receive transaction is completed and the state change to TRX_OFF occurs with the TRX_IRQ_TRX_END interrupt.

inline_mscgraph_25
Code example
    trx_bit_write(SR_TRX_CMD, CMD_TRX_OFF);
    /* TRX_IRQ_TRX_END occurs here */
    trxstat = trx_bit_read(SR_TRX_STATUS);
    ASSERT(trxstat==TRX_OFF);

PHY_STATE_(BUSY_RX_AACK_NOMATCH)__TRX_OFF

The pseudo state (BUSY_RX_AACK_NOMATCH) means, that the radio transceiver is in the state BUSY_RX_AACK and no TRX_IRQ_TRX_END occurs, because the address filter does not match or the FCS is wrong. In this case, the state TRX_OFF is reached up to 4256 us after the state request. To avoid the long timeout, it is recommended that the software polls the sub register SR_TRX_STATUS or use the CMD_FORCE_TRX_OFF instead (see PHY_FORCE_[ACTIVE]__TRX_OFF).

inline_mscgraph_26
Code example
    trx_bit_write(SR_TRX_CMD, TRX_OFF);
    delay_us(4256);
    trxstat = trx_bit_read(SR_TRX_STATUS);
    ASSERT(trxstat==TRX_OFF);

PHY_FORCE_[ACTIVE]__TRX_OFF

Writing CMD_FORCE_TRX_OFF to sub register SR_TRX_CMD in any of the [ACTIVE] states cancels any ongoing transmit or receive transcation and switches the radio transceiver within 1 us to state TRX_OFF.

inline_mscgraph_27
Code example
    trx_bit_write(SR_TRX_CMD, CMD_FORCE_TRX_OFF);
    delay_us(1);
    trxstat = trx_bit_read(SR_TRX_STATUS);
    ASSERT(trxstat==TRX_OFF);

Generated on Fri Aug 10 16:10:04 2007 for SWPM AT86RF230 Rev. A by  doxygen 1.5.2