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.
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.
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.
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.
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.
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.
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.
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).
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.
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().
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.
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.
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.
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.
467589: Updated default dynamic multiprotocol (DMP) transition timings to make them work with Zigbee and BLE DMP applications work. The previously suggested workaround of adding 30 us to the default transition time using RAIL_SetTransitionTime() is no longer required.
471373: Fixed an issue on the EFR32xG22 where loading IEEE 802.15.4 and BLE PHYs without a reset would cause an assert with error code RAIL_ASSERT_CACHE_CONFIG_FAILED.
471955: Fixed an issue with BGM220 modules that caused an assert, RAIL_ASSERT_INVALID_MODULE_ACTION, when using them in previous releases.
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.
456338: Fixed an issue with RAIL state transitions where an internal timer wrapping could cause incorrect transition times. This error would previously affect a maximum of one packet every 15 minutes.
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.
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.
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.
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.
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).
421410: Fixed an issue introduced in 2.7.1 with TX PTI on EFR32XG13 including an extra byte of appended information, confusing the network analyzer.
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.
When the RX window ends while receiving a packet, it is deferred to the expected RX completion event (which includes aborting that packet when RAIL_ScheduleRxConfig_t::hardWindowEnd is non-zero). Event(s) reported at that time are the same as in the previous case.
379150: Added support to RAIL_Sleep() for the PLFRCO on EFR32xG13 Rev D parts.
357922: Changed the LQI metric for the 2.4GHz IEEE802.15.4 PHY configurations to be scaled from 0 - 255 and to include more data to make it more stable. This can impact existing applications that are using the LQI values returned in prior RAIL versions.
385960: Added information to packet trace for every protocol switch in dynamic multiprotocol telling the user what protocol RAIL has changed to as well the radio event that triggered this switch. This information is visible in Network Analyzer for better debugging of DMP applications.
389439: The EFR32xG13 AoX RAIL library is no longer present as that functionality has been merged into the standard RAIL library for EFR32xG13.
386163: Added support for the radio sending an ACK packet automatically when in Z-Wave mode as long as node ID filtering and Auto-ACK features are enabled and a packet requesting an ACK is sent to the device.
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.
Fixed an issue introduced in 2.6.2 where issuing a RAIL_Idle() with mode RAIL_IDLE_FORCE_SHUTDOWN_CLEAR_FLAGS could sometimes cause the receive FIFO to be corrupted and trigger a RAIL assert with code (RAIL_ASSERT_FAILED_ILLEGAL_RXLEN_ENTRY_STATUS).
Various bug fixes and improvements for the EFR32xG21 parts.
Updated the PA curves on the EFR32xG21 chips to slightly improve transmit power accuracy.
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.
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 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.
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.
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().
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 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).
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.
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 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().
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.
On the transmit side, zero-copy is also now supported by allowing applications to specify their own buffers for the transmit FIFO, eliminating RAIL's former internal fixed-size 512-byte one. See new RAIL_SetTxFifo().
The RAIL_Event_t type was renamed RAIL_Events_t now that multiple events can be presented to the application simultaneously in RAIL's generic events callback, rather than relying on the internal arbitrary order that RAIL imposed previously, which may not match the application's or protocol's expectations.
Event/callback configuration is now managed entirely by RAIL_ConfigEvents(), eliminating the old RAIL_ConfigTx() and RAIL_SetCallbackConfig() APIs.
Channel numbers were increased in range from 8 bits to 16 bits, and channel configurations made much more flexible allowing for multi-band radio configurations and an easy way to specify TX power limits on certain channels that otherwise share a common configuration. See new APIs RAIL_GetActiveChannelConfig() and RAIL_GetActiveChannelConfigEntry() along with changes to RAIL_ConfigChannels().
Protocols using Frame Types to determine packet length are better integrated into the Studio radio configurator and channel configuration. Gone are APIs like RAIL_ConfigFrameTypeLength() and RAIL_EnableAddressFilterByFrameType() whose functionality is now subsumed within channel configurations.
The RAILCb_AssertFailed() callback returns with a RAIL_Handle_t parameter that might be NULL since assert conditions might occur during initialization prior to handle assignment or during multiprotocol switching.
Many APIs with pointer arguments were clarified to use const pointers where the API doesn't modify the data pointed to.
All API names were updated to follow a strictly VerbNoun convention.
RAIL_TxOptions_t has been converted to a 32-bit bitmask, so that RX and TX options are both represented as bitmasks. A single TX option mask is passed into each TX call.
RAIL_ConfigEvents() now also takes two bitmasks, one to indicate which events should be affected, and the second indicating which of those events should be enabled.
Similarly, RAIL_ConfigRxOptions() takes two bitmasks, one to indicate which options to update, and the second indicating the desired value of those options, which affect all future receives.
Options for removing RX appended info and ignoring CRC are now controlled exclusively by RAIL_ConfigRxOptions().
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.
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.
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
Added new RAIL_TxConfig API, along with more transmit events: RAIL_TX_CONFIG_CHANNEL_CLEAR, RAIL_TX_CONFIG_CCA_RETRY, RAIL_TX_CONFIG_START_CCA
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.
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 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 RAIL_RX_CONFIG_TIMEOUT and RAIL_RX_CONFIG_SCHEDULED_RX_END
Added RAIL_TX_CONFIG_TX_ABORTED and RAIL_TX_CONFIG_TX_BLOCKED
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.
Fix typo in RAIL_StreamMode_t : PSUEDO_RANDOM_STREAM to PSEUDO_RANDOM_STREAM
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.
RAIL_RX_CONFIG_INVALID_CRC changed to RAIL_RX_CONFIG_FRAME_ERROR
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.