RAIL Changelist#


  • 747041: Fixed an issue on the EFR32xG23 and EFR32xG25 that could cause certain radio actions to delay for extended periods of time when the main core enters EM2 while the radio is still running.

  • 1077623: Added new RAIL_ZWAVE_OPTION_PROMISCUOUS_BEAM_MODE to trigger RAIL_EVENT_ZWAVE_BEAM on all beam frames.

  • 1077623: Added RAIL_ZWAVE_GetBeamHomeIdHash() to retrieve the beam frame's HomeIdHash when handling that event and made sure that the HomeIdHash byte is now present on PTI for Z-Wave beam frames even when NodeId does not match.

  • 1077623: Fixed an issue on EFR32ZG23 where multiple beam frames were lumped together on PTI as one large beam chain.

  • 1090512: Fixed an issue in the Power Amplifier (PA) Utility component where certain functions would attempt to use the RAIL_TX_POWER_MODE_2P4GIG_HIGHEST macro even though they didn't support it. This would result in undefined behavior previously, but will now correctly error.

  • 1090728: Fixed a possible RAIL_ASSERT_FAILED_UNEXPECTED_STATE_RX_FIFO issue on EFR32xG12 with RAIL_IEEE802154_G_OPTION_GB868 enabled for a FEC- capable PHY which can happen when aborting a packet at frame detection, for instance by idling the radio.

  • 1092769: Fixed an issue when using Dynamic Multiprotocol and BLE Coded PHYs where a transmit could underflow depending on what protocol was active when the PHY and syncword were loaded.

  • 1097152: Added RAIL_PacketTimeStamp_t::packetDurationUs field which is currently set only on EFR32xG25 for received OFDM packets.

  • 1103966: Fixed an unexpected Rx packet abort on the EFR32xG25 when using the Wi-SUN OFDM option4 MCS0 PHY.

  • 1105134: Fixed an issue when switching certain PHYs that could cause the first received packet to be reported as RAIL_RX_PACKET_READY_CRC_ERROR instead of RAIL_RX_PACKET_READY_SUCCESS. This issue could potentially impact EFR32xG22 and newer chips.

  • 1109574: Fixed an issue on EFR32xG22 and newer chips where a radio sequencer assert could cause the application to hang in an ISR rather than report the assert via RAILCb_AssertFailed().


  • 1068856: Corrected the sign of the frequency error reported by RAIL_GetRxFreqOffset() when using OFDM on the EFR32xG25 to match how this was handled for other modulations (e.g. Freq_error=current_freq- expected_freq).

  • 1074384: The RAIL_SetTune() and RAIL_GetTune() functions now use the CMU_HFXOCTuneSet() and CMU_HFXOCTuneGet() functions respectively on EFR32xG2x and newer devices.

  • 1077611: Fixed an issue on the EFR32xG25 that would cause a 40us porch before an OFDM TX.

  • 1082274: Fixed an issue on the EFR32xG22, EFR32xG23, EFR32xG24, and EFR32xG25 chips that could cause the chip to lock up if the application attempts to re-enter EM2 within ~10 us after wake-up and hits a <0.5 us timing window. If hit, this lockup requires a power on reset to restore normal operation to the chip.


  • 670716: The RAIL_ConfigRfSenseSelectiveOokWakeupPhy() will now return an error when run on the EFR32xG21 platform because this device cannot support the wakeup PHY.

  • 751910: Added HFXO temperature compensation in RAIL on platforms that support RAIL_SUPPORTS_HFXO_COMPENSATION. This feature can be configured with the new RAIL_ConfigHFXOCompensation() API. The user will also need to be sure to handle the new RAIL_EVENT_THERMISTOR_DONE event to trigger a call to RAIL_CalibrateHFXO to perform the compensation.

  • 765112: Added options in Protocol Utility to control whether Z-Wave, 802.15.4 2.4 GHz and Sub-GHz, and BLE are enabled so that the user can save space in their application by disabling unused protocols.

  • 843708: Moved function declarations from rail_features.h to rail.h to avoid a convoluted include dependency order.

  • 844325: Fixed RAIL_SetTxFifo() to properly return 0 (error) rather than 4096 for an undersized FIFO.

  • 845608: Fixed an issue with the RAIL_ConfigSyncWords API when using certain underlying demodulator hardware on EFR32xG2x parts.

  • 846240: Added a new API RAIL_ZWAVE_PerformIrcal to help perform an IR calibration across all the different PHYs used by a Z-Wave device.

  • 851150: Fixed an issue on EFR32xG2 series devices where the radio would trigger RAIL_ASSERT_SEQUENCER_FAULT when PTI is used and GPIO configuration is locked. GPIO configuration can only be locked when PTI is disabled. See RAIL_EnablePti() for further information.

  • 853682: Added 40MHz crystal support on EFR32xG24 devices to the Built-in PHYs for alternate HFXO frequencies component.

  • 855048: Updated the pa_customer_curve_fits.py helper script to accept floating point value for the maximum power argument, similar to the increment argument.

  • 857210: Added support in Coexistence Utility for configuring priority options when directional priority is enabled but no static priority GPIO is defined.

  • 857267: Fixed an issue when using the Coexistence Utility component with TX abort, the signal identifier feature and DMP.

  • 858567: Added support for IEEE 802.15.4 fast RX channel switching with the new RAIL_IEEE802154_ConfigRxChannelSwitching API on supported platforms (RAIL_IEEE802154_SupportsRxChannelSwitching). This feature allows us to simultaneously detect packets on any two 2.4GHz 802.15.4 channels with a slight reduction in overall sensitivity of the PHY.

  • 988492: Added support for the BGM220SC23HNA2 module.

  • 1015152: Fixed an issue on EFR32xG2x devices where RAIL_EVENT_RX_FIFO_ALMOST_FULL or RAIL_EVENT_TX_FIFO_ALMOST_EMPTY could trigger improperly when the event is enabled or the FIFO is reset.

  • 1017609: Fixed an issue where PTI appended information could be corrupted when RAIL_RX_OPTION_TRACK_ABORTED_FRAMES is in effect when RAIL_IDLE_FORCE_SHUTDOWN or RAIL_IDLE_FORCE_SHUTDOWN_CLEAR_FLAGS is used. Also clarified that RAIL_RX_OPTION_TRACK_ABORTED_FRAMES is not useful with coded PHYs.

  • 1019590: Fixed an issue when using the Coexistence Utility component with BLE where the sl_bt_system_get_counters() function would always return 0 for GRANT denied counts.

  • 1019794: Eliminated compiler warning in Initialization Utility component when few of its features are enabled.

  • 1022182: Added a new Thermal Protection feature, on platforms that support RAIL_SUPPORTS_THERMAL_PROTECTION, to track temperature and prevent transmits when the chip is too hot.

  • 1022692: Added new table based OFDM and FSK PAs for EFR32xG25 based devices. The output power of these can be modified through a new customer provided look-up table. Ask support or look for an updated app note on how to configure the values in this table for your board.

  • 1023016: Fixed an issue on EFR32xG22 and newer chips where waits in between radio activity would consume slightly more power than necessary after the first 13ms. This was especially noticeable when using RAIL_ConfigRxDutyCycle with large off time values.

  • 1024294: Removed support for the deprecated BGX220P22HNA and BGX220S22HNA modules.

  • 1024457: Added support for the MGM240SA22VNA, BGM240SA22VNA, and BGM241SD22VNA modules and updated the configurations for the BGM240SB22VNA, MGM240SB22VNA, and the MGM240SD22VNA.

  • 1029740: Fixed issue where RAIL_GetRssi()/RAIL_GetRssiAlt() could return a "stale" RSSI value (the value was from previous RX state instead of the current one) if called quickly upon entering receive.

  • 1040814: Added support to the Coexistence Utility component for configuring the coexistence request priority on sync detect when using BLE.

  • 1041734: Broke up some EFR32xG12 802.15.4 dynamic FEC code to save code size for Zigbee and BLE which never need this functionality.

  • 1056207: Fixed an issue with IQ sampling when using the Angle of Arrival/Departure (AoX) Utility component with only 0 or 1 antennas selected.

  • 1057830: Remove Coexistence Utility dependency from the RAIL Utility, Coulomb Counter component.

  • 1062712: Fixed an issue where the Coexistence Utility component wouldn't always update request states correctly which could lead to missed events triggered by new requests.

  • 1062940: Prevent the Coexistence Utility component from aborting BLE transmits when SL_RAIL_UTIL_COEX_BLE_TX_ABORT is disabled.

  • 1063152: Fixed an issue where radio reception would not be fully cleaned up when a receive error occurs with receive state transitions set to idle on error but transmit on success, a configuration mostly associated with BLE. On the EFR32xG24 this could cause a SYNTH calibration to not be properly restored and eventually cause the radio to stop working.

  • 1063502: The RAIL_PrepareChannel() function has been made dynamic multi-protocol safe and will no longer return an error if called when your protocol is inactive.


  • 1041997: Fixed the librail_config libraries for the following xGM240 modules: BGM240PA22VNA, BGM240PA32VNA, BGM240PA32VNN, BGM240PB22VNA, BGM240PB32VNA, BGM240PB32VNN, MGM240PA22VNA, MGM240PA32VNA, MGM240PA32VNN. Without this update these modules will assert when trying to load the supported BLE and IEEE 802.15.4 PHYs.


  • 813171: Added early support for IEEE802.15.4G dynamic forward error correction PHYs on the EFR32xG12 platform. Using this at this time will require help from support.

  • 844377: Fixed a BLE 2Mbps AoX issue on EFR32xG24 when using a 38.4MHz crystal.

  • 1026914: Improved PA configurations for the xGM240 modules based on additional test data.

  • 1029710: Fixed an issue with RAIL's PA auto mode that would cause us to select an unsupported RAIL_TxPowerMode_t on chip OPNs that are missing the higher power PAs.


  • 819544: Improved reception on EFR32xG23 and EFR32xG24 when using a PHY with fast detect enable (preamble sense mode).

  • 843708: Moved function declarations from rail_features.h to rail.h to avoid a convoluted include dependency order.

  • 844325: Fixed RAIL_SetTxFifo() to properly return 0 (error) rather than 4096 for an undersized FIFO.

  • 844936: Fixed an issue where using RAIL_SetNextTxRepeat() could cause a brownout reset on EFR32xG23.

  • 853714: Fixed an issue with xGM240 modules causing them to assert during initialization.

  • 857210: Added support in Coexistence Utility for configuring priority options when directional priority is enabled but no static priority GPIO is defined.

  • 988518: Fixed an issue where the radio sequencer would leave portions of the chip enabled after AoX CTE packet reception, preventing the device from going into EM2 sleep and potentially causing missed packet receive events.


  • 376658: Fixed an issue with the BLE coded PHY on EFR32xG21 where a packet received with a corrupt coding indicator would result in an invalid start of packet timestamp.

  • 645362: The Packet Trace Interface (PTI) Utility component will now validate that the correct set of pins are in use for the desired PTI mode.

  • 653200: RAIL will now error if attempting to start a CSMA or LBT transmit while a scheduled RX is still in progress or vice versa.

  • 714958: The RAIL channel of a received packet is now available in the packet's RAIL_RxPacketDetails_t::channel field. This can be of value when scanning or hopping across multiple channels while letting packets accumulate in the receive FIFO for later processing.

  • 739371: Added the RAIL_ConfigPaAutoEntry API to allow for easier configuration of PA auto mode operation in RAIL.

  • 746775: Added PA curves for BGM240P and MGM240P modules.

  • 748680: Added the RAIL_SetRssiDetectThreshold API to allow the user to detect when the RSSI is at or above a configurable threshold. Once configured the RAIL_EVENT_DETECT_RSSI_THRESHOLD event can be used to detect when this happens.

  • 758341: Restricted the SL_RAIL_UTIL_PA_RAMP_TIME_US to 10us on some EFR32 modules to match the certification conditions.

  • 772769: Fixed an issue when running IR Calibration on the EFR32xG23 using RAIL_CalibrateIrAlt where we could compute an invalid IRCAL value for certain PHYs and chips.

  • 777427: Fixed support for using the signal identifier CCA modes simultaneously with a user-enabled signal identifier trigger event.

  • 812815: Added support for the MGM240L022RNF module.

  • 813381: Added support for the FGM230SA27HGN and FGM230SBHGN modules.

  • 819644: Fixed an issue with frame-type decoding PHYs running at more than 500kbps on EFR32xG22 and later.

  • 825083: Fixed an issue on EFR32xG23 and EFR32xG24 where PTI could merge multiple receive packets into the same transaction when interrupt latency is significant.

  • 828716: Added the RAIL_GetChannelAlt API. This function returns the channel the radio is currently using. If using DMP and run on the inactive protocol it returns the channel that will be used when next switching to that protocol. When using channel hopping, mode switch, and other features that change channels dynamically this may be different than what is returned by RAIL_GetChannel as this function will track what channel the radio is actually on at that moment and not what it started on.

  • 829499: Fixed an issue where RAIL_GetRadioStateDetail would not report the correct state information when frame detection was disabled or during an LBT operation.

  • 830214: Ensure that the RAIL_RadioConfigChangedCallback_t is called for all RAIL handles in a dynamic multi-protocol application where multiple handles use the same underlying PHY configuration.

  • 835299: Fixed an issue with dynamic handling of whitening and FCS in FSK when only RAIL_IEEE802154_E_OPTION_GB868 was enabled.

  • 844600: Fixed issue of not being able to receive packets during a RAIL_ScheduleRx configured with a zero relative start time when Power Manager sleep is enabled and configured with an EM2 or lower energy requirement.


  • 759793: Fixed an issue with BLE long-range reception on EFR32xG21 that corrupted packet data and tripped RAIL_ASSERT_FAILED_UNEXPECTED_STATE_RX_FIFO.

  • 764346: BLE and 802.15.4 built-in PHYs are now exposed as public symbols in header files. Do not modify these without explicit instructions by Silicon Labs.

  • 764347: Added a new Built-in PHYs for alternate HFXO frequencies component to enable the built-in phys to operate with either 38.4 MHz or 39 MHz crystals on EFR32xG24 devices.

  • 774883: Updated power curves for ZGM230SA27HGN, ZGM230SA27HNN, ZGM230SB27HGN modules to provide more accurate output powers at the lower and higher end of the dBm range.

  • 777290: The PA auto mode configuration is fixed to use both HP and LP PA modes on the 10dBm EFR32xG24 chips.

  • 777427: Fixed support for using the signal identifier CCA modes simultaneously with a user enabled signal identifier trigger event.

  • 812938: Fixed the RAIL_RX_CHANNEL_HOPPING_MODE_MULTI_SENSE mode on EFR32xG22 and EFR32xG23 to properly stay active after detecting Timing and Preamble when using the standard demodulator.

  • 813182: Previously selecting an invalid CCA mode using RAIL_IEEE802154_ConfigCcaMode would fail silently and continue to use the RSSI based CCA mode. Now RAIL_IEEE802154_ConfigCcaMode will return an error if an invalid CCA mode is selected.


  • 758341: Restricted the SL_RAIL_UTIL_PA_RAMP_TIME_US to 10us on some EFR32 modules to match the certification conditions.

  • 764234: Changed Quuppa channel 2 frequency from 2480 MHz to 2403 MHz.

  • 765843: Updated the Z-Wave PHYs for the EFR32xG23 to prevent a sensitivity degradation on the R2 (9.6 kbps) PHY.

  • 773178: Fixed compiler warning in Callbacks Utility component when app_assert component ignores asserts.


  • 646980: An attempt to use an unsupported built-in radio channel configuration, e.g. on a module that does not support that protocol or configuration, will now trip RAIL_ASSERT_FAILED_INVALID_CHANNEL_CONFIG rather than returning success and ignoring the configuration.

  • 671651: Fixed timing problems with certain State Transitions or RX Channel Hopping delay values on the EFR32xG22 and newer parts.

  • 682739: Fixed an issue with the BLE coded PHY's modulation index on the EFR32xG21 parts that could cause deviation measurements to fail.

  • 688211: Added IEEE802.15.4 Coexistence and FEM PHYs to EFR32xG12 and EFR32xG13 based modules.

  • 688211: Updated IEEE802.15.4 FEM PHYs on EFR32xG12 and EFR32xG13 based modules for improved performance.

  • 697705: Added support for the ZGM230SA27HGN, ZGM230SA27HNN, and ZGM230SB27HGN modules.

  • 708206: Added RAIL_GetTxPacketsRemaining() API for use when handling one of the RAIL_EVENTS_TX_COMPLETION to get a sense of how many transmits remain in a RAIL_SetNextTxRepeat() sequence.

  • 712012: Updated all header files to have extern "C" when being built with C++ for compatibility.

  • 714271: Fixed an issue where RAIL_IEEE802154_Config2p4GHzRadio*() and RAIL_IEEE802154_ConfigGB*Radio() functions were improperly clearing or setting certain RAIL_IEEE802154_EOptions_t. Also documented that these functions still implicitly clear or set certain RAIL_IEEE802154_GOptions_t suitable for that configuration.

  • 714709: Made the RAIL_EnableRxDutyCycle() API safe to call in a multiprotocol application.

  • 715123: Added PA curves for HP, MP, LP and LLP modes on all EFR32xG23 radio boards.

  • 716369: Fixed an issue where incorrect radio transition times were being applied at higher temperatures when using the high power PA on EFR32xG22 parts.

  • 718290: Changed the LQI measurement to use chip errors on IEEE802.15.4 PHYs for EFR32xG24 parts.

  • 719194: Added RAIL_PA_BAND_COUNT to count RAIL_PaBand_t.

  • 720948: Added a new RAIL_RxDataSource_t to capture direct mode data on supported devices.

  • 721163: To save both flash and RAM, moved information formerly contained in RAIL_Config_t::protocol, RAIL_Config_t::scheduler, and RAIL_Config_t::buffer internal to RAIL and sized appropriately for single vs. multiprotocol. RAIL multiprotocol now provides two internal state buffers for two protocols by default. An application that needs more must now call RAIL_AddStateBuffer3() or RAIL_AddStateBuffer4() to add a 3rd and 4th buffer, respectively. Otherwise RAIL_Init() will fail when trying to initialize a 3rd or 4th protocol.

  • 723098: Fixed RAIL_SetFixedLength(handle, RAIL_SETFIXEDLENGTH_INVALID) to restore dynamic frame length operation if the current PHY was originally configured for that.

  • 723558: Added support for BGM240PA22VNA, BGM240PA32VNA, BGM240PA32VNN, BGM240PB22VNA, BGM240PB32VNA, BGM240PB32VNN, MGM240PA22VNA, MGM240PA32VNA, MGM240PA32VNN, MGM240PB22VNA, MGM240PB32VNA and MGM240PB32VNN modules.

  • 723605:Coexistence Utility GPIO interrupt numbers are now chosen at runtime to avoid conflicts.

  • 726491: A new RAIL API RAIL_GetSchedulerStatusAlt will now return more descriptive radio scheduler events as well as the RAIL_Status_t of the RAIL API invoked by the radio scheduler. As a part of the new API, new RAIL_SchedulerStatus_t events have been added while retaining the previous ones for backwards compatibility. Note that the underlying values of the existing RAIL_SchedulerStatus_t events may have changed.

  • 727721: Updated the RAIL_IEEE802154_Config2p4GHzRadio*Fem PHYs on the EFR32xG12 and EFR32xG13 devices to improve performance.

  • 727728: Added a new RAIL_IEEE802154_Config2p4GHzRadioCustom1 API to configure an alternate IEEE 802.15.4 PHY with slightly different performance characteristics for the EFR32xG12 and EFR32xG13 parts. Use this API if instructed by Silicon Labs for your use case.

  • 738931: Fixed an issue with the BLE Coded PHYs on the EFR32xG22 device that could cause some packets to be improperly sent and not trigger a RAIL_EVENT_TX_PACKET_SENT event.

  • 739594: Fixed an issue with the RX_IQDATA_FILTLSBRAIL_RxDataSource_t on EFR32xG23 parts where the data did not properly saturate and was instead just the lower 16 bits of IQ sample data.

  • 744323: Fixed an issue when using BLE AoX where non-AoX packets were transmitted on an undefined antenna. They will now always use the first antenna in the configured RAIL_BLE_AoxConfig_t::antArrayAddr pattern.

  • 745528: Fixed some incorrect RAIL_RxPacketInfo_t::filterMask values for 802.15.4 ACKs when promiscuous, or when the PanId coordinator received a packet with only source PanId and no destination address.

  • 753655: The example CSV files referred to in AN1127: Power Amplifier Power Conversion Functions in RAIL 2.x are updated with realistic values.

  • 753860: Fixed an issue when running IR Calibration on the EFR32xG23 (RAIL_CalibrateIrAlt) where we could compute a completely invalid IRCAL value for certain PHYs and chips.

  • 754219: Increased maximum BLE Coexistence request window setting, SL_RAIL_UTIL_COEX_REQ_WINDOW, in Coexistence Utility from 255 to 5000.


  • 737292: Fixed an issue on the EFR32xG21 that was causing some BLE coded PHY packets to be sent with a corrupted sync word and payload breaking the connection.

  • 738158: Fixed the RX_DIRECT_MODE_DATARAIL_RxDataSource_t data source on the EFR32xG23.

  • 741120: Fixed an issue where the IQ data captured during BLE's CTE could be all zeros on the 2Mbps PHY.

  • 743258: Fixed an issue that could cause the antenna switching pattern in BLE AoX applications to sometimes repeat a previous sequence instead of following the expected antenna sequence.


  • 274536: Added a new RAIL_ConfigDirectMode() API for configuring direct mode settings on all chips. This can set whether the data stream is synchronous or asynchronous and which GPIOs are used for the feature.

  • 671651: Fixed timing problems with certain State Transitions or RX Channel Hopping delay values on the EFR32xG22 and newer parts.

  • 714271: Fixed an issue where RAIL_IEEE802154_Config2p4GHzRadio*() and RAIL_IEEE802154_ConfigGB*Radio() functions were improperly clearing or setting certain RAIL_IEEE802154_EOptions_t. Also documented that these functions still implicitly clear or set certain RAIL_IEEE802154_GOptions_t suitable for that configuration.

  • 715123: Added PA curves for EFR32XG23 for HP, MP, LP and LLP modes for both 14dBm and 20dBm variants.

  • 716369: Fixed an issue where incorrect radio transition times were being applied at higher temperatures when using the high power PA on EFR32xG22 parts.

  • 720948: Added a new RAIL_RxDataSource_t to capture direct mode data on supported devices.

  • 735862: Now when using a RAIL_RxDataSource_t other than RX_PACKET_DATA the receiver will be disabled any time a RAIL_EVENT_RX_FIFO_OVERFLOW occurs and need to be manually restarted. If the RAIL_EVENT_RX_FIFO_OVERFLOW event is not enabled then the receiver will continue to run and lose some amount of data until the buffer is processed which matches the old behavior.


  • 646980: An attempt to use an unsupported built-in radio channel configuration, e.g. on a module that does not support that protocol or configuration, will now trip RAIL_ASSERT_FAILED_INVALID_CHANNEL_CONFIG rather than returning success and ignoring the configuration.

  • 675252: Fixed an antenna diversity regression where a transmitted auto- ACK would incorrectly go out the currently configured TX antenna rather than the antenna used to receive the packet being acknowledged.

  • 676896: Fixed an issue in OOK PHYs where dynamic adjustments made to receive a packet with a high RSSI could persist after the packet and decrease the ability to receive packets with a lower RSSI.

  • 696198: Fixed an issue on PHYs that do not support dual sync words. If RAIL_RX_OPTION_ENABLE_DUALSYNC is called when one of these PHYs is loaded the RAIL_ConfigRxOptions function will now return RAIL_STATUS_INVALID_PARAMETER.

  • 697097: Fixed a rare situation where a premature RAIL_EVENT_TX_BLOCKED event might occur when auto-ACK is enabled and a scheduled transmit using RAIL_SCHEDULED_TX_DURING_RX_ABORT_TX is pending when an erroneous packet is received.

  • 700439: Fixed an issue where configuring a Selective RF Sense Wakeup packet by calling RAIL_ConfigRfSenseSelectiveOokWakeupPhy followed by RAIL_SetRfSenseSelectiveOokWakeupPayload would put RAIL in fixed length mode and leave it there even after a new PHY was loaded. We will now revert the fixed length settings to their default when loading a new PHY after the Selective RF Sense Wakeup PHY was loaded so that the incoming PHY's settings are used.

  • 710273: Fixed an issue using RAIL_TX_REPEAT_OPTION_HOP with RAIL_SetNextTxRepeat() or RAIL_BLE_SetNextTxRepeat() when they return an error found in the channel-hopping configuration, yet would still attempt to repeat the next transmit anyway.

  • 710983: Added the new RAIL_STREAM_CARRIER_WAVE_PHASENOISERAIL_StreamMode_t for phase noise measurement.

  • 719194: Added RAIL_PA_BAND_COUNT to count RAIL_PaBand_t.


  • 369712: Added RAIL_StartScheduledCcaCsmaTx and RAIL_StartScheduledCcaLbtTx APIs to allow applications to schedule a CSMA/LBT transmit.

  • 456701: Fixed an issue on EFR32xG1x parts where calling RAIL_Init() with the MSC->CTRL.CLKDISFAULTEN bit set would cause a bus fault.

  • 524885: Added support for a new RAIL_EVENT_ZWAVE_LR_ACK_REQUEST_COMMAND, triggered on the reception of a Z-Wave Long range packet with acknowledgement request bit set, following which the application must call RAIL_ZWAVE_SetLrAckData to populate the fields of the Z-Wave Long range acknowledgement packet.

  • 626961: Add support for the RAIL_TX_POWER_MODE_*_HIGHEST options in the RAIL_GetTxPowerCurve() function.

  • 654600: On EFR32XG21, a watchdog has been added to terminate an RSSI averaging operation in case the RAIL_EVENT_RSSI_AVERAGE_DONE event does not occur.

  • 655541: Fixed an issue on EFR32XG22 and later where packet filtering might be incomplete in FEC-enabled radio configurations causing good packets to be improperly dropped. Note that if packet filtering fails close to the end of an otherwise successfully received packet, the packet may be flagged RAIL_RX_PACKET_READY_CRC_ERROR rather than RAIL_RX_PACKET_ABORT_FILTERED. This issue is still possible on earlier chips due to hardware filtering restrictions.

  • 660021: Changed when RAIL_EVENT_IEEE802154_DATA_REQUEST_COMMAND event is issued to better facilitate support for 802.15.4E-2012 Enhanced ACKing and reduce time spent in the event handler. The event is now issued after receiving the Auxiliary Security Header (if present) in the MAC Header of the incoming frame, and for MAC Command frames, after receiving the MAC Command byte (which may be encrypted). This change is not backwards compatible with prior releases for Enhanced ACK requesting frames, but is for Immediate ACK requesting frames. Use of RAIL_IEEE802154_EnableEarlyFramePending() is no longer required to support Enhanced ACKing; the notion of early frame pending notification has also shifted to after the Auxiliary Security Header for Enhanced ACK requesting frames.

  • 661651: Changed RAIL Timer Synchronization over sleep on the EFR32xG21 to use the RTCC instead of the PRORTC to reduce current consumption in EM2.

  • 665705: Fixed an issue where a transmit with RAIL_TX_OPTION_SYNC_WORD_ID 1 to use SYNC2 would improperly indicate SYNC1 was used in the packet trace appended information.

  • 666275: Fixed potential delays when using RAIL's channel hopping or duty cycling features in EM1P mode on the EFR32xG22 and newer parts.

  • 667103: Fixed RAIL_ReadRxFifo() to behave as documented when passed NULL dataPtr: the data is thrown away rather than copied out.

  • 671817: Fixed an issue when switching between certain radio configurations (e.g. Z-Wave) where use of RAIL_TX_OPTION_REMOVE_CRC can become permanently stuck.

  • 673333: Fixed an issue with RAIL_TX_OPTION_WAIT_FOR_ACK transmits where an RX overflow during the ACK wait period would silently abort the ACK timer resulting in no RAIL_EVENT_RX_ACK_TIMEOUT being generated.

  • 681133: Added RAIL_TX_OPTION_RESEND to allow re-transmitting the packet most recently loaded into the Transmit FIFO. This can be used in combination with RAIL_SetNextTxRepeat() on supported platforms to repeatedly transmit the same packet.

  • 681135: Added new RAIL_SetNextTxRepeat() API and RAIL_TxRepeatConfig_t to allow configuration of repeated transmits triggered by an initial transmit.

  • 681136: Added ability to configure TxToTx state transition time via RAIL_StateTiming_t::txToTx and RAIL_SetStateTiming(). This time is generally used between an autoACK transmit and a user transmit that was pending. It's also used during repeated transmits by default, but can be overridden by the RAIL_TxRepeatConfig_t::delayOrHop or RAIL_BLE_TxRepeatConfig_t::delayOrHop configuration.

  • 681141: Added ability to hop channels during repeated transmits in RAIL_TxRepeatConfig_t using RAIL_TX_REPEAT_OPTION_HOP.

  • 681143: Added BLE-specific hooks for repeated transmits with channel hopping in RAIL_BLE_SetNextTxRepeat() and RAIL_BLE_TxRepeatConfig_t.

  • 682032: Fix an issue where setting RAIL_SCHEDULED_TX_DURING_RX_ABORT_TX for a scheduled transmit could cause subsequent non-scheduled transmits to be blocked.

  • 695484: The posting of RAIL_EVENT_TX_ABORTED now occurs before the PA ramps down, at the same time other transmit completion events get posted.

  • 696665: Fixed an issue in RAIL_ConvertRawToDbm for PAs which use piecewise-linear line segment fit, where the minimum raw power level was incorrectly compared to the minimum deci-dBm value.

  • 697097: Fixed a rare situation where a premature RAIL_EVENT_TX_BLOCKED event might occur when auto-ACK is enabled and a scheduled transmit using RAIL_SCHEDULED_TX_DURING_RX_ABORT_TX is pending when an erroneous packet is received.

  • 699890: Fixed missing C++ compatibility in the Initialization Utility component's generated header file.

  • 701604: Fixed an issue where using RX Channel Hopping with channels in different frequency bands would cause RAIL to assert.

  • 703788: Fixed an issue on EFR32xG2x devices where RAIL would not allow you to initialize the radio with voltage scaling enabled even though this is supported on these devices.

  • 705595: Fixed an issue where custom PA curves provided through the PA Module were not respected when building Silicon Labs Zigbee applications.

  • 705802: Allow RAIL_ZWAVE_ReceiveBeam to be run on US LR regions instead of always returning an error.

  • 706542: The Callbacks Utility component can now be configured to not provide the RAILCb_AssertFailed() function for situations where the application wants to provide its own implementation.

  • 708511: Fixed possible RAIL_ASSERT_FAILED_UNEXPECTED_STATE_TX_FIFO when RAIL_SetTxFifo() is called after the transmit FIFO had been filled enough to cause its write offset to wrap.


  • 652028: If the selected RAIL_TxPower_t is not supported by the chip, then by default RAIL_TX_POWER_MODE_2P4_HIGHEST is chosen as the power mode.

  • 666275: Fixed potential delays when using RAIL's channel hopping or duty cycling features in EM1P mode on the EFR32xG22 and newer parts.

  • 666917: Previously runtime configuring the Zigbee coexistence PHY select timeout to 255 ms would only guarantee 255 ms on the coexistence optimized PHY. Now the coexistence optimized PHY will be selected indefinitely after runtime configuring the coexistence PHY select timeout to 255 ms.

  • 667555: Fixed an issue with the Front End Module (FEM) Utility component where it would generate an error if the Rx pin was not required and turned off by the user.

  • 669697: Updated the configuration libraries on BGM210PB22JIA and BGM210PB32JIA modules to fix issues using these parts in the field.

  • 671817: Fixed an issue when switching between certain radio configurations (e.g. Z-Wave) where use of RAIL_TX_OPTION_REMOVE_CRC can become permanently stuck.

  • 672904: The minimum and maximum power levels for BGM220P and BGM220SC modules are updated to be 0 and 15 respectively.

  • 672909: Fixed an issue with PA auto mode where it might try to use a RAIL_TxPowerMode_t that is not valid for the current part.

  • 673246: A multiprotocol scheduled receive with a relative start time and an absolute end time now respects that end time regardless of when the receive actually starts. Before, the end time was made relative and pushed out based on the actual start time to keep the receive window the same width in duration. This is a backwards-incompatible change, but should align better with what users expected when specifying an absolute end time.

  • 684407: Fixed an issue where calling RAIL_ConfigAntenna() on EFR32xG22 and newer devices could fault if the GPIO block clock was not explicitly enabled beforehand.

  • 687455: Fixed the conversion of power level to dBm to fetch correct values for BGM220P and BGM220S modules when using the RAIL_TX_POWER_MODE_2P4GIG_HP power mode and power levels above the maximum.


  • 635037: Added support on the EFR32xG22 parts for a new BLE PHY that can receive 1Mbps and LR Coded packets simultaneously. See RAIL_BLE_ConfigPhySimulscan().

  • 652969: Restored automatic IR calibration on EFR32xG22 at RAIL_Init() time.

  • 653955: Fixed an issue when using the Coexistence Utility component where PWM was enabled if SL_RAIL_UTIL_COEX_PWM_DEFAULT_ENABLED was set, even if SL_RAIL_UTIL_COEX_PWM_REQ_ENABLED was disabled. Now SL_RAIL_UTIL_COEX_PWM_DEFAULT_ENABLED is ignored when SL_RAIL_UTIL_COEX_PWM_REQ_ENABLED is disabled.

  • 654726: Fixed an issue where antenna diversity was not being enabled on EFR32xG1x devices when configured through the Antenna Diversity Utility component.

  • 656175: Fixed an issue where any RAIL_ChannelConfigEntry_t in a RAIL_ChannelConfig_t with a maximum power less than 0 dBm would be stuck at the maximum power no matter what power was requested.

  • 663815: Fixed an issue when using the Antenna Diversity Utility component where moving from TX antenna mode HAL_ANTENNA_MODE_ENABLE2 to HAL_ANTENNA_MODE_DIVERSITY would cause the antenna selection to get stuck on antenna 2.

  • 665161: Fixed an issue on EFR32xG22 and later PTI where the network analyzer could misrepresent the RSSI of incoming packets.


  • 244222: Added support for reporting more detailed transmit errors on the Packet Trace Interface (PTI).

  • 318768: Added new API RAIL_GetRadioStateDetail that provides more detailed radio state information than RAIL_GetRadioState.

  • 362133: The default RSSI offset on the EFR32xG1, EFR32xG12, EFR32xG13, EFR32xG14, and EFR32xG21 chips does not compensate for a known internal hardware offset. This offset is chip specific and can be found using the new Received Signal Strength Indicator (RSSI) Utility component which will load the correct value for your chip by default when the RSSI Offset component or Hardware Configurator peripheral is enabled. Since the hardware and antenna design can also impact this offset it is recommended that you measure this value for your particular hardware for the best accuracy. This correction is not enabled by default on the chips listed above to prevent changing radio behavior significantly without the user opting into this change. For the EFR32xG22 and future chips the hardware offset is measured and included by default. Please be aware that if any prior CCA token modifications have been made to modify the threshold for CSMA/LBT transmits, adding an RSSI Offset value could reduce or prevent TX.

  • 446308: Updated RAIL_ZWAVE_ReceiveBeam() to automatically idle the radio when RAIL_ZWAVE_ReceiveBeam() finishes even when no beam is detected.

  • 451099: Added the ability to use the Initialization Utility component multiple times when creating a multiprotocol application.

  • 471715: Fixed an issue when using RAIL_ConfigAntenna() on the EFR32xG22 with an RF path other than 0 since these parts do not have multiple RF paths.

  • 478948: Added RAIL_RxPacketInfo_t::filterMask field of type RAIL_AddrFilterMask_t which is a bitmask representing which address filter(s) the packet has passed.

  • 493557: Added the ability for RAIL_GetRssi() to wait for a valid RSSI in radio states that are transitioning into RX. Additionally, a maximum wait timeout for a valid RSSI can be configured using the new API RAIL_GetRssiAlt().

  • 494571: Added a new RAIL_ZWAVE_ConfigRxChannelHopping() API to configure Z-Wave Rx channel hopping using the recommended hopping parameters.

  • 494571: Added a new RAIL_ZWAVE_GetRegion() API to determine the currently selected Z-Wave region.

  • 495497: Changed RAIL_PacketTimeStamp_t::totalPacketBytes from uint32_t to uint16_t to reduce RAM usage.

  • 497196: The Initialization Utility component now defaults most options to a disabled state, instead of enabled. Now you have to opt-in, instead of opt- out, of RAIL init functionality.

  • 501510: Added a new RAIL_SupportsTxPowerModeAlt() API to get the minimum and maximum power levels for a specific power mode if the power mode is supported by the chip.

  • 519195: The EFR32xG21 will now use RTCC channel 0, as opposed to the PRORTC, to perform sleep timer synchronization. This will help lower the EM2 current consumption for this chip.

  • 519288: The Power Amplifier (PA) Utility component now enables PA calibration by default to ensure that PA power remains consistent chip-to-chip.

  • 520521: Added a new API RAIL_SetAddressFilterAddressMask() that allows for setting a bit mask pattern for packet data in the address filters.

  • 520937: Add new RAIL_EVENT_RF_SENSED as an alternative to the current RAIL_StartRfSense() callback parameter.

  • 520943: Added a new API RAIL_ConfigSleepAlt() to allow configuring the PRS channel, RTCC channel, and whether sleep is enabled in one call.

  • 524046: Added support for MGM210PB22JIA, MGM210PB32JIA, BGM210PB22JIA and BGM210PA32JIA modules.

  • 580312: Created a new Protocol Utility component for setting up RAIL to use one of the standards based PHYs by default.

  • 630457: On custom boards, the Packet Trace Interface (PTI) Utility component no longer reserves pins for use without being configured.

  • 632723: The EFR32xG22 will limit going to EM1P sleep mode when an 80MHz HRFRCO PLL system clock is selected. Going to EM1P sleep is not supported when using the DPLL on this hardware as it can cause clock drift which would impact radio timing and tuning.

  • 635237: Added an event RAIL_EVENT_PA_PROTECTION to indicate the power protection circuit has kicked in.

  • 638067: Fixed a DMP issue that poached transmit power when switching between protocols using the same channel configuration and channel.

  • 638239: Created a Callbacks Utility component for application- level callbacks.

  • 639833: Fixed a potential radio hang on a corrupted BLE packet when doing BLE AoX.

  • 642893: Reduced RAIL library flash data alignment needs on the EFR32xG22.

  • 645641: Fixed an EFR32xG22 issue where a state transition to receive after a transmit from EM2 sleep would drop packets.

  • 650072: In multiprotocol RAIL, when the supplied handle is not the active handle, RAIL_GetRadioState now returns RAIL_RF_STATE_RX rather than RAIL_RF_STATE_IDLE if a background receive is currently scheduled.


  • 501674: Reduced the time from last modulated bit on air to ramp down on EFR32xG1x devices.

  • 623922: Fix to set the right power on EFR32xG21 when the PA uses VDD around 1.8V.


  • 493409: Fixed an issue where output power might not be set correctly when changing frequency bands within one channel configuration.

  • 497061: Corrected an issue on EFR32xG1x chips where specifying a large ramp time could erroneously add extra delay to a transmit.

  • 519195: EFR32xG21 will now use RTCC channel 0, as opposed to the PRORTC, to perform sleep timer synchronization. This will help lower the EM2 current consumption for this chip.

  • 524046: Added support for MGM210PB22JIA, MGM210PB32JIA, BGM210PB22JIA and BGM210PA32JIA modules.


  • 204557: Added support for setting the default value of the FramePending bit in outgoing IEEE 802.15.4 data poll ACKs to true. This means that the user would then be responsible for clearing this bit in the frame pending callback instead of having it default to cleared and having to set it. See the RAIL_IEEE802154_Config_t::defaultFramePendingInOutgoingAcks field for configuring this feature.

  • 298829: Added a new API RAILCb_ConfigSleepTimerSync() to allow for configuration of the PRS and RTCC channels used for timer sync operations.

  • 300348: Added support for a new RAIL_EVENT_SCHEDULED_RX_STARTED and RAIL_EVENT_SCHEDULED_TX_STARTED, triggered when a scheduled receive or transmit begins. These are the same value because a scheduled receive and transmit cannot occur at the same time. Note: This new event shifted the bit positions of some events in RAIL_Events_t.

  • 381485: Provided new RAIL_RX_CHANNEL_HOPPING_MODE_MULTI_SENSE along with RAIL_RxChannelHoppingConfigMultiMode_t to configure its parameters. This mode can be configured to tolerate brief loss of timing and/or preamble making it less susceptible to hopping than the single-sense modes. It can also be used with RX duty cycling.

  • 402203: Provided new RAIL_RX_CHANNEL_HOPPING_OPTION_RSSI_THRESHOLD to augment each of the RAIL_RxChannelHoppingMode_t modes with one RSSI Threshold check on entering receive for the channel. If the RSSI is below that specified by RAIL_RxChannelHoppingConfigEntry_t::rssiThresholdDbm then hop (or if below RAIL_RxDutyCycleConfig_t::rssiThresholdDbm, suspend RX). RAIL_RxDutyCycleConfig_t has been augmented not only with this new field, but also now includes RAIL_RxDutyCycleConfig_t::options field. For those options to be recognized by RAIL_ConfigRxDutyCycle() (due to backwards compatibility) RAIL_RxDutyCycleConfig_t::mode must be one of the new WITH_OPTIONS modes, e.g. RAIL_RX_CHANNEL_HOPPING_MODE_TIMEOUT_WITH_OPTIONS.

  • 411017: Relax constraints in RAIL to allow calling RAIL_SetRxTransitions, RAIL_SetTxTransitions, RAIL_ScheduleRx, and all of the RAIL_BLE_ConfigPhy functions before the radio is completely IDLE.

  • 414398: Added support for the Silicon Labs Power Manager component. When enabled via RAIL_InitPowerManager() RAIL will communicate directly with the power manager to configure sleep modes. See the Sleep section for more documentation.

  • 429513: Added support for RAIL's FrameType based length on the EFR32xG22.

  • 442248: Updated the pa_customer_curve_fits.py helper script to work with Python 3 as well as Python 2.

  • 442978: Changed pa_customer_curve_fits.py to take maxpower as a parameter to generate better curves. When maxpower and increment are different than the defaults they will now be included in the output curve. The current power curve limits can be read at runtime from the new RAIL_GetTxPowerCurveLimits API.

  • 450750: The RAIL_GetRadioEntropy() API will now ensure a valid radio configuration has been loaded using RAIL_ConfigChannels() since it can cause problems if the radio is used before this.

  • 454096: Updated the function RAIL_GetRxPacketDetailsAlt to return the time position of the received packet timestamp corresponding to the default location in the packet.

  • 454096: Added a new function, RAIL_GetTxPacketDetailsAlt2, which allows a RAIL_TxPacketDetails_t structure to be passed as an argument.

  • 454096: Added a new function, RAIL_GetTxTimePreambleStartAlt, which allows a RAIL_TxPacketDetails_t structure to be passed as an argument.

  • 454096: Added a new function, RAIL_GetTxTimeSyncWordEndAlt, which allows a RAIL_TxPacketDetails_t structure to be passed as an argument.

  • 454096: Added a new function, RAIL_GetTxTimeFrameEndAlt, which allows a RAIL_TxPacketDetails_t structure to be passed as an argument.

  • 456338: Fixed an issue with RAIL state transitions where an internal timer wrapping could cause incorrect transition times. This error would previously affect at most one packet every 15 minutes.

  • 459581: Fixed an issue with the EFR32xG21 medium power PA that could cause the output power to be too low for certain power level and ramp time combinations.

  • 464534: Fixed issue where RAIL_StartAverageRssi() ran twice as long as it should have.

  • 464734: Regenerated the power curves for the EFR32xG22 to allow access to the maximum power level available on the chip.

  • 464735: Closed tiny timing window on EFR32xG13 that might corrupt PTI appended info when idling the radio.

  • 465096: Fixed an issue where RAIL_Idle() was not properly terminating an ongoing RAIL_StartAverageRssi() process.

  • 465220: Bluetooth Angle of Arrival and Angle of Departure support has been removed from the EFR32xG13 chip. For future usage of this feature please look to the EFR32xG22.

  • 466012: Fixed an issue where the CRC could be disabled indefinitely on transmit when switching configs in a multiphy setup.

  • 474678: Fixed an issue with duty cycle receive and channel hopping on the EFR32xG1x parts where some parts of the radio would be left on even with long delay parameters causing extra current to be used. This allows for a noticeable improvement in power consumption when using the RAIL_ConfigRxDutyCycle() API with delays of more than a hundred microseconds.

  • 475184: Fixed an issue on the EFR32xG22 where the receiver was not automatically re-calibrated if the temperature changed significantly while sitting in receive. This could cause the radio to go off channel for significant temperature changes resulting in receive problems.

  • 477621: Improved frequency accuracy on EFR32xG1x devices when the radio configuration has an entry with a large number of channels. Previously, small errors in the channel spacing calculation could exist. If they did, then when computing the channel frequency this error would be multiplied by the channel number minus the start channel for that entry causing some drift for higher order channels. This was not much an issue in most cases, but for certain PHY and crystal combinations it could be worse.

  • 477833: Some radio configurations on the EFR32XG22 are not usable with RAIL address filtering and RAIL 802.15.4 filtering. Add an assert to catch those cases.

  • 479539: Fixed a bug where the RAIL_ConfigTxPower() would override the PA capacitor tuning values for transmit and receive without caching them. In a multiprotocol scenario this could cause us to apply incorrect PA capacitor tuning values set prior to a call to RAIL_ConfigTxPower. Note that you must still call RAIL_SetPaCTune after any making any changes to the power configuration via RAIL_ConfigTxPower.

  • 479665: Fixed an issue where RAIL_SetRxFifo() would not reject a buffer smaller than 64 bytes and would mistakenly think it is very big. In addition, RAIL_ASSERT_FAILED_RX_FIFO_BYTES can no longer occur with a 64 byte buffer when doing IR calibration.

  • 482007: Fixed a bug in multiprotocol RAIL where running an IR calibration during a protocol switch would fail. The calibration function will now return RAIL_STATUS_INVALID_STATE if called in such a scenario.

  • 483688: Fixed an issue where the power mode selected when using RAIL_TX_POWER_MODE_2P4GIG_HIGHEST on supported chips was not saved in a multiprotocol context and could cause problems.

  • 484374: Fixed regression from 2.8.1 on EFR32xG21 where Bluetooth LE did not include packet sync word on PTI.

  • 488752: Fixed an issue with MGM1x and BGM1x modules that caused PHY changes to be slower than when using stand alone parts. This could cause problems in certain BLE or DMP use cases where reconfiguration time is critical.

  • 489214: Fixed an issue where calling RAIL_IEEE802154_CalibrateIr2p4Ghz, RAIL_IEEE802154_CalibrateIrSubGhz, or RAIL_BLE_CalibrateIr with a NULL imageRejection parameter would result in a crash.


  • 456701: Fixed an issue on EFR32xG1x parts where calling RAIL_Init() with the MSC->CTRL.CLKDISFAULTEN bit set would cause a bus fault.

  • 702377: The GB868 PHYs have been modified to improve performance for the EFR32xG1, EFR32xG12, EFR32xG13 and EFR32xG14.


  • 645641: Fixed an issue on EFR32xG22 where a state transition to receive after a transmit from EM2 sleep would drop packets.

  • 661651: Changed RAIL Timer Synchronization over sleep on the EFR32xG21 to use the RTCC instead of the PRORTC to reduce current consumption in EM2.

  • 671168: Fixed an issue on EFR32xG22 parts where current consumption would be higher than expected after radio activity.


  • 639833: Fixed a potential radio hang on a corrupted BLE packet when doing BLE AoX.


  • 499216: Fixed an issue with the EFR32xG21 medium power PA that could cause the output power to be too low for certain power level and ramp time combinations.

  • 499366: Added support for new BGM220 modules.


  • 477833: Some radio configurations on the EFR32XG22 are not usable with RAIL address filtering and RAIL 802.15.4 filtering. Add an assert to catch those cases.

  • 484374: Fixed regression from 2.8.1 on EFR32xG21 where BLE did not include packet sync word on PTI.



  • 387749: Revamped Features and rail_features.h, providing runtime RAIL_SupportsSomeFeature() APIs for each of the features as some features may be restricted to certain chips within a family. Also added more consistent RAIL_SUPPORTS_ compile-time synonyms for the features while retaining the existing RAIL_FEAT_ defines for backwards compatibility. These defines can now be used in C code and not just preprocessor #if statements.

  • 442248: Updated the pa_customer_curve_fits.py helper script to work with Python 3 as well as Python 2.

  • 464735: Closed tiny timing window on EFR32xG13 that might corrupt PTI appended info when idling the radio.

  • 464774: * Calling RAIL_ConfigSleep() with RAIL_SLEEP_CONFIG_TIMERSYNC_ENABLED on chips that use the PRORTC for synchronization (EFR32xG13 and newer) will now only configure the choose the LF clock source if the PRORTC IRQ is disabled. This allows for other code to safely configure the PRORTC like the Silicon Labs generic sleep timer.

  • 466396: Added support for new BGM220 modules.

  • 469015: Fixed an issue on the EFR32xG21 that could cause the RAIL_GetRadioEntropy() function to return the same first 4 bytes when called with the radio off after a reset.




  • 197573: Suppressed extraneous RAIL_EVENT_TX_START_CCA events that might occur during long CCA durations. Now only one such event should occur per CCA try.

  • 295265: Added two new APIs, RAIL_GetSyncWords and RAIL_ConfigSyncWords(), to allow getting and setting the sync word configuration of your PHY at runtime.

  • 301472: On EFR32xG12 thru EFR32xG14, added support for 802.15.4G-2012 SUN PHY dynamic frame payload whitening on reception and transmit based on the PHY header's Data Whitening flag setting. This feature is automatically enabled when RAIL_IEEE802154_ConfigGOptions()' RAIL_IEEE802154_G_OPTION_GB868 is enabled, and assumes the radio configuration specifies the appropriate whitening algorithm and settings.

  • 301488: On EFR32xG12 thru EFR32xG14, added support for 802.15.4G-2012 SUN PHY dynamic frame payload 2/4-byte FCS (CRC) on reception and transmit based on the PHY header's FCS Type flag setting. This feature is automatically enabled when RAIL_IEEE802154_ConfigGOptions()' RAIL_IEEE802154_G_OPTION_GB868 is enabled. The radio configuration's (single) CRC algorithm settings are ignored, overridden by RAIL.

  • 301501: On EFR32xG12 thru EFR32xG14, 802.15.4 AutoACK behavior has also been updated so transmitted immediate ACKs reflect the Whitening and 2/4-byte FCS of the received frame being acknowledged.

  • 369722: Added RAIL_TX_OPTION_CCA_ONLY to just perform CCA (CSMA/LBT), stopping short of automatically transmitting when the channel is clear.

  • 369727: Added support for a new RAIL_EVENT_TX_STARTED, triggered when the first preamble bit is about to go on-air. Also included the ability to retrieve the equivalent RAIL_PACKET_TIME_AT_PREAMBLE_START timestamp of that event from the event's handler via RAIL_GetTxTimePreambleStart(). Note: This new event shifted the bit positions of some events in RAIL_Events_t.

  • 369727: Also changed RAIL_GetRxTimePreambleStartAlt(), RAIL_GetRxTimeSyncWordEndAlt(), and RAIL_GetRxTimeFrameEndAlt() to properly update its pPacketDetails' RAIL_PacketTimeStamp_t::timePosition to reflect the adjusted RAIL_PacketTimeStamp_t::packetTime rather than leaving it as RAIL_PACKET_TIME_DEFAULT.

  • 384878: Clarified documentation of the RAIL_EVENT_RX_ACK_TIMEOUT event and RAIL_AutoAckConfig_t::ackTimeout period which extends only to packet sync word detection of an expected ACK, not packet completion of that ACK.

  • 397072: Added an API, RAIL_StopInfinitePreambleTx, that can stop an infinite preamble on PHYs configured to use infinite preambles.

  • 402991: Added additional information to the packet trace stream for the Z-Wave protocol to indicate what region is currently active to help with decoding.

  • 406080: Added support for RFSENSE Selective (OOK) mode for supported chips, which currently includes only EFR32xG22 devices. Please refer to RAIL internal chip specific documentation for more details.

  • 406871: Documented RAIL's internal 16-packet metadata FIFO which exists on EFR32 platforms supplementing the receive FIFO of packet data. Refer to Data Management and EFR32 for details. Included is support for a new RAIL_EVENT_RX_FIFO_FULL, triggered with any packet completion event in which the receive FIFO or packet metadata FIFO are full. This tells the application it must free up the oldest packets/data ASAP to reduce the chance of RAIL_EVENT_RX_FIFO_OVERFLOW (however, overflow may already have occurred). Note: This new event shifted the bit positions of some events in RAIL_Events_t.

  • 411498:RAIL_StartAverageRssi() now returns RAIL_STATUS_INVALID_STATE if called when the radio is not idle, enforcing its documented behavior.

  • 414114: Added a new PA mode which will attempt to automatically choose the PA which consumes the least amount of current to reliably produce the requested output power. See RAIL_EnablePaAutoMode() for details.

  • 417340: Fixed an issue where RAIL_RxPacketDetails_t::isAck would incorrectly be set true for non-ACK or unexpected ACK packets received successfully (e.g. when RAIL_IEEE802154_ACCEPT_ACK_FRAMES is enabled) or aborted while waiting for the expected ACK. Note that when RAIL_RX_OPTION_IGNORE_CRC_ERRORS is in effect, an expected ACK includes one that fails CRC, and will have isAck set true.

  • 418493: RAIL_ConfigRadio will now return RAIL_STATUS_INVALID_STATE if called from the inactive config in dynamic multiprotocol instead of returning success but not applying the change.

  • 427934: Fixed a race condition that could cause a device to not re- enable frame detection after an Rx overflow event if the overflow was processed and cleared very quickly.

  • 430026: Enforced and clarified that RAIL_Init() should not be called more than once per protocol.

  • 430081: Fixed an issue where the first Clear Channel Assessment (CCA) of a CSMA/LBT transmit from radio idle state would consistently fail when the RAIL_CsmaConfig_t::ccaBackoff or RAIL_LbtConfig_t::lbtBackoff time is smaller than the RAIL_StateTiming_t::idleToRx time.

  • 436163: Fixed a post-receive transition timing issue for received packets that were on the air longer than 32 milliseconds. AutoACK turnaround timing should now behave properly at low data rates.

  • 437054: Fixed an issue with the pa_customer_curve_fits.py that caused values below -12 to not be considered when computing the fit. Re-generated default, Silicon Labs-provided curves to consume this fix, resulting in minor changes to the lowest-power segment in curve-fit based PA's. If using a custom power curve created using the documentation in AN1127 customers should re-run the script on the already collected output data to get slightly more accurate curves.

  • 441635: Return the correct RAIL_TxPowerMode_t value of RAIL_TX_POWER_MODE_NONE from RAIL_GetTxPowerConfig if called before RAIL_ConfigTxPower.

  • 446289: Fixed RAIL_IDLE_ABORT to idle the radio sooner when in RAIL_RF_STATE_RX, especially now that RAIL_RxChannelHoppingConfigEntry_t::delay can extend the time in that state.

  • 447578: Fixed an issue where setting a transmit power over the maximum allowed for a given channel would result in no change in the output power instead of using the maximum allowed value.

  • 450187: Fixed an issue where calling RAIL_Idle() with RAIL_IDLE_FORCE_SHUTDOWN while in receive with channel hopping enabled could corrupt some internal channel hopping state and trigger a bus fault or other radio problems.


  • 436215: Fixed an issue on the EFR32xg13 parts that caused the 2Mbps BLE IFS time to be incorrect when receiving very short packets.

  • 443144: Fixed the module specific config libraries for the xGM210xA modules: BGM210LA22JIF, BGM210LA22JNF, BGM210PA22JIA, BGM210PA22JNA, BGM210PA32JIA, BGM210PA32JNA, MGM210LA22JIF, MGM210LA22JNF, MGM210PA22JIA, MGM210PA22JNA, MGM210PA32JIA, MGM210PA32JNA. Without this change these modules would assert with RAIL_ASSERT_INVALID_MODULE_ACTION.


  • 425464: Improved interoperability with many common devices for the 1Mbps Viterbi BLE PHY on the EFR32xG13 chips. Note that this does revert a previous change to improve interoperability from changelist_2_6_4 that attempted to improve interoperability with a few specific devices. For best interoperability we recommend using the RAIL_BLE_ConfigPhy1Mbps() standard PHY.

  • 431229: Resolved an issue on EFR32xG1x devices which could cause the transmit power to be incorrect when using the low power 2.4GHz PA (RAIL_TX_POWER_MODE_2P4_LP).



  • 337468: Fixed an issue where calling RAIL_Sleep() if there were no RAIL events pended would not stop and synchronize the clock source as requested but would return success indicating it had. The clock source will now be properly stopped and synchronized even if there are no events pending and it will be the user's responsibility to wake up on time.

  • 337468: Fixed an issue where calling RAIL_Wake() without a successful call to RAIL_Sleep() first could cause the clock source to drift even when using RAIL_SLEEP_CONFIG_TIMERSYNC_ENABLED.

  • 389462: Fixed an issue with RAIL_Calibrate() in multiprotocol, which would return RAIL_STATUS_INVALID_STATE if it is called with an inactive railHandle. Now, RAIL_Calibrate() will make the given railHandle active, if not already, and perform calibration.

  • 389462: Fixed an issue with RAIL_Calibrate() where after completing calibration the radio would no longer be able to receive any packets, sometimes, until it was reset.

  • 396786: Added support for the following EFR32xG21-based modules: BGM210L022JIF1, BGM210L022JIF2, BGM210L022JNF1, BGM210L022JNF2, BGM210LA22JIF1, BGM210LA22JIF2, BGM210LA22JNF1, BGM210LA22JNF2, BGM210P022JIA1, BGM210P022JIA2, BGM210P022JNA2, BGM210P032JIA1, BGM210P032JIA2, BGM210P032JNA2, BGM210PA22JIA1, BGM210PA22JIA2, BGM210PA22JNA2, BGM210PA32JIA1, BGM210PA32JIA2, BGM210PA32JNA2, MGM210L022JIF1, MGM210L022JIF2, MGM210L022JNF1, MGM210L022JNF2, MGM210LA22JIF1, MGM210LA22JIF2, MGM210LA22JNF1, MGM210LA22JNF2, MGM210P022JIA1, MGM210P022JIA2, MGM210P022JNA2 MGM210P032JIA1, MGM210P032JIA2, MGM210P032JNA2 MGM210PA22JIA1, MGM210PA22JIA2, MGM210PA22JNA2 MGM210PA32JIA1, MGM210PA32JIA2, MGM210PA32JNA2

  • 401826: Fixed several issues and race conditions with RAIL_ScheduleRx() window end handling and event reporting to conform to its intended design:

  • 406276: Restored ability for RAIL_StartCcaCsmaTx() and RAIL_StartCcaLbtTx() to perform an immediate transmit when their respective RAIL_CsmaConfig_t::csmaTries or RAIL_LbtConfig_t::lbtTries is 0. This functionality was improperly removed in 2.6.0.

  • 407047: Fixed an EFR32xG21 issue where CSMA/LBT CCA durations were significantly shorter than specified.

  • 408096: Fixed the 802.15.4 ACK turnaround time on the EFR32xG21 platform. Due to a calculation error this was actually 18 us too short which could cause interoperability problems.

  • 414257: Added RAIL_TX_POWER_LEVEL_MAX which can be used to set the max PA power level across PA's. RAIL_TX_POWER_LEVEL_INVALID was added in 2.7.0 as the value 255. Some customers were using 255 to set max power across PA's with RAIL_SetTxPower, which previously worked, but will now return an error.



  • Corrected the frequencies used by Z-Wave in the China, Malaysia, and India regions to match the specification. China was using the EU frequencies, Malaysia was using 868.10 MHz, and India was not applying the required 20 kHz offset to the R1 channel.


  • Fix an issue on the EFR32xG21 where the medium power and low power PAs might not complete ramping and end up transmitting at a lower power than desired.

  • Improved interoperability of the BLE 1Mbps PHY on EFR32xG13 devices.

  • Improved performance of OOK PHYs.

  • Updated packet trace format to include extra information for BLE packets.



  • Updated the PA curves on the EFR32xG21 chips to slightly improve transmit power accuracy.

  • Resolved an issue where RAIL_GetChannelHoppingRssi would return an RSSI value even if receive was disabled.

  • Resolved an issue where RAIL_GetChannelHoppingRssi would not update the RSSI value while receiving packets.

  • Resolved an issue in multiprotocol where an absolute event with a non zero slip time would always work even if scheduled in the past.


  • Resolved an issue on the EFR32xG21 platform that could cause the chip to hang when coming out of a reset if RAIL_Idle() was called at the wrong time.

  • Added RAIL_GetChannelHoppingRssi API to allow the user to read the RSSI from each channel when channel hopping is enabled.

  • Fixed an issue where CRC-failed packets received with RAIL_RX_OPTION_IGNORE_CRC_ERRORS would be reported with RAIL_RX_PACKET_READY_SUCCESS instead of RAIL_RX_PACKET_READY_CRC_ERROR when the RAIL_EVENT_RX_FRAME_ERROR event isn't enabled.

  • Fixed an issue on the EFR32xG21 platform that caused the chip to incorrectly compute the PA ramp time at high power levels. If this happened, the ramp time would be higher than expected and cause large delays in the RAIL_StateTiming_t::rxToTx time which is used for sending ACK packets.

  • Fixed an issue on the EFR32xG21 platform that could cause erroneous Rx overflow events and failed receives when using the 125Kbps BLE coded PHY.


  • Fixed an issue causing the receive antenna to always be reported as antenna 0 when using receive antenna diversity.

  • Added alternative APIs for calculating receive timestamps, which give correct results for Long-Range BLE: RAIL_GetRxTimeFrameEndAlt, RAIL_GetRxTimePreambleStartAlt, RAIL_GetRxTimeSyncWordEndAlt.

  • Fixed an issue where receive events could corrupt the transmit packet length in frame type based length mode if they came in between the start transmit call and the actual transmit.

  • Fixed an Auto-ACK problem where ACKs were being sent for CRC error frames when RAIL_RX_OPTION_IGNORE_CRC_ERRORS is in effect.

  • Fixed a math error that could cause the RAIL_CsmaConfig_t::ccaDuration to be shorter than requested. This would happen whenever the (ccaDuration * rx_baudrate) exceeded the size of a 32 bit integer.

  • Fixed an issue in the multiprotocol RAIL library where the RAIL_GetTxPower() function could return the wrong output power if called with any RAIL handle other than the active one. We will now return the actual power that would be set if that protocol is active.

  • Fixed the PA conversion code so that it better handles error conditions and will not trigger a fault when given NULL parameters.

  • Added new API to retrieve the channel index of the most recent Beam packet accepted: RAIL_ZWAVE_GetBeamChannelIndex.

  • Added a new RAIL_DelayUs() API for short blocking delays using the RAIL time base.

  • Fixed a problem where state timings would not properly be updated when switching if both protocols used the same channel configuration structure.

  • Fixed an issue on the EFR32xG14 series that prevented Rx antenna diversity from functioning properly. This was introduced in the RAIL 2.5.0 release.

  • Restored pre-2.5.0 behavior with RAIL_SetRxFifoThreshold() to disable threshold events from occurring when passed an rxThreshold of the FIFO's size or larger. A 2.5.0 change allowed such rxThreshold settings to cause the event to fire when the buffer became full, though it's been mis-documented as one byte away from becoming full for quite a while – something that was never actually implemented and is now removed from the documentation.

  • Fixed RAIL_StartCcaCsmaTx() and RAIL_StartCcaLbtTx() to return RAIL_STATUS_INVALID_PARAMETER when passed invalid configuration parameters in their respective RAIL_CsmaConfig_t or RAIL_LbtConfig_t, whose documentation has been updated accordingly. In earlier releases the requested operation would proceed with an invalid or incomplete hardware configuration, resulting in undefined behavior.


  • Worked around a BLE longrange problem where Rx abort could cause deafness.


  • Added a channel hopping feature with RAIL_ConfigRxChannelHopping and RAIL_EnableRxChannelHopping. This feature allows users to specify a list of channels to scan over during receive. This feature allows for much faster scanning with less delay (about 100us) than simply repeatedly calling RAIL_StartRx() with different channels.

  • Included two default transmit power curves in the library: RAIL_TxPowerCurvesDcdc and RAIL_TxPowerCurvesVbat. When the pa-conversions plugin is used, one of these can be passed to the plugin, based on the way the power amplifier is powered.

  • Added the ability to specify a Link Quality Indicator (LQI) conversion callback with RAIL_ConvertLqi such that the hardware's LQI value can be changed before application consumption of that value.

  • Fixed an issue where RAIL_StopTxStream() was taking an extended amount of time to complete.

  • Certain received packet details in RAIL_RxPacketDetails_t, which were formerly available only for successfully received packets, are now also available for unsuccessfully received packets.

  • RAIL_DataMethod_t and related documentation have been updated to reflect that many FIFO_MODE concepts can now be used in PACKET_MODE, and the distinction between these modes has become nearly invisible for transmit. Also eliminated the previous restriction that both receive and transmit RAIL_DataMethod_t must match in the RAIL_DataConfig_t passed to RAIL_ConfigData().

  • RAIL_ConfigData() no longer resets the receive FIFO when switching to RAIL_DataMethod_t::FIFO_MODE.

  • Added a new RAIL_TxOptions_t option RAIL_TX_OPTION_CCA_PEAK_RSSI to allow the user to use the peak RSSI instead of the average RSSI over the CCA period during CSMA and LBT transmits. This is only supported on EFR32xG12 and newer silicon.

  • Added a new RAIL_TxOptions_t option RAIL_TX_OPTION_ALT_PREAMBLE_LEN to allow the user to transmit with a runtime-specified preamble length. This alternate preamble length is set with RAIL_SetTxAltPreambleLength.

  • Added Z-Wave PHY configurations and functionality to the RAIL library.

  • Fixed an issue that could cause register corruption in very rare conditions due to a bus access race condition. The specific registers impacted were limited to those related to the radio and the corruption was most likely when running the coherent IEEE802.15.4 PHY on the EFR32xG12 and EFR32xG13 platforms. On other platforms and PHY configurations the issue is possible though very unlikely and never observed (id: 317234).

  • Resolved a multiprotocol scheduler issue that could cause some interrupted events to not be reported to the caller. Since these events never run there are no other related events either so state machines relying on RAIL events could get stuck in invalid states (id: 341124).

  • Enhanced RAIL_SetRxFifoThreshold() and RAIL_SetTxFifoThreshold() to now support a threshold value of RAIL_FIFO_THRESHOLD_DISABLED to explicitly disable a threshold previously established.

  • Fixed a documentation issue where a variety of RAIL APIs were incorrectly shown as "Referenced by RAIL_CopyRxPacket()".


  • Fixed an issue with RAIL_Sleep() that could cause the wake event to be set very far in the future. This would prevent waking at the proper time and cause problems for the application.

  • Fixed an issue in the multiprotocol library where the txToRxSearch time set by RAIL_SetStateTiming() would be lost after a protocol switch if there were no timings stored in the channel configuration.

  • Fixed an issue preventing radio coexistence transmit abort counter from incrementing.

  • Fixed radio coexistence HAL_CONFIG support for shared priority and shared request.



  • Fixed one case where calling RAIL_Idle() with the mode set to RAIL_IDLE_FORCE_SHUTDOWN could cause us to output partial packet trace appended information.

  • Deferred multiprotocol event failures until just before the event must start when the expected runtime of a task causes it to not fit. These were previously reported immediately even though future tasks could change.


  • Added a RAIL_CopyRxPacket() helper for use after RAIL_GetRxPacketInfo().

  • Added a fast, but inconsistent, transition times mode. This can be activated by setting state timings to 0.

  • Resolved a potential receive FIFO corruption that could occur when calling RAIL_HoldRxPacket() or RAIL_PeekRxPacket().

  • A multi-timer API was added that allows for multiple software timers all driven off the one hardware timer. This must be explicitly enabled and will use more code than the standard APIs, but can be done through RAIL_ConfigMultiTimer(). Once in use, all timer APIs must use the multi timer versions to prevent conflicts with the hardware timer.

  • Added diagnostic functions RAIL_Verify() and RAIL_ConfigVerification() to provide a means of verifying internal radio memory contents.

  • Added alternative calibration APIs to RAIL_Calibrate, for potential code size savings: RAIL_CalibrateTemp, RAIL_CalibrateIr, and RAIL_ApplyIrCalibration.

  • Fixed an issue where requesting a small fixed CSMA backoff could result in a very large value from being selected instead.

  • Made PHY configuration improvements for BLE and Zigbee on the efr32xg14 platform.


  • In FIFO mode on the EFR32 the FIFO could only be read after 8 bytes were received. This restriction has now been lifted though the user must be careful and understand that in certain cases they could be reading appended information and not packet bytes.

  • On the EFR32XG14 some BLE packets showed up with invalid timestamps. These are now filtered and reported as aborted to the user so that the stack does not time sync to an invalid timestamp and lose the connection.

  • Fixed an issue where state transition times would not be recomputed when changing the PA ramp time on the fly.

  • Fixed a regression in 2.1.1 that caused Frame Type based length configurations to lock up the receiver. There was an issue where bits in the byte that were not supposed to be a part of the frame type were being included some times and could cause problems in the receive processing logic.

  • Prevented RAIL_StartRx() from resetting the receive FIFO. This was a legacy feature that was not documented and, though it generally worked, would cause problems to users processing deferred receive events or users that called RAIL_StartRx() in an interrupt disabled context. If this behavior was required it can be replicated by idling the radio and then calling RAIL_ResetFifo() with rxFifo set to true before any calls to RAIL_StartRx().

  • Fixed an issue in the RAIL_IEEE802154_SetAddresses() function that caused it to never set any long address except for the first one and to set that one to the value given in the final long address entry.

  • Updated the documentation for the IEEE 802.15.4 and BLE protocol functions to show properly usage with the new RAIL 2.0 API.

  • Dynamic Multiprotocol fixes:

    • Added support for each protocol having auto ACK enabled by allocating space for independent ACK buffers.

    • Ensured that the sync word is properly output in BLE Long Range no matter when the packet data is loaded into the transmit FIFO.

    • Prevented the sync word in packet trace feature from being turned on in Zigbee when it's enabled by BLE.


  • Removed unimplemented functions RAIL_GetActiveChannelConfig() and RAIL_GetActiveChannelConfigEntry().


  • RAIL_PauseTxAutoAck() was internally pausing the Rx AutoAck logic. This has now been corrected.

  • EFR32XG12 and EFR32XG13 devices were detecting a high number of false 15.4 sync words. Even though these packets were eventually filtered they would show up on PTI. In 2.1.1 there should be significantly fewer of these packets as some of this was caused by a bug in a configuration algorithm.

  • Channel power limits for BLE PHYs were not always being respected. This could have caused us to use a power which might result in certification issues.

  • The RAIL_StateBuffer_t type was incorrectly sized resulting in a waste of RAM for RAIL applications. This has now been trimmed down to the actual size required.




  • Added new BLE radio configurations for EFR32xG13 parts to fix a transmit overshoot issue on the coded PHY configurations for BLE Long Range.

  • Fixed DCDC voltage droop during RAIL_RfInit()

  • Added an API (RAIL_EnablePaCal()) that enables loading of chip to chip PA calibration data.


  • Fixed an issue where RAIL_RfStateGet() would mistakenly return RAIL_RF_STATE_IDLE instead of RAIL_RF_STATE_TX when a Transmit operation's LBT is active.

  • Added an API (RAIL_SetAbortScheduledTxDuringRx) that sets the behavior when a scheduled TX fires during an RX or ACK. If the API is passed false, TX's will be delayed until the RX (or ACK to the RX) is complete. That behavior is the default and what always happened previously. Passing the function true however will abort scheduled TX's that fire during the RX (or ACK to the RX) and fire the RAILCb_TxRadioStatus callback.

  • Added new RAILCb_AssertFailed callback to give the flexible handling of asserts within RAIL. This includes defines of assert codes and error reasons in rail_assert_error_codes.h. The default implementation hangs in an infinite loop.

  • Added RAIL_ENUM define to override enum size ambuiguity in the ARM EABI by making them actually a uint8_t. For documentation purposes they are still shown as enums.

  • Added new TX options: removeCrc, to override whether CRC is sent; and syncWordId, to choose which SYNC word to transmit when multiple SYNC words are configured.

  • Added new RX option: RAIL_RX_OPTION_ENABLE_DUALSYNC, which allows multiple SYNC words to be searched for on PHYs that support it.

  • Added RAIL_PeekRxPacket to allow reading part of a packet before it has been fully received.

  • Changed BER Test functionality in RAILTest such that if a RX overflow is detected (due to the incoming datarate being too high), the test now aborts and displays an appropriate status message.

  • Fixed an issue where the code could hang in a RX overflow state when receiving incoming data streams.

  • RAIL_TxToneStart() and RAIL_TxStreamStart() now idle the radio before transmitting.

  • Fixed an issue where calling RAIL_TimerSet() while in the middle of a stream or tone transmission could lock up the radio.

  • Added new frequency offset related functions, RAIL_GetRxFreqOffset and RAIL_SetFreqOffset, and the associated RAIL_FrequencyOffset_t type definition.


  • Fixed an issue in 1.5.1 that would cause scheduled receive, scheduled transmit, and RAIL timer operations to fail on EFR32xG12 with a relative delay of 0.

  • Fixed an issue in 1.5.1 that would cause scheduled receive and scheduled transmit to fail if called with an absolute time from [0, rxWarmTime) or [0, txWarmTime) respectively.

  • Fixed an issue where a failed scheduled transmit operation would prevent any transmit from succeeding until RAIL_RfIdle() or RAIL_RfIdleExt() were called.

  • Fixed an issue in 1.5.1 where calling idle while looking for an ACK could cause the radio to get stuck in the receive state.


  • Added official support for the EFR32xG12 parts through a new librail_efr32xg12.a version of the library.

  • Added RAIL_SetRxOptions API for configuration of receive options, such as RAIL_RX_OPTION_STORE_CRC.

  • Increase transmit and receive fifo sizes to 512 bytes for all EFR32xG1 parts. This impacts both packet and fifo modes.

  • Added RAIL_RxDataSource_t::RX_DEMOD_DATA in order to receive demodulated data via FIFO method.

  • Shortened the duration that the transmit buffer lock in RAIL_TxDataLoad() is held, as it was overprotective. RAIL will still report an error if the application attempts to manipulate the transmit buffer while actively transmitting data.

  • Improved state transition timings for enhanced precision and accuracy. To improve precision we have switched to a more stable receive complete event since our previous trigger could jitter for certain radio configurations. To improve accuracy we measured and removed PHY specific overhead for BLE applications. Note that this measurement was BLE specific and does not completely correct accuracy on any arbitrary PHY configuration. For custom PHY configurations you will still have to manually calibrate out any offsets by measurement and any previous measurements are likely different now.

  • Moved BER test implementation out of the RAIL library and into RAILTest. Deprecated the existing BER test functions in the RAIL API. With BER test code now existing in RAILTest, you must use version 2.2.1 or later of the radio configurator.

  • Disabled receive buffer overflow and transmit buffer underflow as BUFC_IRQHandler() events. These events now only occur in FRC_IRQHandler().

  • Sped up RAIL transmit and receive buffer read/write operations.

  • Fixed a race condition that could cause the receive packet callback to be delayed until the next receive packet event.


  • Added other methods of Data Management. The application can configure RAIL to provide/retrieve data via FIFO method.

  • The new FIFO method of data management brings with it two new callbacks: RAILCb_TxFifoAlmostEmpty(), and RAILCb_RxFifoAlmostFull(). Note that you must implement these new callbacks or stub them out if you do not intend to use them.


  • Fixed a bug in how we handled IEEE 802.15.4 data request packets. Specifically, we were not issuing the RAILCb_IEEE802154_DataRequestCommand() callback for data request packets that were sent with MAC security enabled.

  • Fixed a bug where calling RAIL_TxDataLoad() at an inopportune time could cause that and all subsequent such calls to fail.


  • Implemented LQI measurement. The field in RAIL_AppendedInfo_t is now populated on every packet receive.

  • Allow transmit while receive is active, if the channel is the same. After transmitting, the radio will follow the configured state transitions as before.

  • Allow shorter ccaBackoff times if receive is active during the CSMA or LBT process.

  • Allow calling RAIL_RxConfig while receiving.

  • Added new receive event: RAIL_RX_CONFIG_PACKET_ABORTED


  • Fixed a filtering bug in the IEEE 802.15.4 code. We were incorrectly filtering packets with a 0xFFFF source PANID while the coordinator which caused problems in the joining process. The new logic will only use the source PANID for filtering if we are the coordinator, there is no destination address, and the frame type is MAC command or Data.

  • Migrated to Gecko SDK 5.0, including the new em_core APIs for interrupt enabling and disabling. This adds required dependencies on the CORE_EnterCritical() and CORE_ExitCritical() functions.

  • Added new RSSI functions for hardware and software averaging: RAIL_StartAverageRSSI(), RAIL_GetAverageRSSI(), RAIL_AverageRSSIReady(), RAIL_PollAverageRSSI().

  • Added new RSSI callback: RAILCb_RssiAverageDone().

  • Added the ability to switch between multiple BLE phys, including 2Mbps phys, on chips that support the new phys.


  • Added support for the EFR32MG12P part family with larger RAM and Flash size variants along with some new chip features.

  • Renamed anything that was just efr32 in the previous releases to efr32xg1 to differentiate it from the new efr32xg12 family of parts.

  • Add support for the new BLE 2MBit PHY to the BLE acceleration and configuration APIs on EFR32xG12 chips.

  • Better optimize IR Calibration run times for all EFR32xG1 parts. You must use version 0.69 or later of the radio configurator.


  • Added RAIL_SetPtiProtocol() and RAIL_PtiProtocol_t. This function allows the application to configure RAIL's packet trace interface to output protocol specific data.

  • Fix BER functions to operate at 1Mbps data rates.

  • RAIL_RfIdle() does not clear the transmit buffer anymore. RAIL_TxDataLoad() resets the transmit buffer with every packet set. This fixes the case where RAIL_RfIdle() is called after RAIL_TxDataLoad().

  • Fixed bug when using fixed packet lengths configured via the Radio Configurator. RAIL_TxStart() will not overwrite the configured fixed length to the amount of data loaded by RAIL_TxDataLoad().

  • Fixed bug in RADIO_PA_Init() where ramp times greater than 11.2 ms would be truncated to a very short ramp.


  • Added IEEE 802.15.4 hardware acceleration. The new APIs can be found in protocol/ieee802154/rail_ieee802154.h. Documentation for these APIs can be found in IEEE 802.15.4. This includes a new callback: RAILCb_IEEE802154_DataRequestCommand().

  • Added Auto Ack hardware acceleration. Documentation for these APIs can be found in Auto-ACK.

  • Added RAIL_TxStartWithOptions(). This new API takes a pointer to RAIL_TxOptions_t that contains options to modify the upcoming transmit.

  • Increased minimum state transition time to 100 us.


  • Added RAIL_AppendedInfo_t::isAck


  • Added BLE hardware acceleration. The new APIs can be found in protocol/ble/rail_ble.h. Documentation for these APIs can be found in BLE.

  • Added RAIL_ScheduleRx() and RAIL_ScheduleRxConfig_t. This allows the application to schedule a RX window using the RAIL timebase.

  • Added RAIL_TIME_DISABLED enum to RAIL_TimeMode_t.

  • Added an extended idle function which gives you more control of how the radio is idled. See RAIL_RfIdleExt() and RAIL_RfIdleMode_t for more details.



  • Added an extended radio status callback that supports up to 32 different status reasons (RAILCb_RxRadioStatusExt()). You may implement this instead of RAILCb_RxRadioStatus() or continue using the old version if you do not need access to more than the first 8 status values.


  • Added FEM control signals

  • Added RAIL_SetPaCTune in order to tune the PA capacitor value for TX and RX.



  • Added ability to reset demod.


  • Fixed register settings for BER testing.

  • Fixed packet buffer for contents larger than 170 bytes.


  • Presented worst case RfSense wake period


  • Optimized address filtering code for operation at higher data rates.

  • Clarified data rate limitations of address filtering.


  • Added RAIL_SetTime() in order to allow the user to change the RAIL timebase with microsecond granularity.

  • Removed spurious calls to RAIL_RxRadioStatus() with the RAIL_RX_CONFIG_BUFFER_OVERFLOW argument, which were happening when receive was aborted due to events such as address filtering failures.

  • Fixed incorrect PA output power calculations.


  • Allow RAIL_RxStart() and RAIL_TxStart() to not error if the radio is heading to idle after a call to RAIL_RfIdle(). Application code does not have to wait until the radio is completely idle before calling a receive or transmit operation as long as the radio is heading to idle.


  • Fixed IR calibration such that calibration values are more accurate for radio configurations with datarates below 10Kbps.

  • Fixed IR calibration such that the default calibration value is applied when a better calibration value is unable to be calculated.

  • Added RAIL_CalInit() for calibration initialization.

  • Added BER test API and structures for diagnostic use - RAIL_BerConfigSet(), RAIL_BerRxStart(), RAIL_BerRxStop(), RAIL_BerStatusGet(), RAIL_BerConfig_t, RAIL_BerStatus_t.

  • Enabled DC Calibration during initialization.


  • Fixed CCA timing to prevent invalid CCA failures when starting out of IDLE state.

  • Fixed RX state transitions to TX when ignoring CRC errors. Will properly take the success route when a CRC error occurs while ignoring CRC errors.

  • Fixed TX error state transition after CCA failure.



    • This now accurately represents the callback flag.

    • A frame error is either an invalid crc, a frame coding error, or a variable length error. On detection of a frame error, the radio will proceed to the defined error state.

  • RAIL_SetRxTransitions() and RAIL_SetTxTransitions() APIs added

    • Add ability to configure radio to automatically to transition to a given radio state on completion of a receive or transmit event.

  • RAIL_SetStateTiming() API added

    • State transition times can be configured. The given timestamps will not perfectly match on-air times, due to the RX and TX chain delays, which are dependent on the radio configuration.

  • RAIL_AddressFilterByFrameType() added

    • If address filtering and frame type length decoding are both enabled, this gives the ability to enable or disable address filtering per frame type


  • Return quarter dBm resolution from RAIL_RxGetRSSI(). This changes the return value to an int16_t from an int8_t.

  • Added calibration APIs (Calibration)

    • The RAIL library will notify the application via callback, RAILCb_CalNeeded(), whenever it detects a calibration is needed.

    • An API is provided allowing the application to choose when to calibrate the radio, to pass in a known calibration value, or force a calibration to occur.

  • RAIL_TxPowerSet() returns the power level that can be set which might not match the requested power level.

