RAIL 3.0 Migration Guide#
This document provides a comprehensive guide for migrating from RAIL 2.x to RAIL 3.0, covering both API-level and feature-level changes. The guide is formatted with tabular references similar to AN1113: Porting RAIL Applications to RAIL Version 2.x for easy lookup and comparison.
Table of Contents#
Overview#
RAIL 3.0 introduces significant API improvements with a consistent naming convention
(sl_rail_ prefix), more flexible FIFO management, and better initialization control.
While the migration requires updating function and type names, the compatibility layer can
ease the transition. Key behavioral changes focus on channel configuration, FIFO management,
and scheduled receive events.
Key Changes Summary#
Naming Convention: All APIs use
sl_rail_prefix instead ofRAIL_PA Plugin: New plugin architecture (
sl_rail_util_pa) - not compatible with RAIL 2.x PA pluginrail_util_paPA Automode: PA automode APIs such as
RAIL_EnablePaAutoMode()are no longer supported in RAIL 3.0. Equivalent functionality can be achieved using RAIL 3 PA tables.PA APIs:
RAIL_ConfigTxPower()needn't be used and PA initialization is done usingsl_rail_set_tx_power_dbm()PA Power Tables: Now supported on all platforms (previously only EFR32xG25 and SixG301)
Channel Configuration: No longer auto-prepares the first channel
FIFO Management: More flexible, can be configured at initialization
API Function Name Changes#
Core RAIL Functions#
RAIL 2.x Function | RAIL 3.0 Function | Return Type | Notes |
|---|---|---|---|
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Parameter removed: 'verbose'; |
|
|
| Same functionality |
|
|
| Parameter order and return type changed: |
|
|
| Same functionality |
|
|
| ⚠️ Parameter added: |
|
|
| ⚠️ Parameter added: |
|
|
| Same functionality |
|
|
| Same functionality |
Timer Functions#
RAIL 2.x Function | RAIL 3.0 Function | Return Type | Notes |
|---|---|---|---|
|
|
| Same functionality |
|
|
| ⚠️ Parameter added: |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| ⚠️ Parameter added: |
|
|
| Same functionality |
MultiTimer Functions#
RAIL 2.x Function | RAIL 3.0 Function | Return Type | Notes |
|---|---|---|---|
|
|
| ⚠️ Parameter added: |
|
|
| ⚠️ Parameter added: |
|
|
| ⚠️ Parameter added: |
|
|
| ⚠️ Parameter added: |
|
|
| ⚠️ Parameter added: |
|
|
| ⚠️ Parameter added: |
Transmit Functions#
RAIL 2.x Function | RAIL 3.0 Function | Return Type | Notes |
|---|---|---|---|
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Function renamed |
|
|
| Same functionality |
|
|
| Function renamed |
|
|
| Function renamed |
|
|
| Function renamed |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Stream mode transmit |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
Receive Functions#
RAIL 2.x Function | RAIL 3.0 Function | Return Type | Notes |
|---|---|---|---|
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| ⚠️ Parameter added: |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Function renamed |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Function renamed |
|
|
| Same functionality |
|
|
| Function renamed |
|
|
| Function renamed |
|
|
| Function renamed |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Function renamed |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
Channel Configuration Functions#
RAIL 2.x Function | RAIL 3.0 Function | Return Type | Notes |
|---|---|---|---|
|
|
| ⚠️ Behavior change: Does not auto-prepare channel |
|
|
| Function renamed |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Function renamed |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
Radio Configuration Functions#
RAIL 2.x Function | RAIL 3.0 Function | Return Type | Notes |
|---|---|---|---|
|
|
| Same functionality |
|
|
| Struct field names changed |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Function renamed |
FIFO Functions#
RAIL 2.x Function | RAIL 3.0 Function | Return Type | Notes |
|---|---|---|---|
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| ⚠️ Behavior change: Allows smaller FIFOs |
|
|
| Same functionality |
Sleep/Timer Sync Functions#
RAIL 2.x Function | RAIL 3.0 Function | Return Type | Notes |
|---|---|---|---|
|
|
| Function renamed |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
Scheduler Functions#
RAIL 2.x Function | RAIL 3.0 Function | Return Type | Notes |
|---|---|---|---|
|
|
| Function renamed |
|
|
| Same functionality |
Calibration Functions#
RAIL 2.x Function | RAIL 3.0 Function | Return Type | Notes |
|---|---|---|---|
|
|
| Function renamed |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Function renamed |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| ⚠️ Parameter added: |
|
|
| Same functionality |
State Timing Functions#
RAIL 2.x Function | RAIL 3.0 Function | Return Type | Notes |
|---|---|---|---|
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| ⚠️ Parameter added: |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
PTI Functions#
RAIL 2.x Function | RAIL 3.0 Function | Return Type | Notes |
|---|---|---|---|
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
Feature Query Functions#
RAIL 2.x Function | RAIL 3.0 Function | Return Type | Notes |
|---|---|---|---|
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Function renamed |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
Address Filter Functions#
RAIL 2.x Function | RAIL 3.0 Function | Return Type | Notes |
|---|---|---|---|
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
Antenna Functions#
RAIL 2.x Function | RAIL 3.0 Function | Return Type | Notes |
|---|---|---|---|
|
|
| Same functionality |
|
|
| Same functionality |
Auto Acknowledgment Functions#
RAIL 2.x Function | RAIL 3.0 Function | Return Type | Notes |
|---|---|---|---|
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
Direct Mode Functions#
RAIL 2.x Function | RAIL 3.0 Function | Return Type | Notes |
|---|---|---|---|
|
|
| Same functionality |
|
|
| Function renamed |
Event Configuration Functions#
RAIL 2.x Function | RAIL 3.0 Function | Return Type | Notes |
|---|---|---|---|
|
|
| Same functionality |
HFXO Compensation Functions#
RAIL 2.x Function | RAIL 3.0 Function | Return Type | Notes |
|---|---|---|---|
|
|
| Same functionality |
|
|
| Callback function |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Callback function |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
Sync Word Functions#
RAIL 2.x Function | RAIL 3.0 Function | Return Type | Notes |
|---|---|---|---|
|
|
| Same functionality |
|
|
| Same functionality |
Thermal Protection Functions#
RAIL 2.x Function | RAIL 3.0 Function | Return Type | Notes |
|---|---|---|---|
|
|
| Same functionality |
|
|
| Same functionality |
Vdet Functions#
RAIL 2.x Function | RAIL 3.0 Function | Return Type | Notes |
|---|---|---|---|
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
RF Sense Functions#
RAIL 2.x Function | RAIL 3.0 Function | Return Type | Notes |
|---|---|---|---|
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
CRC Functions#
RAIL 2.x Function | RAIL 3.0 Function | Return Type | Notes |
|---|---|---|---|
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
Whitening Functions#
RAIL 2.x Function | RAIL 3.0 Function | Return Type | Notes |
|---|---|---|---|
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
Frame Configuration Functions#
RAIL 2.x Function | RAIL 3.0 Function | Return Type | Notes |
|---|---|---|---|
|
|
| Same functionality |
|
|
| Same functionality |
Conversion Functions#
RAIL 2.x Function | RAIL 3.0 Function | Return Type | Notes |
|---|---|---|---|
|
|
| Same functionality |
PA Power Conversion Functions#
RAIL 2.x Function | RAIL 3.0 Function | Return Type | Notes |
|---|---|---|---|
|
|
| ⚠️ Callback function, uses deci-dBm (parameter name: |
(none) |
|
| ✅ REQUIRED - Must be called before PA config |
(none) |
|
| ✅ REQUIRED - Must be called after |
(none) |
|
| ✅ New - Initialize Power tables |
|
|
| Parameter |
|
|
| Function renamed |
|
|
| Function renamed |
|
|
| Function renamed |
TrustZone Functions#
RAIL 2.x Function | RAIL 3.0 Function | Return Type | Notes |
|---|---|---|---|
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
IEEE 802.15.4 Functions#
RAIL 2.x Function | RAIL 3.0 Function | Return Type | Notes |
|---|---|---|---|
|
|
| Same functionality |
|
|
| Function renamed |
|
|
| Function renamed |
|
|
| Function renamed |
|
|
| Function renamed |
|
|
| Function renamed |
|
|
| Function renamed |
|
|
| Function renamed |
|
|
| Function renamed |
|
|
| Function renamed |
|
|
| Function renamed |
|
|
| Function renamed |
|
|
| Function renamed |
|
|
| Function renamed |
|
|
| Function renamed |
|
|
| Function renamed |
|
|
| Function renamed |
|
|
| Function renamed |
|
|
| Function renamed |
|
|
| Same functionality |
|
|
| Function renamed |
|
|
| Function renamed |
|
|
| Function renamed |
|
|
| Same functionality |
|
|
| Function renamed |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Function renamed |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Same functionality |
|
|
| Function renamed |
|
|
| Same functionality |
|
|
| Function renamed |
Type Name Changes#
RAIL 2.x Type | RAIL 3.0 Type | Base Type | Notes |
|---|---|---|---|
|
| Enum (uint8_t) | Same concept |
|
| Struct | Same concept |
|
| Bitfield (uint32_t) | Same concept |
|
|
| Same concept |
|
| Enum (uint8_t) | Same concept |
|
| Struct | Same concept |
|
|
| Same concept |
|
| Enum (uint8_t) | Same concept |
|
| Struct | Same concept |
|
| Enum (uint8_t) | Same concept |
|
| Enum (uint8_t) | Same concept |
|
| Enum (uint8_t) | Same concept |
|
| Enum (uint8_t) | Same concept |
|
| Struct | Same concept |
|
| Struct | Same concept |
|
|
| Same concept |
|
| Enum (uint8_t) | Same concept |
|
| Enum (uint8_t) | Same concept |
|
| Enum (uint8_t) | Same concept |
|
| Enum (uint8_t) | Same concept |
|
| Function pointer | Same concept |
|
|
| Same concept |
|
| Enum (uint8_t) | Same concept |
|
| Enum (uint8_t) | Same concept |
|
| Struct | ⚠️ Field names changed |
|
| Struct | Function renamed |
|
| Enum (uint8_t) | Same concept |
|
| Struct | ⚠️ Simplified structure |
|
|
| ⚠️ Now explicitly deci-dBm |
Consolidating Radio Configurations#
⚠️ Important: In RAIL 3.0, PA initialization is required. You must call
sl_rail_util_pa_init()before configuring TX power. See PA Power Conversion Functions for details, and refer to the Power Amplifier (PA) Migration section for comprehensive PA migration information.
This section provides practical examples comparing radio configuration patterns between RAIL 2.x and RAIL 3.0. These examples demonstrate how to migrate common radio setup scenarios.
Key Differences Summary#
Aspect | RAIL 2.x | RAIL 3.0 | Notes |
|---|---|---|---|
Channel Preparation | Auto-prepares first channel | Must call | ⚠️ Explicit call required |
Power Units | Implicit (dBm * 10) | Explicit deci-dBm | ✅ Clearer documentation |
Struct Fields |
|
| ⚠️ Snake_case + units |
PA settings |
|
| Instead of |
TX Power Setting |
|
| Same functionality with only dBm focus |
Type Names |
|
|
|
Struct Field Name Changes#
sl_rail_tx_power_config_t (formerly RAIL_TxPowerConfig_t)#
RAIL 2.x Field | RAIL 3.0 Field | Type | Notes |
|---|---|---|---|
|
|
| Same |
|
|
| ⚠️ Snake_case + |
|
|
| ⚠️ Added |
sl_rail_tx_power_setting_entry_t (formerly RAIL_TxPowerSettingEntry_t)#
RAIL 2.x Field | RAIL 3.0 Field | Type | Notes |
|---|---|---|---|
|
|
| ⚠️ Snake_case, deci-dBm |
| (removed) | - | ✅ Simplified structure |
| (removed) | - | ✅ Simplified structure |
|
|
| ⚠️ Snake_case |
sl_rail_config_t (formerly RAIL_Config_t)#
RAIL 2.x Field | RAIL 3.0 Field | Type | Notes |
|---|---|---|---|
|
|
| Reserved for app use |
|
|
| Same |
|
| void * | Reserved for app use |
|
| void * | Reserved for app use |
(none) |
|
| ✅ New - FIFO config at init |
(none) |
|
| ✅ New - FIFO config at init |
(none) |
|
| ✅ New - FIFO config at init |
(none) |
|
| ✅ New - FIFO config at init |
(none) |
|
| ✅ New - FIFO config at init |
(none) |
|
| ✅ New - FIFO config at init |
(none) |
|
| ✅ New - FIFO config at init |
Enum Value Changes#
New PA Mode Enums#
RAIL 3.0 Enum Value | Value | Notes |
|---|---|---|
| 0 | 2.4 GHz |
| 1 | Sub GHz |
| 2 | Sub GHz OFDM |
| 3 | Invalid PA mode |
Constant Name Changes#
Status Code Constants#
RAIL 2.x Constant | RAIL 3.0 Constant | Value | Notes |
|---|---|---|---|
none |
| 0x001A | New value |
|
| 0x000E | Same value |
|
| 0x0021 | Same value |
|
| 0x0002 | Same value |
|
| 0x0000 | Same value |
|
| 0x0006 | Same value |
|
| 0x0005 | Same value |
Header File Changes#
RAIL 2.x Include | RAIL 3.0 Include | Purpose |
|---|---|---|
|
| Main RAIL header |
|
| RAIL type definitions |
|
| PA conversion functions |
| (included in main header) | PA curve types |
| (included in main header) | PA curve type definitions |
Component Changes#
RAIL 2.x Component | RAIL 3.0 Component | Purpose | Notes |
|---|---|---|---|
(none) |
| PA power tables | ✅ Required by sl_rail_util_pa |
|
| PA conversion plugin | ⚠️ Not compatible |
Behavioral Changes Summary#
Feature | RAIL 2.x Behavior | RAIL 3.0 Behavior | Impact |
|---|---|---|---|
Channel Configuration |
|
| ⚠️ Must call |
PA Power Tables | Only EFR32xG25 and SixG301 | All platforms supported | ✅ Expanded support |
PA Initialization | Automatic | Must call | ⚠️ REQUIRED explicit call |
PA Power Units | PA-dependent unitless power 'levels' (dBm * 10) | Explicit deci-dBm | ✅ Clearer documentation |
PA Plugin |
|
| ⚠️ Not compatible |
PA settings |
|
| Instead of |
PA Automode |
| Use automode tables provided by | Compile time choice |
RX FIFO/Packet Queue | Shared across protocols, configured via callbacks | Per-protocol FIFOs possible, configurable at init | ✅ More flexible |
Scheduled RX Event |
|
| ⚠️ Different event timing |
Sequencer Images | Image1/Image2 (1-based) | Image0/Image1 (0-based) | ⚠️ Index change |
TX FIFO Size | Minimum size requirement, rounded to power-of-2 | Allows smaller FIFOs, non-power-of-2 treated as linear | ✅ More flexible |
Migration Priority Checklist#
High Priority (Required for Basic Functionality)#
Update all
#includestatementsAdd
sl_rail_util_pa_init()call before PA configurationUpdate
RAIL_ConfigChannels()→sl_rail_config_channels()+sl_rail_prepare_channel()Update all function names (
RAIL_*→sl_rail_*)Update all type names (
RAIL_*→sl_rail_*)Update struct field names (
.voltage→.voltage_mv,.rampTime→.ramp_time_us)Add
sl_rail_util_pa_post_init()aftersl_rail_init(), ifsl_rail_util_callbacksis not used
Medium Priority (Recommended for Best Practices)#
Use convenience APIs (
sl_rail_set_tx_power_dbm(),sl_rail_get_tx_power_dbm())Update PA plugin component (
rail_util_pa→sl_rail_util_pa)Verify power unit conversions (dBm ↔ deci-dBm)
Update enum values (
RAIL_TX_POWER_MODE_*→SL_RAIL_TX_POWER_MODE_*)
Low Priority (Optional Enhancements)#
Configure FIFOs at initialization time via
sl_rail_config_tAdd channel config callback for per-channel PA configuration
Update custom PA curve implementations
Review and update scheduled RX event handling
Quick Reference: Common Migration Patterns#
Pattern 1: Basic Initialization#
RAIL 2.x:
RAIL_Handle_t railHandle;
RAIL_Config_t config = { /* ... */ };
railHandle = RAIL_Init(&config, NULL);RAIL 3.0:
sl_rail_handle_t rail_handle = SL_RAIL_EFR32_HANDLE;
sl_rail_config_t config = { /* ... */ };
sl_rail_init(&rail_handle, &config, NULL);Pattern 2: PA Configuration#
RAIL 2.x:
RAIL_TxPowerConfig_t txPowerConfig = {
.mode = RAIL_TX_POWER_MODE_2P4_GHZ_HP,
.voltage = 3300,
.rampTime = 10,
};
RAIL_ConfigTxPower(railHandle, &txPowerConfig);RAIL 3.0:
sl_rail_util_pa_init(); // REQUIRED
sl_rail_tx_pa_mode_t pa_mode = SL_RAIL_TX_PA_MODE_2P4_GHZ;
sl_rail_util_pa_post_init(rail_handle, pa_mode);Pattern 3: Setting TX Power#
RAIL 2.x:
RAIL_TxPowerConfig_t config;
RAIL_GetTxPowerConfig(railHandle, &config);
RAIL_TxPowerLevel_t level = RAIL_ConvertDbmToRaw(railHandle, config.mode, 200);
RAIL_SetTxPower(railHandle, level);RAIL 3.0:
sl_rail_set_tx_power_dbm(rail_handle, 200); // necesssary API to set power in deci-dBmFeature-Level Changes#
1. Channel Configuration#
RAIL 2.x Behavior:
RAIL_ConfigChannels()automatically prepared the first channel in the configuration
RAIL 3.0 Behavior:
sl_rail_config_channels()only caches the configuration and does not prepare any channelChannel preparation is deferred to the first API call that specifies a channel
To maintain RAIL 2.x behavior, call
sl_rail_prepare_channel()aftersl_rail_config_channels():sl_rail_config_channels(rail_handle, channel_configs[0], NULL); sl_rail_prepare_channel(rail_handle, sl_rail_get_first_channel(rail_handle, channel_configs[0]));
2. Transmit FIFO Configuration#
RAIL 2.x Behavior:
RAIL_SetTxFifo()disallowed transmit FIFOs smaller than a minimum size requirementNon-power-of-2 sizes were rounded down to the next-smaller power-of-2
RAIL 3.0 Behavior:
sl_rail_set_tx_fifo()allows transmit FIFOs smaller than the minimum size (defined bySL_RAIL_MINIMUM_FIFO_BYTES)Non-power-of-2 sizes are treated as linear buffers suitable for packet mode only
Supports
start_offset_bytesparameter for unaligned packet data
3. Receive FIFO and Packet Queue#
RAIL 2.x Behavior:
All protocols shared the same RX FIFO and Packet Queue
RX FIFO and Packet Queue were configured via callbacks
RAIL 3.0 Behavior:
Each protocol can have its own RX FIFO and Packet Queue, or share them
RX FIFO and Packet Queue can be configured at initialization time via
sl_rail_config_tProtocols can share a built-in RX FIFO similar to RAIL 2.x using
sl_rail_builtin_rx_fifo_ptr,sl_rail_bultin_rx_fifo_bytes,sl_rail_builtin_rx_packet_queue_ptrandsl_rail_builtin_rx_packet_queue_entries
4. Scheduled Receive Event#
RAIL 2.x Behavior:
RAIL_EVENT_RX_SCHEDULED_RX_ENDonly occurred based onrxTransitionEndSchedulesetting
RAIL 3.0 Behavior:
SL_RAIL_EVENT_RX_SCHEDULED_RX_ENDalways occurs regardless ofrx_transition_end_schedulesettingThis provides more consistent behavior for scheduled receive operations
5. PA Power Table Support#
RAIL 2.x Behavior:
PA power setting tables were only supported for EFR32xG25 and SixG301 platforms
RAIL 3.0 Behavior:
PA power setting tables are supported for all platforms (not just EFR32xG25 and SixG301)
The boolean
sli_rail_pa_power_tableindicates if PA power tables are in use
Note: RAIL 3.0 PA plugin and RAIL 2.x PA plugin are mutually exclusive and not fully compatible. Migration may require updating PA configuration. Use sl_rail_util_compatible_pa component to aid in selecting the desired PA plugin.
6. Multiprotocol FIFO Management#
RAIL 2.x Behavior:
All protocols in multiprotocol mode shared the same RX FIFO and Packet Queue
RAIL 3.0 Behavior:
Each protocol can have its own RX FIFO and Packet Queue
FIFO configuration is more flexible and can be set per protocol
Default behavior mimics RAIL 2.x for backward compatibility
Power Amplifier (PA) Migration#
📖 For detailed PA information: Refer to Power Amplifier Power Conversion Functions for comprehensive PA customization and implementation details.
This section summarizes the key PA-related changes between RAIL 2.x and RAIL 3.0. RAIL 3.0 introduces a new PA plugin architecture that is not compatible with RAIL 2.x PA plugins.
Component Changes#
RAIL 2.x Component | RAIL 3.0 Component | Notes |
|---|---|---|
(none) |
| ✅ Required by |
|
| ⚠️ Not compatible - requires migration |
⚠️ Important: RAIL 3.0 PA plugin and RAIL 2.x PA plugin are mutually exclusive and not fully compatible. Use sl_rail_util_compatible_pa component to aid in selecting the desired PA plugin.
Header File Changes#
RAIL 2.x Include | RAIL 3.0 Include |
|---|---|
|
|
PA API Changes#
Functionality | RAIL 2.x Function | RAIL 3.0 Function | Notes |
|---|---|---|---|
Channel Config CB |
|
| Parameter |
Get Power (dBm) |
|
| ✅ Convenience API in RAIL 3.0 |
Init Power Tables | Not available |
| ✅ New - Initialize Power tables |
PA Initialization | None (automatic) |
| ✅ Required - Must be called before PA config |
PA Post Init |
|
| ✅ Required - Returns |
PA Ramp Time | Part of |
| ✅ New - Can change ramp time independently |
PA Voltage | Part of |
| ✅ New - Can change voltage independently |
PA Automode |
| (compile-time via table selection) | ⚠️ No runtime API - select automode table at compile time |
Power Table Convert |
|
| ⚠️ Callback function, uses deci-dBm, takes |
Set Power (dBm) |
|
| ✅ Convenience API in RAIL 3.0 |
PA Type Changes#
RAIL 2.x Type | RAIL 3.0 Type | Notes |
|---|---|---|
(none) |
| ✅ New - Simplified PA mode enum (2P4_GHZ, SUB_GHZ, SUB_GHZ_OFDM). Used by |
|
| Type name changed |
|
| Struct name changed |
|
| Type name changed |
|
| Enum name changed (detailed power modes: HP, MP, LP, etc.) |
|
| ✅ Structure simplified |
|
| ✅ Now explicitly deci-dBm |
PA Struct Field Changes#
sl_rail_tx_power_config_t (formerly RAIL_TxPowerConfig_t):
.voltage→.voltage_mv(added_mvsuffix).rampTime→.ramp_time_us(snake_case +_ussuffix)
sl_rail_tx_power_setting_entry_t (formerly RAIL_TxPowerSettingEntry_t):
.paPowerSetting→.pa_power_setting(snake_case).minPaPowerDbm→ (removed) (simplified structure).maxPaPowerDbm→ (removed) (simplified structure).currentPaPowerDbm→.curr_pa_power_ddbm(snake_case, deci-dBm)
Platform Support#
RAIL 2.x: PA power tables only supported on EFR32xG25 and SixG301 platforms.
RAIL 3.0: PA power tables supported on all platforms (expanded support).
PA Settings and Configuration#
RAIL 2.x Behavior:
RAIL_ConfigTxPower()was used to configure PA mode, voltage, and ramp timeAll PA settings were configured together in a single call
RAIL 3.0 Behavior:
sl_rail_util_pa_post_init()replacesRAIL_ConfigTxPower()and configures initial PA settings (voltage, ramp time)If only one parameter needs to change after initialization, use:
sl_rail_set_tx_pa_ramp_time()- to change only the PA ramp timesl_rail_set_tx_pa_voltage()- to change only the PA voltage
sl_rail_util_pa_post_init()will be called implicitly ifsl_rail_util_callbackscomponent is usedDefault values for voltage and ramp time are provided by
sl_rail_util_pa_config.h
PA Automode#
RAIL 2.x Behavior:
RAIL_EnablePaAutoMode()runtime API allowed switching between multiple PAs based on requested power levelAutomode was enabled/disabled at runtime
RAIL 3.0 Behavior:
Automode is now a compile-time choice through the automode table provided by
sl_rail_util_pa_tablescomponentSelect an automode table via
SL_RAIL_UTIL_PA_TABLE_HEADER(e.g.,sl_rail_util_pa_dbm_powersetting_mapping_table_automode_0_10dbm.h)The automode table automatically selects the appropriate PA based on the requested power level
No runtime API call is needed - the selection happens automatically when setting power via
sl_rail_set_tx_power_dbm()This compile-time approach provides better optimization and reduces runtime overhead
PA Power Units#
RAIL 2.x Behavior:
PA power was represented as unitless "power levels" that were PA-dependent
Values were implicitly in units of dBm * 10 (deci-dBm), but this was not clearly documented
Different PAs had different power level ranges, making it difficult to compare across platforms
RAIL 3.0 Behavior:
Power is explicitly represented in deci-dBm units (dBm * 10)
sl_rail_tx_power_tis now explicitlyint16_trepresenting deci-dBmAll power-related APIs (
sl_rail_set_tx_power_dbm(),sl_rail_get_tx_power_dbm()) use deci-dBmThis makes power values consistent and comparable across all platforms and PAs
Example: 20.0 dBm is represented as 200 deci-dBm
Key Migration Points#
Initialization Required: Must call
sl_rail_util_pa_init()before configuring TX powerPost-Init Required: Must call
sl_rail_util_pa_post_init()aftersl_rail_init()(ifsl_rail_util_callbacksis not used). Call toRAIL_ConfigTxPower()is not necessary now.Individual PA Settings: Use
sl_rail_set_tx_pa_ramp_time()orsl_rail_set_tx_pa_voltage()if only one parameter needs to change after initializationPower Units: RAIL 3.0 explicitly uses deci-dBm units (was implicit dBm * 10 in RAIL 2.x)
PA Automode: Automode is now a compile-time choice via table selection, not a runtime API
Plugin Incompatibility: RAIL 3.0 PA plugin is not compatible with RAIL 2.x PA plugin - full migration required
Behavioral Changes#
1. Initialization Changes#
RAIL 2.x:
FIFO configuration happened via callbacks after initialization
Channel configuration automatically prepared the first channel
RAIL 3.0:
FIFO configuration can happen at initialization time via
sl_rail_config_tChannel configuration must be explicitly prepared
Provides more control over initialization sequence
2. Event Callback Signature#
The event callback signature remains the same, but the type names have changed:
RAIL 2.x:
void (*eventsCallback)(RAIL_Handle_t railHandle, RAIL_Events_t events)RAIL 3.0:
void (*sl_rail_events_callback_t)(sl_rail_handle_t rail_handle, sl_rail_events_t events)
3. IEEE 802.15.4 PHY Configuration#
RAIL 2.x:
PHY configurations were constants like
RAIL_IEEE802154_Phy2p4GHz
RAIL 3.0:
PHY configurations are constants like
sl_rail_ieee802154_phy_2p4_ghzNaming convention changed from camelCase to snake_case
Migration Tips#
Use Compatibility Layer: RAIL 3.0 provides a compatibility layer that maps RAIL 2.x function names to RAIL 3.0 functions. This can be enabled/disabled via the
SLI_LIBRAIL_ALIASpreprocessor define.Update Type Names: Systematically replace all
RAIL_prefixed types withsl_rail_prefixed types.Update Function Names: Replace all
RAIL_prefixed function names withsl_rail_prefixed names.Channel Configuration: After migrating to
sl_rail_config_channels(), explicitly callsl_rail_prepare_channel()if you need the first channel prepared immediately.FIFO Configuration: Consider moving FIFO configuration to initialization time using
sl_rail_config_tfields for better control.Test Thoroughly: Pay special attention to:
Multiprotocol applications (FIFO sharing behavior)
Scheduled receive operations (event timing)
PA power configuration (may require updates)
Compatibility Notes#
RAIL 3.0 maintains backward compatibility with RAIL 2.x through the compatibility layer when
SLI_LIBRAIL_ALIASis definedThe compatibility layer provides function aliases and wrapper functions
Some behavioral changes (like channel configuration) may require code updates even with compatibility layer
Notes#
⚠️ Indicates a breaking change or important migration note
✅ Indicates an improvement or new feature
All function signatures assume standard parameter order unless noted
For detailed API documentation, refer to RAIL 3.0 Doxygen documentation
Document Version: 1.0
Last Updated: Based on RAIL 3.0 release
Reference: Similar format to AN1113: Porting RAIL Applications to RAIL Version 2.x