RAILtest Script to Use Mode Switch#
Before using the Mode Switch PPDU, reading Getting Started with Wi-SUN PHY Configuration is recommended. This is available on the Wi-SUN site in https://docs.silabs.com/.
The trigModeSwitchTx RAILtest CLI Command#
The SiSDK provides a new RAILtest CLI command, trigModeSwitchTx
, to manage the Mode switch PPDU in Tx. After some RAIL initialization, this command sends the Mode Switch PPDU with the specified PHR to inform the Rx nodes to switch to the new PhyModeID.
> help trigModeSwitchTx
trigModeSwitchTx Transmit a Mode Switch packet then transmit packets on the new PHY with current
TX options. Depending on modeSwitchLife configuration, after all iterations are
done, it either stays on the new PHY or returns to the base PHY.
[uint8] new PhyModeId, i.e. ID of the PHYMode we are switching to
[uint8] number of packets transmitted on the new PHY
[uint32opt] number of times the sequence mode switch packet followed by data
packets is repeated, default is 1 if argument is absent
[uint32opt] delayMilliseconds before switching back to base PHY after all packets
have been transmitted on the new PHY, default is 0 if argument is absent.
Multitimer is used for delay greater than 0.
> help modeSwitchLife
modeSwitchLife Return to the base PHY after all data packets transmitted for TX or after
MODE_SWITCH_START event and multitimer expiration after first data packet
reception on new phy for RX.
[uint8] 0=stay on new PHY (normal Wi-SUN FAN behaviour)
1=return to base PHY (special test mode)
With trigModeSwitchTx
, the CCA checking after the Mode switch PPDU is not implemented. To add it, call setlbtmode csma
and setlbtparams 0 0 1 -80 0 160 0
before calling trigModeSwitchTx
. After the Mode Switch PPDU, the data frame must be transmitted within a maximum delay of 1.5 ms, as per the specification.
Notes: The two last optional fields in
trigModeSwitchTx
and themodeSwitchLife
command are only useful for test purposes.The Mode Switch PPDU is transmitted in broadcast manner. Therefore, there is no MAC address filtering, and all receivers are impacted.
Mode Switch PPDU Snapshot in Zero Span Spectrum#
The following shows a Mode Switch example from FSK to another FSK PhyModeID with CSMA-CA enabled, and illustrates the timing of frames during PhyModeID switch:
The following illustrates a Mode Switch from FSK to OFDM PhyModeID with CSMA-CA enabled.
Note: After the Mode Switch PPDU, the data frame might use another carrier frequency. The resolution bandwidth (RBW) of the spectrum analyzer should be set according to this new frequency, so that zero span can detect the data frame transmitted.
FSK and OFDM Channel-Based Multi-PHY: IR Calibration Initialization#
For FSK or OFDM PHY (during initialization), after a setchannel
on the corresponding PHY, an rx 1
or tx 1
command is required to perform the calibration. When using multiple PHYs including an OFDM PhyModeID, an IR calibration for OFDM must be performed. Silicon Labs strongly recommends loading one OFDM PHY (during initialization) using the RAILtest CLI commands setchannel
on the corresponding OFDM channel and rx 1
to perform the calibration. Once image rejection calibration has been performed with a Wi-SUN OFDM PHY, you do not need to do it with a Wi-SUN FSK PHY.
Script Example#
This section presents a complete example showing how to configure and send the Mode Switch with the EFR32FG25 radio using the RAILtest application. It assumes the EFR32FG25 is flashed with an image with a Wi-SUN Mode Switch configuration.
The following steps are required:
For all PA selected in the channel-based multi-PHY, the initialization should be done (only required once at initialization with FSK PA configuration before the OFDM PA configuration).
Set up the PA configuration.
Set the recommended PA level (check the maximum level depending on the radio board, 16 dBm for EFR32FG25).
If IR calibration is enabled including an OFDM PhyModeID, then call
setchannel OFDM_base_channel
for IR calibration (see previous section).Mode Switch RAIL initialization must be done in Tx and Rx:
Enable802154 rx 110 192 672 0
: Enable RAIL 802.15.4 management (needed to get Mode Switch enabled in RAIL). Note the timing parameters provided are for ACK management. This is not used in mode switch PPDU. Before calling this command, radio should be in idle mode.setRxOptions 4
: Enable DUALSYNC in Tx and Rx in case of FSK FEC usage in the channel-based multi-PHY.set802154g 7
: Enable Mode Switch and dynamic FEC, which are required for Mode Switch. Before calling this command, a FSK PHY should be selected.setPromiscuousMode 1
: Avoid MAC filtering on packet received.setTxdelay 10
: Set 10 ms between data frames.setTxLength 63
: Set the data frame length. This could be another frame length value. Remember to callset802154Phr
after a newsetTxLength
. Note that FSK frame length corresponds to setTxLength value -2 and that OFDM frame length corresponds to setTxLength value -4.resetCounters
: Reset the status counters.
setEventConfig 0x0 0x0 24576 24576
andprintEvents 0x0 24576
: In Rx, Mode Switch events are enabled and printed. The RAIL_EVENT_IEEE802154_MODESWITCH_START event occurs on Mode Switch PPDU reception. The RAIL_EVENT_IEEE802154_MODESWITCH_END event occurs in the following cases:A timeout when no data packet is received after the mode switch packet (or if the packet is received too late)
A CRC error
A bad MAC address on the data packet received after the mode switch packet. With
setPromiscuousMode 1
, there is no MAC address filtering.
Set802154phr
: Uses different parameters between FSK and OFDM frame, as described in QSG181: Silicon Labs Wi-SUN Quick-Start Guide. To switch on OFDM PHY,Set802154phr
should be set with the selected MCS. The new PhyModeID set intrigModeSwitchTx
selects only the OFDM option.trigModeSwitchTx
: set the new PhyModeID and the number of data frames to transmit.
These steps result in the following script:
# PA configuration/init (to do only one time to switch with correct PA from FSK to OFDM)
# and IR calibration using OFDM option and channel common to all regions (20489)
# and selection of FSK PHY channel (512) before calling set802154g
> rx 0
> setchannel 512
> rx 1
> rx 0
> setpowerconfig RAIL_TX_POWER_MODE_SUBGIG_POWERSETTING_TABLE 3600 10
> setpower 140
> setchannel 512
> rx 1
> rx 0
> setchannel 20489
> rx 1
> rx 0
> setpowerconfig RAIL_TX_POWER_MODE_OFDM_PA_POWERSETTING_TABLE 3600 10
> setpower 140
> setchannel 20489
> rx 1
> setchannel 512
> rx 1
# Mode Switch RAIL initialization for Mode Switch
> rx 0
> enable802154 rx 110 192 672 0
> setRxOptions 4
> set802154g 7
> rx 1
> setPromiscuousMode 1
> setTxDelay 10
> setTxLength 63
> resetCounters
# Only on Rx side: enable Mode Switch events:
# RAIL_EVENT_IEEE802154_MODESWITCH_START and RAIL_EVENT_IEEE802154_MODESWITCH_END
> setEventConfig 0x0 0x0 24576 24576
> printEvents 0x0 24576
# Only on Tx side to switch to FSK PHY: FSK PHR + trigModeSwitchTx
# with one packet sent with FSK PhyModId=3
> Set802154phr 1 0 1
> trigModeSwitchTx 3 1
# Only in Tx side to switch to OFDM PHY: one packet sent with OFDM PHR MCS4 and OFDM PhyModeID 80
> Set802154phr 2 4 0
> trigModeSwitchTx 80 1
# After Mode Switch step we should come back to FSK base channel in Tx and Rx side with:
> setchannel 512
Note: More details on RAILtest commands can be found in UG409: RAILtest User's Guide.
A Complete FSK-to-FSK Mode Switch Example in NA region#
> rx 0
{{(rx)}{Rx:Disabled}{Idle:Enabled}{Time:1516549207}}
>> setchannel 512
{{(setchannel)}{channel:512}}
> rx 1
{{(rx)}{Rx:Enabled}{Idle:Disabled}{Time:1516862048}}
> rx 0
{{(rx)}{Rx:Disabled}{Idle:Enabled}{Time:1517030918}}
> setpowerconfig RAIL_TX_POWER_MODE_SUBGIG_POWERSETTING_TABLE 3600 10
{{(setpowerconfig)}{success:true}{mode:RAIL_TX_POWER_MODE_SUBGIG_POWERSETTING_TABLE}{modeIndex:0}{voltage:3600}{rampTime:7}}
> setpower 140
{{(setpower)}{powerLevel:70}{power:140}}
> setchannel 512
{{(setchannel)}{channel:512}}> rx 1
{{(rx)}{Rx:Enabled}{Idle:Disabled}{Time:1517474858}}
> rx 0
{{(rx)}{Rx:Disabled}{Idle:Enabled}{Time:1519142526}}
> enable802154 rx 110 192 672 0
{{(enable802154)}{802.15.4:Enabled}{rxDefaultState:Rx}{txDefaultState:Rx}{idleTiming:110}
{turnaroundTime:192}{ackTimeout:672}{defaultFramePending:False}}
> setRxOptions 4
{{(setRxOptions)}{storeCrc:False}{ignoreCrcErrors:False}{enableDualSync:True}{trackAborted:False}
{removeAppendedInfo:False}{rxAntenna:Any}{frameDet:On}}
> set802154g 7
{{(set802154g)}{15.4G_GB868:True}{15.4G_DynamicFEC:True}{Wi-SUN_ModeSwitch:True}}
> rx 1
{{(rx)}{Rx:Enabled}{Idle:Disabled}{Time:1519819463}}
> setPromiscuousMode 1
{{(setPromiscuousMode)}{PromiscuousMode:Enabled}}
> setTxDelay 10
{{(setTxDelay)}{txDelay:10}}
> setTxLength 63
{{(setTxLength)}{TxLength:63}{TxLength Written:63}}
> resetCounters
{{(resetCounters)}{UserTxCount:0}{AckTxCount:0}{UserTxAborted:0}{AckTxAborted:0}{UserTxBlocked:0}
{AckTxBlocked:0}{UserTxUnderflow:0}{AckTxUnderflow:0}{RxCount:0}{RxCrcErrDrop:0}{SyncDetect:0}
{NoRxBuffer:0}{TxRemainErrs:0}{RfSensed:0}{ackTimeout:0}{ackTxFpSet:0}{ackTxFpFail:0}
{ackTxFpAddrFail:0}{RfState:Rx}{RAIL_state_active:0}{RAIL_state_rx:1}{RAIL_state_tx:0}{Channel:512}
{AppMode:None}{TimingLost:0}{TimingDetect:0}{FrameErrors:0}{RxFifoFull:0}{RxOverflow:0}
{AddrFilt:0}{Aborted:0}{RxBeams:0}{DataRequests:0}{Calibrations:0}{TxChannelBusy:0}{TxClear:0}
{TxCca:0}{TxRetry:0}{UserTxStarted:0}{PaProtect:0}{SubPhy0:0}{SubPhy1:0}{SubPhy2:0}{SubPhy3:0}
{rxRawSourceBytes:0x000000000}}
Note that after a setchannel
, it is recommended to do “rx 1
” to get the PHY loaded.
The Mode Switch Rx events configuration:
> setEventConfig 0x0 0x0 24576 24576
{{(setEventConfig)}{Mask:0x600000000000}{Values:0x600000000000}}
> printEvents 0x0 24576
{{(printEvents)}{enablePrintEvents:0x600000000000}}
On the Tx side, the set802154phr
and trigModeSwitchTx
FSK usage to switch from mode 1b to mode 2a:
> Set802154phr 1 0 1
{{(Set802154phr)}{PhrSize:2}{PHR:0x8210}}
{{(Set802154phr)}{len:63}{payload: 0x10 0x82 0xb8 0x01 0x33 0x44 0x55 0x0f 0x77 0x88 0x99 0xaa 0xbb 0xcc 0xdd 0xee 0x10 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x1e 0x1f 0x20 0x21 0x22 0x23 0x24 0x25 0x26 0x27 0x28 0x29 0x2a 0x2b 0x2c 0x2d 0x2e 0x2f 0x30 0x31 0x32 0x33 0x34 0x35 0x36 0x37 0x38 0x39 0x3a 0x3b 0x3c 0x3d 0x3e}}
> trigModeSwitchTx 3 1
{{(txModeSwitch)}{PacketTx:Enabled}{None:Disabled}{Time:1522467866}}
{{(modeSwitchChangeChannel)}{channel:768}}
{{(appMode)}{None:Enabled}{PacketTx:Disabled}{Time:1522482020}}
{{(txEnd)}{txStatus:Complete}{transmitted:1}{lastTxTime:1522481935}{timePos:6}{lastTxStart:1522475758}{ccaSuccess:2}{failed:0}{lastTxStatus:0x000000000}{txRemain:0}{isAck:False}}
> status
{{(status)}{UserTxCount:2}{AckTxCount:0}{UserTxAborted:0}{AckTxAborted:0}{UserTxBlocked:0}
{AckTxBlocked:0}{UserTxUnderflow:0}{AckTxUnderflow:0}{RxCount:0}{RxCrcErrDrop:0}{SyncDetect:0}
{NoRxBuffer:0}{TxRemainErrs:0}{RfSensed:0}{ackTimeout:0}{ackTxFpSet:0}{ackTxFpFail:0}
{ackTxFpAddrFail:0}{RfState:Rx}{RAIL_state_active:0}{RAIL_state_rx:1}{RAIL_state_tx:0}{Channel:768}
{AppMode:None}{TimingLost:0}{TimingDetect:0}{FrameErrors:0}{RxFifoFull:0}{RxOverflow:0}{AddrFilt:0}
{Aborted:0}{RxBeams:0}{DataRequests:0}{Calibrations:0}{TxChannelBusy:0}{TxClear:2}{TxCca:2}
{TxRetry:0}{UserTxStarted:2}{PaProtect:0}{SubPhy0:0}{SubPhy1:0}{SubPhy2:0}{SubPhy3:0}
{rxRawSourceBytes:0x000000000}}
On the Rx side, the expected event and the Rx frame are returned:
{{(event)}{timestamp:2942451808}{eventName:RAIL_EVENT_IEEE802154_MODESWITCH_START}}
{{(rxPacket)}{len:63}{timeUs:2942453545}{timePos:5}{crc:Pass}{filterMask:0x0}{rssi:-8}{lqi:255}
{phy:0}{isAck:False}{syncWordId:0}{antenna:0}{channelHopIdx:254}{channel:768}{ed154:255}
{lqi154:255}{payload: 0x10 0x82 0xb8 0x01 0x33 0x44 0x55 0x0f 0x77 0x88 0x99 0xaa 0xbb 0xcc 0xdd 0xee 0x10 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x1e 0x1f 0x20 0x21 0x22 0x23 0x24 0x25 0x26 0x27 0x28 0x29 0x2a 0x2b 0x2c 0x2d 0x2e 0x2f 0x30 0x31 0x32 0x33 0x34 0x35 0x36 0x37 0x38 0x39 0x3a 0x3b 0x3c 0x3d 0x3e}}
> status
{{(status)}{UserTxCount:0}{AckTxCount:0}{UserTxAborted:0}{AckTxAborted:0}{UserTxBlocked:0}
{AckTxBlocked:0}{UserTxUnderflow:0}{AckTxUnderflow:0}{RxCount:1}{RxCrcErrDrop:0}{SyncDetect:2}
{NoRxBuffer:0}{TxRemainErrs:0}{RfSensed:0}{ackTimeout:0}{ackTxFpSet:0}{ackTxFpFail:0}{ackTxFpAddrFail:0}{RfState:Rx}{RAIL_state_active:0}{RAIL_state_rx:1}{RAIL_state_tx:0}{Channel:768}{AppMode:None}{TimingLost:0}{TimingDetect:0}{FrameErrors:0}{RxFifoFull:0}{RxOverflow:0}{AddrFilt:0}{Aborted:0}{RxBeams:0}{DataRequests:0}{Calibrations:1}{TxChannelBusy:0}{TxClear:0}
{TxCca:0}{TxRetry:0}{UserTxStarted:1}{PaProtect:0}{SubPhy0:9}{SubPhy1:0}{SubPhy2:0}{SubPhy3:0}
{rxRawSourceBytes:0x000000000}}
Notes:
In Rx status, there are two SyncDetect frames corresponding to Mode Switch PPDU plus the data frame using the new PhyModeID. There is only one Rxcount frame corresponding to the data frame received. The channel is also changed to 768, which is expected.
After a Mode Switch PPDU, RAIL does not come back automatically to the FSK base PHY. In the example above,
setchannel 512
must be used to return to the base FSK, before a potential switch to another PHY.
A Complete FSK-to-OFDM Mode Switch Example in NA Region#
This example shows the initialization of the two PAs and the Mode Switch in RAIL with returned console messages:
> rx 0
{{(rx)}{Rx:Disabled}{Idle:Enabled}{Time:1516549207}}
>> setchannel 512
{{(setchannel)}{channel:512}}
> rx 1
{{(rx)}{Rx:Enabled}{Idle:Disabled}{Time:1516862048}}
> rx 0
{{(rx)}{Rx:Disabled}{Idle:Enabled}{Time:1517030918}}
> setpowerconfig RAIL_TX_POWER_MODE_SUBGIG_POWERSETTING_TABLE 3600 10 {{(setpowerconfig)}{success:true}{mode:RAIL_TX_POWER_MODE_SUBGIG_POWERSETTING_TABLE}{modeIndex:0}{voltage:3600}{rampTime:7}}
> setpower 140
{{(setpower)}{powerLevel:70}{power:140}}
>> setchannel 512
{{(setchannel)}{channel:512}}
> rx 1
{{(rx)}{Rx:Enabled}{Idle:Disabled}{Time:1517474858}}
> rx 0
{{(rx)}{Rx:Disabled}{Idle:Enabled}{Time:1517611032}}
> setchannel 20489
{{(setchannel)}{channel:20489}}
> rx 1
{{(rx)}{Rx:Enabled}{Idle:Disabled}{Time:1517885057}}
> rx 0
{{(rx)}{Rx:Disabled}{Idle:Enabled}{Time:1518019524}}
> setpowerconfig RAIL_TX_POWER_MODE_OFDM_PA_POWERSETTING_TABLE 3600 10 {{(setpowerconfig)}{success:true}{mode:RAIL_TX_POWER_MODE_OFDM_PA_POWERSETTING_TABLE}{modeIndex:2}{voltage:3600}{rampTime:7}}
> setpower 140
{{(setpower)}{powerLevel:118}{power:135}}
> setchannel 20489
{{(setchannel)}{channel:20489}}
> rx 1
{{(rx)}{Rx:Enabled}{Idle:Disabled}{Time:1518471563}}
> setchannel 512
{{(setchannel)}{channel:512}}
> rx 1
{{(rx)}{Rx:Enabled}{Idle:Disabled}{Time:1518776089}}
> rx 0
{{(rx)}{Rx:Disabled}{Idle:Enabled}{Time:1519142526}}
> enable802154 rx 110 192 672 0
{{(enable802154)}{802.15.4:Enabled}{rxDefaultState:Rx}{txDefaultState:Rx}{idleTiming:110}
{turnaroundTime:192}{ackTimeout:672}{defaultFramePending:False}}
> setRxOptions 4
{{(setRxOptions)}{storeCrc:False}{ignoreCrcErrors:False}{enableDualSync:True}{trackAborted:False}
{removeAppendedInfo:False}{rxAntenna:Any}{frameDet:On}}
> set802154g 7
{{(set802154g)}{15.4G_GB868:True}{15.4G_DynamicFEC:True}{Wi-SUN_ModeSwitch:True}}
> rx 1
{{(rx)}{Rx:Enabled}{Idle:Disabled}{Time:1519819463}}
> setPromiscuousMode 1
{{(setPromiscuousMode)}{PromiscuousMode:Enabled}}
> setTxDelay 10
{{(setTxDelay)}{txDelay:10}}
> setTxLength 63
{{(setTxLength)}{TxLength:63}{TxLength Written:63}}
> resetCounters
{{(resetCounters)}{UserTxCount:0}{AckTxCount:0}{UserTxAborted:0}{AckTxAborted:0}{UserTxBlocked:0}
{AckTxBlocked:0}{UserTxUnderflow:0}{AckTxUnderflow:0}{RxCount:0}{RxCrcErrDrop:0}{SyncDetect:0}
{NoRxBuffer:0}{TxRemainErrs:0}{RfSensed:0}{ackTimeout:0}{ackTxFpSet:0}{ackTxFpFail:0}
{ackTxFpAddrFail:0}{RfState:Rx}{RAIL_state_active:0}{RAIL_state_rx:1}{RAIL_state_tx:0}{Channel:512}
{AppMode:None}{TimingLost:0}{TimingDetect:0}{FrameErrors:0}{RxFifoFull:0}{RxOverflow:0}
{AddrFilt:0}{Aborted:0}{RxBeams:0}{DataRequests:0}{Calibrations:0}{TxChannelBusy:0}{TxClear:0}
{TxCca:0}{TxRetry:0}{UserTxStarted:0}{PaProtect:0}{SubPhy0:0}{SubPhy1:0}{SubPhy2:0}{SubPhy3:0}{rxRawSourceBytes:0x000000000}}
Note that after a setchannel
it is recommended to do “rx 1
” to get the PHY loaded.
The Mode Switch Rx events configuration:
> setEventConfig 0x0 0x0 24576 24576
{{(setEventConfig)}{Mask:0x600000000000}{Values:0x600000000000}}
> printEvents 0x0 24576
{{(printEvents)}{enablePrintEvents:0x600000000000}}
On the Tx side, the set802154phr
OFDM and trigModeSwitchTx
from FSK to OFDM to switch from mode #1b to OFDM option 4 MCS4:
> Set802154phr 2 4 0
{{(Set802154phr)}{PhrSize:4}{PHR:0x1b80400}}
{{(Set802154phr)}{len:63}{payload: 0x00 0x04 0xb8 0x01 0x33 0x44 0x55 0x0f 0x77 0x88 0x99 0xaa 0xbb 0xcc 0xdd 0xee 0x10 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x1e 0x1f 0x20 0x21 0x22 0x23 0x24 0x25 0x26 0x27 0x28 0x29 0x2a 0x2b 0x2c 0x2d 0x2e 0x2f 0x30 0x31 0x32 0x33 0x34 0x35 0x36 0x37 0x38 0x39 0x3a 0x3b 0x3c 0x3d 0x3e}}
> trigModeSwitchTx 80 1
{{(txModeSwitch)}{PacketTx:Enabled}{None:Disabled}{Time:3925975352}}
{{(modeSwitchChangeChannel)}{channel:20480}}
{{(appMode)}{None:Enabled}{PacketTx:Disabled}{Time:3925988859}}
{{(txEnd)}{txStatus:Complete}{transmitted:1}{lastTxTime:3925988787}{timePos:6}
{lastTxStart:3925984019}{ccaSuccess:2}{failed:0}{lastTxStatus:0x000000000}{txRemain:0}
{isAck:False}}
> status
{{(status)}{UserTxCount:2}{AckTxCount:0}{UserTxAborted:0}{AckTxAborted:0}{UserTxBlocked:0}
{AckTxBlocked:0}{UserTxUnderflow:0}{AckTxUnderflow:0}{RxCount:0}{RxCrcErrDrop:0}{SyncDetect:0}
{NoRxBuffer:0}{TxRemainErrs:0}{RfSensed:0}{ackTimeout:0}{ackTxFpSet:0}{ackTxFpFail:0}
{ackTxFpAddrFail:0}{RfState:Rx}{RAIL_state_active:0}{RAIL_state_rx:1}{RAIL_state_tx:0}
{Channel:20480}{AppMode:None}{TimingLost:0}{TimingDetect:0}{FrameErrors:0}{RxFifoFull:0}
{RxOverflow:0}{AddrFilt:0}{Aborted:0}{RxBeams:0}{DataRequests:0}{Calibrations:0}{TxChannelBusy:0}
{TxClear:2}{TxCca:2}{TxRetry:0}{UserTxStarted:2}{PaProtect:0}{SubPhy0:0}{SubPhy1:0}{SubPhy2:0}
{SubPhy3:0}{rxRawSourceBytes:0x000000000}}
On the Rx side, the expected event and the Rx frame are returned {phy:4} for MCS4:
{{(event)}{timestamp:4285050697}{eventName:RAIL_EVENT_IEEE802154_MODESWITCH_START}}
{{(rxPacket)}{len:59}{timeUs:4285055046}{timePos:5}{crc:Pass}{filterMask:0x0}{rssi:-6}{lqi:203}{phy:4}{isAck:False}{syncWordId:0}{antenna:0}{channelHopIdx:254}{channel:20480}
{ed154:255}{lqi154:255}{payload: 0x03 0x04 0xb8 0x01 0x33 0x44 0x55 0x0f 0x77 0x88 0x99 0xaa 0xbb 0xcc 0xdd 0xee 0x10 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x1e 0x1f 0x20 0x21 0x22 0x23 0x24 0x25 0x26 0x27 0x28 0x29 0x2a 0x2b 0x2c 0x2d 0x2e 0x2f 0x30 0x31 0x32 0x33 0x34 0x35 0x36 0x37 0x38 0x39 0x3a}}
status
{{(status)}{UserTxCount:0}{AckTxCount:0}{UserTxAborted:0}{AckTxAborted:0}{UserTxBlocked:0}
{AckTxBlocked:0}{UserTxUnderflow:0}{AckTxUnderflow:0}{RxCount:1}{RxCrcErrDrop:0}{SyncDetect:2}
{NoRxBuffer:0}{TxRemainErrs:0}{RfSensed:0}{ackTimeout:0}{ackTxFpSet:0}{ackTxFpFail:0}
{ackTxFpAddrFail:0}{RfState:Rx}{RAIL_state_active:0}{RAIL_state_rx:1}{RAIL_state_tx:0}
{Channel:20480}{AppMode:None}{TimingLost:0}{TimingDetect:0}{FrameErrors:0}{RxFifoFull:0}
{RxOverflow:0}{AddrFilt:0}{Aborted:0}{RxBeams:0}{DataRequests:0}{Calibrations:0}{TxChannelBusy:0}
{TxClear:0}{TxCca:0}{TxRetry:0}{UserTxStarted:0}{PaProtect:0}{SubPhy0:0}{SubPhy1:0}{SubPhy2:0}
{SubPhy3:0}{rxRawSourceBytes:0x000000000}}
Notes:
In Rx status, there are two SyncDetect frames corresponding to Mode Switch PPDU plus the data frame using the new PhyModeID. There is only one Rxcount frame corresponding to the data frame received. The channel is also changed to 20480, which is expected with {phy:4} for MCS4.
After a Mode Switch PPDU, RAIL does not come back automatically to the FSK base PHY. In the example above,
setchannel 512
must be used to return to the base FSK, before a potential switch to another PHY.