In the RX_AACK operating mode, described in section 7.2.3 (RX_AACK_ON Receive with Automatic ACK) of the AT86RF231 datasheet, incoming frames pass the address filter and are checked for a valid FCS. If the received frame passes these checks, the TRX_IRQ_TRX_END interrupt is generated at the end of the received frame and an optional required acknowledgement frame is transmitted.
This section describes how the parameters for the Extended Operating Mode are configured and how frames are received in the RX_AACK mode.
| coord | This bit specifies, whether the radio transceiver is operated as PAN coordinator {1} or as device {0}. | |
| slmode | This bit specifies, whether the radio transceiver is operated in slotted {1} or unslotted {0} operation mode, as described in PHY_DATA_INDICATION_RX_AACK_SLOTTED. | |
| pending_data | This bit specifies, whether the device has pending data. During generation of an acknowledgment, the radio transceiver will copy this bit into the frame pending subfield of the frame control field in response to a data request MAC command. |
| tracstat | Result of a RX_AACK transaction from sub register SR_TRAC_STATUS :
|
/* AT86RF231::[CONFIG] */ trx_bit_write(SR_AACK_I_AM_COORD, coord); trx_bit_write(SR_SLOTTED_OPERATION, slmode);
/* AT86RF231::[ACTIVE] */ trx_bit_write(SR_AACK_SET_PD, pending_data);
/* AT86RF231::BUSY_RX_AACK */ /* TRX_IRQ_AMI occurs here */ frm = trx_frame_read_blm(); /* TRX_IRQ_TRX_END occurs here */ proc_frm(frm); trx_bit_write(SR_AACK_SET_PD, pending_data);
The transmission of the ACK frame starts tWaitAck after the end of the frame reception. The complete ACK frame is on air after tAckDone.
The internal timing for the ACK frame processing in RX_AACK mode is shown below:
== RX ==:======================= TX =========================:======= RX =======
0 12 34 time [symbols]
+---| |---+---+---+---+---+---+---+---+---+---+---|
--| F |---------| Preamble |SFD|PHR| ACK frame |------------------>
+---| |---+---+---+---+---+---+---+---+---+---+---|
| | |
t0 t1 t2
/* AT86RF231::RX_AACK_ON && AT86RF231::BUSY_RX_AACK */ delay(tFrame); tracstat = trx_bit_read(SR_TRAC_STATUS); frm = trx_frame_read(); /* AT86RF231::RX_AACK_ON */
The result of a RX_AACK transaction is stored in the sub register SR_TRAC_STATUS after the TRX_IRQ_TRX_END interrupt.
The internal timing for the ACK frame processing in RX_AACK mode is shown below:
== RX ==:== IDLE ==:=================== TX ====================:======== RX =======
0 tack 22+tack time [symbols]
+---| |---+---+---+---+---+---+---+---+---+---+---|
--| F |----|------| Preamble |SFD|PHR| ACK frame |------------------>
+---| |---+---+---+---+---+---+---+---+---+---+---|
| | | |
t0a t1a t2a t3a
/* AT86RF231::RX_AACK_ON && AT86RF231::BUSY_RX_AACK */ delay(tFrame); tracstat = trx_bit_read(SR_TRAC_STATUS); ASSERT(tracstat==SUCCESS_WAIT_FOR_ACK); trx_pinset_slptr(1); trx_pinset_slptr(0); frm = trx_frame_read(); /* AT86RF231::RX_AACK_ON */
1.5.2