This project showcases a Tx-only application using RAIL to transmit burst duty cycle packets without gaps. Each burst packet contains timestamp information for a scheduled data packet, allowing a receiver to wake up at the right time upon receiving any burst. This approach improves efficiency by enabling precise synchronization while minimizing power consumption.
To get more information about the topic of low duty cycle, read our related article.
Important
This application lacks error handling and other critical features for readability. It is intended solely for educational purposes and is not recommended as a foundation for development.
SiSDK 2025.6.0 and above
EFR32 Series 2
Connect two Development Kits to your PC.
| Board ID | Description |
|---|---|
| BRD4182A | EFR32xG22 2.4 GHz 6 dBm Radio Board |
| BRD4204D | EFR32ZG23 868-915 MHz 14 dBm Radio Board |
| BRD4187C | EFR32xG24 Wireless 2.4 GHz +20 dBm Radio Board |
| BRD4270B | EFR32FG25 902-928 MHz +16 dBm Radio Board |
| BRD4194A | EFR32xG27 Wireless 2.4 GHz +8 dBm Radio Board |
| BRD4401C | EFR32xG28 868/915 MHz 20 dBm + 2.4 GHz 10 dBm Radio Board |
- Generate Project with Simplicity Studio v5 or with SLC CLI.
- Adjust parameters detailed in the Configuration section below.
- Build and flash the project on a board.
This project demonstrates how to transmit burst duty cycle packets with timestamping information of a data packet with RAIL. The example uses two packet types: the burst packet - which is repeated over and over with a minimal change in the payload that contains the timestamp information when the data packet is expected, and the data packet itself. To use this application you need two nodes, one with the transmitter and one with the receiver program.
This program provides information via the terminal, including success status of a transmission sequence and instruction to operate the application.
Note, that this is not a DMP (Dynamic Multiprotocol) project! The functional part of the code is separated to make sure that it can be used in DMP projects if needed.
SL_ADVANCED_BURST_DC_TRANSMITTER_DATA_PAYLOAD_LENis a variable used to define the payload length for transmission in the anchored data frame. With this value, the size of data_frame_t must be smaller thanSL_ADVANCED_BURST_DC_TRANSMITTER_BUFFER_LENGTH. The length of the Tx buffer should be set according to the radio configuration using this parameter. TheSL_ADVANCED_BURST_DC_TRANSMITTER_DEFAULT_CHANNELparameter determines the index of the channel that is used for packet transmission (see available channels in the radio_settings.radioconf file of the project). The CRC polynomial used can be configured withSL_ADVANCED_BURST_DC_TRANSMITTER_CRC_POLYNOMIALand the CRC seed withSL_ADVANCED_BURST_DC_TRANSMITTER_CRC_SEED. Although no DMP is used in this example, the rail_packet_streamer supports this functionality, so the parameters can be configured withSL_ADVANCED_BURST_DC_TRANSMITTER_DMP_PRIORITYandSL_ADVANCED_BURST_DC_TRANSMITTER_DMP_SLIPTIME_US. The preamble properties can be changed bySL_ADVANCED_BURST_DC_TRANSMITTER_PREAMBLE_PATTERN,SL_ADVANCED_BURST_DC_TRANSMITTER_PREAMBLE_LENandSL_ADVANCED_BURST_DC_TRANSMITTER_PREAMBLE_PATT_LEN. The timestamp of the data packet can be configured bySL_ADVANCED_BURST_DC_TRANSMITTER_ANCHOR_DELAY_US, which is the amount on time in microseconds between the end of the burst packets and the start of the data packet. This delay can be calibrated withSL_ADVANCED_BURST_DC_TRANSMITTER_SCHEDULE_DELAY_US. The length of the burst is determined bySL_ADVANCED_BURST_DC_TRANSMITTER_BURST_LEN_MS.
To initiate a transmission sequence, you need to press the BTN0 button.
The application utilizes the default EUSART instance for CLI communication and console logging. The VCOM enable signal is pre-configured for the tested boards.
You may want to adjust the EUSART (VCOM) configurations according to the board you are using.
It also uses the GPCRC peripheral to be able to add CRC values to the Tx frame. The CRC parameters can be configured with the related macros in the config file, so the radio configurator values are ignored.
Additional project-specific configurations can be found in the
<project_root>/config/sl_rail_advanced_burst_dc_transmitter_config.h file.
These configurations are not currently accessible through the UI as component
settings, so you will need to modify them manually using a text editor or IDE.
Payload length in bytes of the data message inside data_frame_t. The minimum length is 16 as the app uses a fixed 16 lengh payload for the data message.
Sets Tx Buffer length in bytes.
Set the index of the default channel used to transmit.
- Only configured channel index can be used (see available channels in the radio_settings.radioconf file of the project).
The used CRC polynomial value. To calculate this see GPCRC module.
The initial value for the CRC calculation.
DMP priority to use for wakeup Tx. 0 is highest priority.
Allowed delay to start a wakeup transmission, to help RAIL scheduler to schedule the protocols. In microseconds.
Set the preamble pattern to use. This should match Preamble Base Pattern field configured on the Radio Config GUI
Length of the preamble pattern in bits.
Length of the preamble pattern in bits that is sufficient on most PHYs.
Anchor delay after the burst packets. Minimum is the rail state transition time (minimum value is around 300).
Measured delay of scheduled transmissions. I.e., it should be scheduled this amount earlier
The length of the wakeup (burst) transmission time.