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 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 are no longer supported in RAIL 3.0. Equivalent functionality can be achieved using RAIL 3 PA tables.
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 |
Always returns verbose info | | RAIL_IsInitialized() | sl_rail_is_initialized() | bool | ⚠️ Parameter added: sl_rail_handle_t rail_handle | | RAIL_UseDma() | sl_rail_use_dma() | sl_rail_status_t | ⚠️ Parameter added: sl_rail_handle_t rail_handle (first parameter) | | RAIL_CopyDeviceInfo() | sl_rail_copy_device_info() | sl_rail_status_t | Same functionality | | RAIL_DelayUs() | sl_rail_delay_us() | void | 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 | |----------------—|---------------—|----------—|----—| | RAIL_ConvertDbmToPowerSettingEntry() | sl_railcb_convert_dbm_to_power_setting_entry() | sl_rail_status_t | ⚠️ Callback function, uses deci-dBm (parameter name: power_ddbm), takes sl_rail_tx_pa_mode_t parameter | | *(none)* | sl_rail_util_pa_init() | void | ✅ REQUIRED - Must be called before PA config | | *(none)* | sl_rail_util_pa_post_init() | sl_rail_status_t | ✅ REQUIRED - Must be called after sl_rail_init() if sl_rail_util_callbacks is not used. Takes sl_rail_tx_pa_mode_t parameter | | *(none)* | sl_rail_util_pa_init_tx_power_table() | sl_rail_status_t | ✅ New - Initialize Power tables | | sl_rail_util_pa_on_channel_config_change() | sl_rail_util_pa_on_channel_config_change() | void | Parameter RAIL_ChannelConfigEntry_t type changed to sl_rail_channel_config_entry_t | | RAIL_GetPowerSettingTable() | sl_rail_util_pa_get_power_setting_table() | const sl_rail_pa_power_setting_t * | Function renamed | | RAIL_GetTxPowerCurveLimits() | sl_rail_util_pa_get_tx_power_limits() | sl_rail_status_t | Function renamed | | RAIL_InitTxPowerCurvesAlt() | sl_rail_util_pa_init_tx_power_table() | sl_rail_status_t | 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 |
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 |
Time Mode Enums#
RAIL 2.x Enum Value | RAIL 3.0 Enum Value | Value | Notes |
|---|---|---|---|
|
| 0 | Same concept |
|
| 1 | Same concept |
|
| 2 | Same concept |
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 |
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
#includestatements[ ] Add
sl_rail_util_pa_init()call before PA configuration[ ] Update
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_t[ ] Add 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-dBm
Feature-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 AN1127: 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 |
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).
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)Power Units: RAIL 3.0 explicitly uses deci-dBm units (was implicit dBm * 10 in RAIL 2.x)
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 (RAIL 2.x Migration Guide)