Beta 1 - November 16, 2015#

  • Exposed EFR32 RF Energy Sensing capability via a RAIL API.

    • This functionality allows the radio to be woken from sleep by a large amount of energy over the air.

  • Added new RAIL Timer APIs (System Timing)

    • This provides access to a hardware timer running at the RAIL timebase. You can use this to implement simple protocol timing that may be needed by your low level radio code.

    • This change also adds a new RAILCb_TimerExpired() that must be implemented by your application.

  • Added APIs to access the bit rate and symbol rate for the current PHY (RAIL_BitRateGet(), RAIL_SymbolRateGet()).

  • Cleaned up RAIL type names so that they all begin with the RAIL_ prefix. This will require updates to existing application code.

  • Initial integration with Simplicity Studio's application builder tools

Alpha 2 - September 14, 2015#

  • Filtering of receive packets based on defined address fields and compare values. See Address Filtering for more details.

  • Added different Pre-Transmit options for the Tx function.

    • Scheduling of packet transmission at an absolute time or after a defined delay.

    • Packet transmission conditional on Clear Channel Assessment (CSMA, LBT).

  • The ability to read RSSI manually with RAIL_RxGetRSSI().

  • Support for building RAIL applications using both GCC and IAR toolchains.

Alpha 1#

  • Initial release with support for transmit receive and basic radio configuration.