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#

  1. Overview

  2. API Function Name Changes

  3. Type Name Changes

  4. Consolidating Radio Configurations

  5. Struct Field Name Changes

  6. Enum Value Changes

  7. Constant Name Changes

  8. Header File Changes

  9. Component Changes

  10. Behavioral Changes Summary

  11. Migration Priority Checklist

  12. Quick Reference: Common Migration Patterns

  13. Feature-Level Changes

  14. Power Amplifier (PA) Migration

  15. Behavioral Changes

  16. Migration Tips

  17. Compatibility Notes


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 of RAIL_

  • PA Plugin: New plugin architecture (sl_rail_util_pa) - not compatible with RAIL 2.x PA plugin rail_util_pa

  • PA 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 using sl_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

RAIL_GetRadioState()

sl_rail_get_radio_state()

sl_rail_radio_state_t

Same functionality

RAIL_GetRadioStateDetail()

sl_rail_get_radio_state_detail()

sl_rail_radio_state_detail_t

Same functionality

RAIL_GetVersion()

sl_rail_get_version()

sl_rail_status_t

Parameter removed: 'verbose';

RAIL_Idle()

sl_rail_idle()

sl_rail_status_t

Same functionality

RAIL_Init()

sl_rail_init()

sl_rail_status_t

Parameter order and return type changed: sl_rail_handle_t *p_rail_handle (output)

RAIL_YieldRadio()

sl_rail_yield_radio()

sl_rail_status_t

Same functionality

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

RAIL_CancelTimer()

sl_rail_cancel_timer()

sl_rail_status_t

Same functionality

RAIL_GetTime()

sl_rail_get_time()

sl_rail_time_t

⚠️ Parameter added: sl_rail_handle_t rail_handle

RAIL_GetTimer()

sl_rail_get_timer()

sl_rail_time_t

Same functionality

RAIL_IsTimerExpired()

sl_rail_is_timer_expired()

bool

Same functionality

RAIL_IsTimerRunning()

sl_rail_is_timer_running()

bool

Same functionality

RAIL_SetTime()

sl_rail_set_time()

sl_rail_status_t

⚠️ Parameter added: sl_rail_handle_t rail_handle (first parameter)

RAIL_SetTimer()

sl_rail_set_timer()

sl_rail_status_t

Same functionality

MultiTimer Functions#

RAIL 2.x Function

RAIL 3.0 Function

Return Type

Notes

RAIL_CancelMultiTimer()

sl_rail_cancel_multi_timer()

sl_rail_status_t

⚠️ Parameter added: sl_rail_handle_t rail_handle, return type changed from bool

RAIL_ConfigMultiTimer()

sl_rail_config_multi_timer()

sl_rail_status_t

⚠️ Parameter added: sl_rail_handle_t rail_handle

RAIL_GetMultiTimer()

sl_rail_get_multi_timer()

sl_rail_time_t

⚠️ Parameter added: sl_rail_handle_t rail_handle

RAIL_IsMultiTimerExpired()

sl_rail_is_multi_timer_expired()

bool

⚠️ Parameter added: sl_rail_handle_t rail_handle

RAIL_IsMultiTimerRunning()

sl_rail_is_multi_timer_running()

bool

⚠️ Parameter added: sl_rail_handle_t rail_handle

RAIL_SetMultiTimer()

sl_rail_set_multi_timer()

sl_rail_status_t

⚠️ Parameter added: sl_rail_handle_t rail_handle (first parameter)

Transmit Functions#

RAIL 2.x Function

RAIL 3.0 Function

Return Type

Notes

RAIL_EnableTxHoldOff()

sl_rail_enable_tx_hold_off()

sl_rail_status_t

Same functionality

RAIL_GetTxFifoThreshold()

sl_rail_get_tx_fifo_threshold()

uint16_t

Same functionality

RAIL_GetTxPacketDetailsAlt2()

sl_rail_get_tx_packet_details()

sl_rail_status_t

Function renamed

RAIL_GetTxPacketsRemaining()

sl_rail_get_tx_packets_remaining()

uint16_t

Same functionality

RAIL_GetTxTimeFrameEndAlt()

sl_rail_get_tx_time_frame_end()

sl_rail_time_t

Function renamed

RAIL_GetTxTimePreambleStartAlt()

sl_rail_get_tx_time_preamble_start()

sl_rail_time_t

Function renamed

RAIL_GetTxTimeSyncWordEndAlt()

sl_rail_get_tx_time_sync_word_end()

sl_rail_time_t

Function renamed

RAIL_IsNextCcaNow()

sl_rail_is_next_cca_now()

bool

Same functionality

RAIL_IsTxHoldOffEnabled()

sl_rail_is_tx_hold_off_enabled()

bool

Same functionality

RAIL_SetCcaThreshold()

sl_rail_set_cca_threshold()

sl_rail_status_t

Same functionality

RAIL_SetNextTxRepeat()

sl_rail_set_next_tx_repeat()

sl_rail_status_t

Same functionality

RAIL_SetTxAltPreambleLength()

sl_rail_set_tx_alt_preamble_length()

sl_rail_status_t

Same functionality

RAIL_SetTxFifoThreshold()

sl_rail_set_tx_fifo_threshold()

sl_rail_status_t

Same functionality

RAIL_StartCcaCsmaTx()

sl_rail_start_cca_csma_tx()

sl_rail_status_t

Same functionality

RAIL_StartCcaLbtTx()

sl_rail_start_cca_lbt_tx()

sl_rail_status_t

Same functionality

RAIL_StartScheduledCcaCsmaTx()

sl_rail_start_scheduled_cca_csma_tx()

sl_rail_status_t

Same functionality

RAIL_StartScheduledCcaLbtTx()

sl_rail_start_scheduled_cca_lbt_tx()

sl_rail_status_t

Same functionality

RAIL_StartScheduledTx()

sl_rail_start_scheduled_tx()

sl_rail_status_t

Same functionality

RAIL_StartTx()

sl_rail_start_tx()

sl_rail_status_t

Same functionality

RAIL_StartTxStreamAlt()

sl_rail_start_tx_stream()

sl_rail_status_t

Stream mode transmit

RAIL_StopInfinitePreambleTx()

sl_rail_stop_infinite_preamble_tx()

sl_rail_status_t

Same functionality

RAIL_StopTx()

sl_rail_stop_tx()

sl_rail_status_t

Same functionality

RAIL_StopTxStream()

sl_rail_stop_tx_stream()

sl_rail_status_t

Same functionality

Receive Functions#

RAIL 2.x Function

RAIL 3.0 Function

Return Type

Notes

RAIL_ConfigRxDutyCycle()

sl_rail_config_rx_duty_cycle()

sl_rail_status_t

Same functionality

RAIL_ConfigRxOptions()

sl_rail_config_rx_options()

sl_rail_status_t

Same functionality

RAIL_CopyRxPacket()

sl_rail_copy_rx_packet()

void

⚠️ Parameter added: sl_rail_handle_t rail_handle (first parameter)

RAIL_EnableRxDutyCycle()

sl_rail_enable_rx_duty_cycle()

sl_rail_status_t

Same functionality

RAIL_GetAverageRssi()

sl_rail_get_average_rssi()

int16_t

Same functionality

RAIL_GetDefaultRxDutyCycleConfig()

sl_rail_get_default_rx_duty_cycle_config()

sl_rail_status_t

Same functionality

RAIL_GetRssiAlt()

sl_rail_get_rssi()

int16_t

Function renamed

RAIL_GetRssiDetectThreshold()

sl_rail_get_rssi_detect_threshold()

int16_t

Same functionality

RAIL_GetRssiOffset()

sl_rail_get_rssi_offset()

int16_t

Same functionality

RAIL_GetRxFifoThreshold()

sl_rail_get_rx_fifo_threshold()

uint16_t

Same functionality

RAIL_GetRxFreqOffset()

sl_rail_get_rx_freq_offset()

int32_t

Same functionality

RAIL_GetRxIncomingPacketInfo()

sl_rail_get_rx_incoming_packet_info()

sl_rail_status_t

Same functionality

RAIL_GetRxIncomingPacketRssi()

sl_rail_get_rx_incoming_packet_rssi()

int16_t

Same functionality

RAIL_GetRxPacketDetailsAlt()

sl_rail_get_rx_packet_details()

sl_rail_status_t

Function renamed

RAIL_GetRxPacketInfo()

sl_rail_get_rx_packet_info()

sl_rail_status_t

Same functionality

RAIL_GetRxTimeFrameEndAlt()

sl_rail_get_rx_time_frame_end()

sl_rail_time_t

Function renamed

RAIL_GetRxTimePreambleStartAlt()

sl_rail_get_rx_time_preamble_start()

sl_rail_time_t

Function renamed

RAIL_GetRxTimeSyncWordEndAlt()

sl_rail_get_rx_time_sync_word_end()

sl_rail_time_t

Function renamed

RAIL_HoldRxPacket()

sl_rail_hold_rx_packet()

sl_rail_status_t

Same functionality

RAIL_IsAverageRssiReady()

sl_rail_is_average_rssi_ready()

bool

Same functionality

RAIL_PeekRxPacket()

sl_rail_peek_rx_packet()

sl_rail_status_t

Same functionality

RAIL_ReleaseRxPacket()

sl_rail_release_rx_packet()

sl_rail_status_t

Same functionality

RAIL_ScheduleRx()

sl_rail_start_scheduled_rx()

sl_rail_status_t

Function renamed

RAIL_SetFreqOffset()

sl_rail_set_freq_offset()

sl_rail_status_t

Same functionality

RAIL_SetRssiDetectThreshold()

sl_rail_set_rssi_detect_threshold()

sl_rail_status_t

Same functionality

RAIL_SetRssiOffset()

sl_rail_set_rssi_offset()

sl_rail_status_t

Same functionality

RAIL_SetRxFifoThreshold()

sl_rail_set_rx_fifo_threshold()

sl_rail_status_t

Same functionality

RAIL_StartAverageRssi()

sl_rail_start_average_rssi()

sl_rail_status_t

Same functionality

RAIL_StartRx()

sl_rail_start_rx()

sl_rail_status_t

Same functionality

Channel Configuration Functions#

RAIL 2.x Function

RAIL 3.0 Function

Return Type

Notes

RAIL_ConfigChannels()

sl_rail_config_channels()

sl_rail_status_t

⚠️ Behavior change: Does not auto-prepare channel

RAIL_ConfigChannelsAlt()

sl_rail_config_channels()

sl_rail_status_t

Function renamed

RAIL_ConfigRxChannelHopping()

sl_rail_config_rx_channel_hopping()

sl_rail_status_t

Same functionality

RAIL_EnableRxChannelHopping()

sl_rail_enable_rx_channel_hopping()

sl_rail_status_t

Same functionality

RAIL_GetBitRate()

sl_rail_get_bit_rate()

uint32_t

Same functionality

RAIL_GetChannel()

sl_rail_get_channel()

uint16_t

Same functionality

RAIL_GetChannelAlt()

sl_rail_get_tuned_channel()

uint16_t

Function renamed

RAIL_GetChannelHoppingRssi()

sl_rail_get_channel_hopping_rssi()

sl_rail_status_t

Same functionality

RAIL_GetChannelMetadata()

sl_rail_get_channel_metadata()

sl_rail_status_t

Same functionality

RAIL_GetSymbolRate()

sl_rail_get_symbol_rate()

uint32_t

Same functionality

RAIL_IsValidChannel()

sl_rail_is_valid_channel()

bool

Same functionality

RAIL_PrepareChannel()

sl_rail_prepare_channel()

sl_rail_status_t

Same functionality

RAIL_TriggerRxChannelHop()

sl_rail_trigger_rx_channel_hop()

sl_rail_status_t

Same functionality

Radio Configuration Functions#

RAIL 2.x Function

RAIL 3.0 Function

Return Type

Notes

RAIL_ChangedDcdc()

sl_rail_changed_dcdc()

sl_rail_status_t

Same functionality

RAIL_ConfigTxPower()

sl_rail_config_tx_power()

sl_rail_status_t

Struct field names changed

RAIL_GetDebugMode()

sl_rail_get_debug_mode()

sl_rail_debug_mode_t

Same functionality

RAIL_GetRadioClockFreqHz()

sl_rail_get_radio_clock_freq_hz()

uint32_t

Same functionality

RAIL_GetRadioEntropy()

sl_rail_get_radio_entropy()

sl_rail_status_t

Same functionality

RAIL_GetRfPath()

sl_rail_get_rf_path()

sl_rail_status_t

Same functionality

RAIL_GetTemperature()

sl_rail_get_temperature()

int32_t

Same functionality

RAIL_GetTune()

sl_rail_get_tune()

int16_t

Same functionality

RAIL_GetTuneDelta()

sl_rail_get_tune_delta()

int16_t

Same functionality

RAIL_GetTxPowerDbm()

sl_rail_get_tx_power_dbm()

sl_rail_tx_power_t

Same functionality

RAIL_SetDebugMode()

sl_rail_set_debug_mode()

sl_rail_status_t

Same functionality

RAIL_SetTune()

sl_rail_set_tune()

sl_rail_status_t

Same functionality

RAIL_SetTuneDelta()

sl_rail_set_tune_delta()

sl_rail_status_t

Same functionality

RAIL_SetTxPowerDbm()

sl_rail_set_tx_power_dbm()

sl_rail_status_t

Same functionality

RAIL_VerifyTxPowerCurves()

sl_rail_verify_tx_power_conversion()

sl_rail_status_t

Function renamed

FIFO Functions#

RAIL 2.x Function

RAIL 3.0 Function

Return Type

Notes

RAIL_GetRxFifoBytesAvailable()

sl_rail_get_rx_fifo_bytes_available()

uint16_t

Same functionality

RAIL_GetTxFifoSpaceAvailable()

sl_rail_get_tx_fifo_space_available()

uint16_t

Same functionality

RAIL_ReadRxFifo()

sl_rail_read_rx_fifo()

uint16_t

Same functionality

RAIL_ResetFifo()

sl_rail_reset_fifo()

sl_rail_status_t

Same functionality

RAIL_SetMfmPingPongFifo()

sl_rail_set_mfm_ping_pong_fifo()

sl_rail_status_t

Same functionality

RAIL_SetRxFifo()

sl_rail_set_rx_fifo()

sl_rail_status_t

Same functionality

RAIL_SetTxFifo()

sl_rail_set_tx_fifo()

sl_rail_status_t

⚠️ Behavior change: Allows smaller FIFOs

RAIL_WriteTxFifo()

sl_rail_write_tx_fifo()

uint16_t

Same functionality

Sleep/Timer Sync Functions#

RAIL 2.x Function

RAIL 3.0 Function

Return Type

Notes

RAIL_ConfigSleepAlt()

sl_rail_config_sleep()

sl_rail_status_t

Function renamed

RAIL_DeinitPowerManager()

sl_rail_deinit_power_manager()

sl_rail_status_t

Same functionality

RAIL_InitPowerManager()

sl_rail_init_power_manager()

sl_rail_status_t

Same functionality

RAIL_Sleep()

sl_rail_sleep()

sl_rail_status_t

Same functionality

RAIL_Wake()

sl_rail_wake()

sl_rail_status_t

Same functionality

Scheduler Functions#

RAIL 2.x Function

RAIL 3.0 Function

Return Type

Notes

RAIL_GetSchedulerStatusAlt()

sl_rail_get_scheduler_status()

sl_rail_scheduler_status_t

Function renamed

RAIL_SetTaskPriority()

sl_rail_set_task_priority()

sl_rail_status_t

Same functionality

Calibration Functions#

RAIL 2.x Function

RAIL 3.0 Function

Return Type

Notes

RAIL_ApplyIrCalibrationAlt()

sl_rail_apply_ir_calibration()

sl_rail_status_t

Function renamed

RAIL_Calibrate()

sl_rail_calibrate()

sl_rail_status_t

Same functionality

RAIL_CalibrateHFXO()

sl_rail_calibrate_hfxo()

sl_rail_status_t

Same functionality

RAIL_CalibrateIrAlt()

sl_rail_calibrate_ir()

sl_rail_status_t

Function renamed

RAIL_CalibrateTemp()

sl_rail_calibrate_temp()

sl_rail_status_t

Same functionality

RAIL_ConfigCal()

sl_rail_config_cal()

sl_rail_status_t

Same functionality

RAIL_EnableCacheSynthCal()

sl_rail_enable_cache_synth_cal()

sl_rail_status_t

Same functionality

RAIL_EnablePaCal()

sl_rail_enable_pa_cal()

void

⚠️ Parameter added: sl_rail_handle_t rail_handle (first parameter)

RAIL_GetPendingCal()

sl_rail_get_pending_cal()

sl_rail_status_t

Same functionality

State Timing Functions#

RAIL 2.x Function

RAIL 3.0 Function

Return Type

Notes

RAIL_ConfigRetimeOptions()

sl_rail_config_retime_options()

sl_rail_status_t

Same functionality

RAIL_GetRetimeOptions()

sl_rail_get_retime_options()

sl_rail_status_t

Same functionality

RAIL_GetRxTransitions()

sl_rail_get_rx_transitions()

sl_rail_status_t

Same functionality

RAIL_GetTransitionTime()

sl_rail_get_transition_time()

sl_rail_time_t

⚠️ Parameter added: sl_rail_handle_t rail_handle

RAIL_GetTxTransitions()

sl_rail_get_tx_transitions()

sl_rail_status_t

Same functionality

RAIL_SetRxTransitions()

sl_rail_set_rx_transitions()

sl_rail_status_t

Same functionality

RAIL_SetStateTiming()

sl_rail_set_state_timing()

sl_rail_status_t

Same functionality

RAIL_SetTransitionTime()

sl_rail_set_transition_time()

sl_rail_status_t

Same functionality

RAIL_SetTxTransitions()

sl_rail_set_tx_transitions()

sl_rail_status_t

Same functionality

PTI Functions#

RAIL 2.x Function

RAIL 3.0 Function

Return Type

Notes

RAIL_ConfigPti()

sl_rail_config_pti()

sl_rail_status_t

Same functionality

RAIL_EnablePti()

sl_rail_enable_pti()

sl_rail_status_t

Same functionality

RAIL_GetPtiConfig()

sl_rail_get_pti_config()

sl_rail_status_t

Same functionality

RAIL_GetPtiProtocol()

sl_rail_get_pti_protocol()

sl_rail_protocol_t

Same functionality

RAIL_SetPtiProtocol()

sl_rail_set_pti_protocol()

sl_rail_status_t

Same functionality

Feature Query Functions#

RAIL 2.x Function

RAIL 3.0 Function

Return Type

Notes

RAIL_Supports2p4GHzBand()

sl_rail_supports_2p4_ghz_band()

bool

Same functionality

RAIL_SupportsAddrFilterAddressBitMask()

sl_rail_supports_addr_filter_address_bit_mask()

bool

Same functionality

RAIL_SupportsAddrFilterMask()

sl_rail_supports_addr_filter_mask()

bool

Same functionality

RAIL_SupportsAlternateTxPower()

sl_rail_supports_alternate_tx_power()

bool

Same functionality

RAIL_SupportsAntennaDiversity()

sl_rail_supports_antenna_diversity()

bool

Same functionality

RAIL_SupportsAuxAdc()

sl_rail_supports_aux_adc()

bool

Same functionality

RAIL_SupportsChannelHopping()

sl_rail_supports_channel_hopping()

bool

Same functionality

RAIL_SupportsCollisionDetection()

sl_rail_supports_collision_detection()

bool

Same functionality

RAIL_SupportsDirectMode()

sl_rail_supports_direct_mode()

bool

Same functionality

RAIL_SupportsDualBand()

sl_rail_supports_dual_band()

bool

Same functionality

RAIL_SupportsDualSyncWords()

sl_rail_supports_dual_sync_words()

bool

Same functionality

RAIL_SupportsExternalThermistor()

sl_rail_supports_external_thermistor()

bool

Same functionality

RAIL_SupportsFastRx2Rx()

sl_rail_supports_fast_rx_to_rx()

bool

Same functionality

RAIL_SupportsHFXOCompensation()

sl_rail_supports_hfxo_compensation()

bool

Same functionality

RAIL_SupportsIEEE802154Band2P4()

sl_rail_ieee802154_supports_2p4_ghz_band()

bool

Function renamed

RAIL_SupportsMfm()

sl_rail_supports_mfm()

bool

Same functionality

RAIL_SupportsOFDMPA()

sl_rail_supports_ofdm_pa()

bool

Same functionality

RAIL_SupportsPathDiversity()

sl_rail_supports_path_diversity()

bool

Same functionality

RAIL_SupportsPrecisionLFRCO()

sl_rail_supports_precision_lfrco()

bool

Same functionality

RAIL_SupportsProtocolBLE()

sl_rail_supports_protocol_ble()

bool

Same functionality

RAIL_SupportsProtocolBTC()

sl_rail_supports_protocol_btc()

bool

Same functionality

RAIL_SupportsProtocolIEEE802154()

sl_rail_supports_protocol_ieee802154()

bool

Same functionality

RAIL_SupportsProtocolSidewalk()

sl_rail_supports_protocol_sidewalk()

bool

Same functionality

RAIL_SupportsProtocolWiSUN()

sl_rail_supports_protocol_wi_sun()

bool

Same functionality

RAIL_SupportsProtocolZWave()

sl_rail_supports_protocol_zwave()

bool

Same functionality

RAIL_SupportsPrsLnaBypass()

sl_rail_supports_prs_lna_bypass()

bool

Same functionality

RAIL_SupportsRadioEntropy()

sl_rail_supports_radio_entropy()

bool

Same functionality

RAIL_SupportsRfSenseEnergyDetection()

sl_rail_supports_rf_sense_energy_detection()

bool

Same functionality

RAIL_SupportsRfSenseSelectiveOok()

sl_rail_supports_rf_sense_selective_ook()

bool

Same functionality

RAIL_SupportsRssiDetectThreshold()

sl_rail_supports_rssi_detect_threshold()

bool

Same functionality

RAIL_SupportsRxDirectModeDataToFifo()

sl_rail_supports_rx_direct_mode_data_to_fifo()

bool

Same functionality

RAIL_SupportsRxRawData()

sl_rail_supports_rx_raw_data()

bool

Same functionality

RAIL_SupportsSQPhy()

sl_rail_supports_sq_phy()

bool

Same functionality

RAIL_SupportsSubGHzBand()

sl_rail_supports_sub_ghz_band()

bool

Same functionality

RAIL_SupportsThermalProtection()

sl_rail_supports_thermal_protection()

bool

Same functionality

RAIL_SupportsTrustZoneSecurePeripherals()

sl_rail_supports_trustzone_secure_peripherals()

bool

Same functionality

RAIL_SupportsTxRepeatStartToStart()

sl_rail_supports_tx_repeat_start_to_start()

bool

Same functionality

RAIL_SupportsTxToTx()

sl_rail_supports_tx_to_tx()

bool

Same functionality

RAIL_SupportsUserSequencer()

sl_rail_supports_sequencer_user()

bool

Same functionality

RAIL_SupportsVdet()

sl_rail_supports_vdet()

bool

Same functionality

Address Filter Functions#

RAIL 2.x Function

RAIL 3.0 Function

Return Type

Notes

RAIL_ConfigAddressFilter()

sl_rail_config_address_filter()

sl_rail_status_t

Same functionality

RAIL_EnableAddressFilter()

sl_rail_enable_address_filter()

sl_rail_status_t

Same functionality

RAIL_EnableAddressFilterAddress()

sl_rail_enable_address_filter_address()

sl_rail_status_t

Same functionality

RAIL_IsAddressFilterEnabled()

sl_rail_is_address_filter_enabled()

bool

Same functionality

RAIL_ResetAddressFilter()

sl_rail_reset_address_filter()

sl_rail_status_t

Same functionality

RAIL_SetAddressFilterAddress()

sl_rail_set_address_filter_address()

sl_rail_status_t

Same functionality

RAIL_SetAddressFilterAddressMask()

sl_rail_set_address_filter_address_mask()

sl_rail_status_t

Same functionality

Antenna Functions#

RAIL 2.x Function

RAIL 3.0 Function

Return Type

Notes

RAIL_ConfigAntenna()

sl_rail_config_antenna()

sl_rail_status_t

Same functionality

RAIL_EnablePrsLnaBypass()

sl_rail_enable_prs_lna_bypass()

sl_rail_status_t

Same functionality

Auto Acknowledgment Functions#

RAIL 2.x Function

RAIL 3.0 Function

Return Type

Notes

RAIL_CancelAutoAck()

sl_rail_cancel_auto_ack()

sl_rail_status_t

Same functionality

RAIL_ConfigAutoAck()

sl_rail_config_auto_ack()

sl_rail_status_t

Same functionality

RAIL_GetAutoAckFifo()

sl_rail_get_auto_ack_fifo()

sl_rail_status_t

Same functionality

RAIL_IsAutoAckEnabled()

sl_rail_is_auto_ack_enabled()

bool

Same functionality

RAIL_IsAutoAckWaitingForAck()

sl_rail_is_auto_ack_waiting_for_ack()

bool

Same functionality

RAIL_IsRxAutoAckPaused()

sl_rail_is_rx_auto_ack_paused()

bool

Same functionality

RAIL_IsTxAutoAckPaused()

sl_rail_is_tx_auto_ack_paused()

bool

Same functionality

RAIL_PauseRxAutoAck()

sl_rail_pause_rx_auto_ack()

sl_rail_status_t

Same functionality

RAIL_PauseTxAutoAck()

sl_rail_pause_tx_auto_ack()

sl_rail_status_t

Same functionality

RAIL_UseTxFifoForAutoAck()

sl_rail_use_tx_fifo_for_auto_ack()

sl_rail_status_t

Same functionality

RAIL_WriteAutoAckFifo()

sl_rail_write_auto_ack_fifo()

sl_rail_status_t

Same functionality

Direct Mode Functions#

RAIL 2.x Function

RAIL 3.0 Function

Return Type

Notes

RAIL_ConfigDirectMode()

sl_rail_config_direct_mode()

sl_rail_status_t

Same functionality

RAIL_EnableDirectModeAlt()

sl_rail_enable_direct_mode()

sl_rail_status_t

Function renamed

Event Configuration Functions#

RAIL 2.x Function

RAIL 3.0 Function

Return Type

Notes

RAIL_ConfigEvents()

sl_rail_config_events()

sl_rail_status_t

Same functionality

HFXO Compensation Functions#

RAIL 2.x Function

RAIL 3.0 Function

Return Type

Notes

RAIL_CompensateHFXO()

sl_rail_compensate_hfxo()

sl_rail_status_t

Same functionality

RAIL_ComputeHFXOPPMError()

sl_railcb_compute_hfxo_error_ppm()

sl_rail_status_t

Callback function

RAIL_ConfigHFXOCompensation()

sl_rail_config_hfxo_compensation()

sl_rail_status_t

Same functionality

RAIL_ConfigHFXOThermistor()

sl_rail_config_hfxo_thermistor()

sl_rail_status_t

Same functionality

RAIL_ConvertThermistorImpedance()

sl_railcb_convert_thermistor_impedance()

sl_rail_status_t

Callback function

RAIL_GetHFXOCompensationConfig()

sl_rail_get_hfxo_compensation_config()

sl_rail_status_t

Same functionality

RAIL_GetThermistorImpedance()

sl_rail_get_thermistor_impedance()

sl_rail_status_t

Same functionality

RAIL_StartThermistorMeasurement()

sl_rail_start_thermistor_measurement()

sl_rail_status_t

Same functionality

Sync Word Functions#

RAIL 2.x Function

RAIL 3.0 Function

Return Type

Notes

RAIL_ConfigSyncWords()

sl_rail_config_sync_words()

sl_rail_status_t

Same functionality

RAIL_GetSyncWords()

sl_rail_get_sync_words()

sl_rail_status_t

Same functionality

Thermal Protection Functions#

RAIL 2.x Function

RAIL 3.0 Function

Return Type

Notes

RAIL_ConfigThermalProtection()

sl_rail_config_thermal_protection()

sl_rail_status_t

Same functionality

RAIL_GetThermalProtection()

sl_rail_get_thermal_protection()

sl_rail_status_t

Same functionality

Vdet Functions#

RAIL 2.x Function

RAIL 3.0 Function

Return Type

Notes

RAIL_ConfigVdet()

sl_rail_config_vdet()

sl_rail_status_t

Same functionality

RAIL_EnableVdet()

sl_rail_enable_vdet()

sl_rail_status_t

Same functionality

RAIL_GetVdet()

sl_rail_get_vdet()

bool

Same functionality

RAIL_GetVdetConfig()

sl_rail_get_vdet_config()

sl_rail_status_t

Same functionality

RAIL_IsVdetEnabled()

sl_rail_is_vdet_enabled()

bool

Same functionality

RF Sense Functions#

RAIL 2.x Function

RAIL 3.0 Function

Return Type

Notes

RAIL_ConfigRfSenseSelectiveOokWakeupPhy()

sl_rail_config_rf_sense_selective_ook_wakeup_phy()

sl_rail_status_t

Same functionality

RAIL_IsRfSensed()

sl_rail_is_rf_sensed()

bool

Same functionality

RAIL_SetRfSenseSelectiveOokWakeupPayload()

sl_rail_set_rf_sense_selective_ook_wakeup_payload()

sl_rail_status_t

Same functionality

RAIL_StartRfSense()

sl_rail_start_rf_sense()

sl_rail_status_t

Same functionality

RAIL_StartSelectiveOokRfSense()

sl_rail_start_selective_ook_rf_sense()

sl_rail_status_t

Same functionality

CRC Functions#

RAIL 2.x Function

RAIL 3.0 Function

Return Type

Notes

RAIL_GetCrcInitVal()

sl_rail_get_crc_init_val()

uint16_t

Same functionality

RAIL_ResetCrcInitVal()

sl_rail_reset_crc_init_val()

sl_rail_status_t

Same functionality

RAIL_SetCrcInitVal()

sl_rail_set_crc_init_val()

sl_rail_status_t

Same functionality

Whitening Functions#

RAIL 2.x Function

RAIL 3.0 Function

Return Type

Notes

RAIL_GetWhiteningInitVal()

sl_rail_get_whitening_init_val()

uint16_t

Same functionality

RAIL_ResetWhiteningInitVal()

sl_rail_reset_whitening_init_val()

sl_rail_status_t

Same functionality

RAIL_SetWhiteningInitVal()

sl_rail_set_whitening_init_val()

sl_rail_status_t

Same functionality

Frame Configuration Functions#

RAIL 2.x Function

RAIL 3.0 Function

Return Type

Notes

RAIL_IncludeFrameTypeLength()

sl_rail_include_frame_type_length()

sl_rail_status_t

Same functionality

RAIL_SetFixedLength()

sl_rail_set_fixed_length()

sl_rail_status_t

Same functionality

Conversion Functions#

RAIL 2.x Function

RAIL 3.0 Function

Return Type

Notes

RAIL_ConvertLqi()

sl_rail_convert_lqi()

uint8_t

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

RAIL_TZ_CheckPeripheralsSecureStates()

sl_rail_tz_check_peripherals_secure_states()

sl_rail_status_t

Same functionality

RAIL_TZ_ConfigAntennaGpio()

sl_rail_tz_config_antenna_gpio()

sl_rail_status_t

Same functionality

RAIL_TZ_ConfigureHfxo()

sl_rail_tz_configure_hfxo()

sl_rail_status_t

Same functionality

RAIL_TZ_DisableSecureRadioIrqs()

sl_rail_tz_disable_secure_radio_irqs()

sl_rail_status_t

Same functionality

RAIL_TZ_EnableSecureRadioIrqs()

sl_rail_tz_enable_secure_radio_irqs()

sl_rail_status_t

Same functionality

RAIL_TZ_InitNonSecure()

sl_rail_tz_init_non_secure()

sl_rail_status_t

Same functionality

RAIL_TZ_InitSecure()

sl_rail_tz_init_secure()

sl_rail_status_t

Same functionality

RAIL_TZ_RadioClockEnable()

sl_rail_tz_radio_clock_enable()

sl_rail_status_t

Same functionality

RAIL_TZ_RadioPerformM2mLdma()

sl_rail_tz_radio_perform_m2m_ldma()

sl_rail_status_t

Same functionality

RAIL_TZ_RfecaClockEnable()

sl_rail_tz_rfeca_clock_enable()

sl_rail_status_t

Same functionality

RAIL_TZ_RfecaIsClockEnabled()

sl_rail_tz_rfeca_is_clock_enabled()

bool

Same functionality

IEEE 802.15.4 Functions#

RAIL 2.x Function

RAIL 3.0 Function

Return Type

Notes

RAIL_IEEE802154_AcceptFrames()

sl_rail_ieee802154_accept_frames()

sl_rail_status_t

Same functionality

RAIL_IEEE802154_ComputeChannelFromPhyModeId()

sl_rail_ieee802154_compute_channel_from_phy_mode_id()

uint16_t

Function renamed

RAIL_IEEE802154_Config2p4GHzRadio()

sl_rail_ieee802154_config_2p4_ghz_radio()

sl_rail_status_t

Function renamed

RAIL_IEEE802154_Config2p4GHzRadioAntDiv()

sl_rail_ieee802154_config_2p4_ghz_radio_ant_div()

sl_rail_status_t

Function renamed

RAIL_IEEE802154_Config2p4GHzRadioAntDivCoex()

sl_rail_ieee802154_config_2p4_ghz_radio_ant_div_coex()

sl_rail_status_t

Function renamed

RAIL_IEEE802154_Config2p4GHzRadioAntDivCoexFem()

sl_rail_ieee802154_config_2p4_ghz_radio_ant_div_coex_fem()

sl_rail_status_t

Function renamed

RAIL_IEEE802154_Config2p4GHzRadioAntDivFem()

sl_rail_ieee802154_config_2p4_ghz_radio_ant_div_fem()

sl_rail_status_t

Function renamed

RAIL_IEEE802154_Config2p4GHzRadioCoex()

sl_rail_ieee802154_config_2p4_ghz_radio_coex()

sl_rail_status_t

Function renamed

RAIL_IEEE802154_Config2p4GHzRadioCoexFem()

sl_rail_ieee802154_config_2p4_ghz_radio_coex_fem()

sl_rail_status_t

Function renamed

RAIL_IEEE802154_Config2p4GHzRadioFem()

sl_rail_ieee802154_config_2p4_ghz_radio_fem()

sl_rail_status_t

Function renamed

RAIL_IEEE802154_ConfigCcaMode()

sl_rail_ieee802154_config_cca_mode()

sl_rail_status_t

Function renamed

RAIL_IEEE802154_ConfigEOptions()

sl_rail_ieee802154_config_e_options()

sl_rail_status_t

Function renamed

RAIL_IEEE802154_ConfigGB863MHzRadio()

sl_rail_ieee802154_config_gb863_mhz_radio()

sl_rail_status_t

Function renamed

RAIL_IEEE802154_ConfigGB915MHzRadio()

sl_rail_ieee802154_config_gb915_mhz_radio()

sl_rail_status_t

Function renamed

RAIL_IEEE802154_ConfigGOptions()

sl_rail_ieee802154_config_g_options()

sl_rail_status_t

Function renamed

RAIL_IEEE802154_ConfigRxChannelSwitching()

sl_rail_ieee802154_config_rx_channel_switching()

sl_rail_status_t

Function renamed

RAIL_IEEE802154_ConfigSignalIdentifier()

sl_rail_ieee802154_config_signal_identifier()

sl_rail_status_t

Function renamed

RAIL_IEEE802154_ConvertRssiToEd()

sl_rail_ieee802154_convert_rssi_to_ed()

int8_t

Function renamed

RAIL_IEEE802154_ConvertRssiToLqi()

sl_rail_ieee802154_convert_rssi_to_lqi()

uint8_t

Function renamed

RAIL_IEEE802154_Deinit()

sl_rail_ieee802154_deinit()

sl_rail_status_t

Same functionality

RAIL_IEEE802154_EnableDataFramePending()

sl_rail_ieee802154_enable_data_frame_pending()

sl_rail_status_t

Function renamed

RAIL_IEEE802154_EnableEarlyFramePending()

sl_rail_ieee802154_enable_early_frame_pending()

sl_rail_status_t

Function renamed

RAIL_IEEE802154_EnableSignalDetection()

sl_rail_ieee802154_enable_signal_detection()

sl_rail_status_t

Function renamed

RAIL_IEEE802154_GetAddress()

sl_rail_ieee802154_get_address()

sl_rail_status_t

Same functionality

RAIL_IEEE802154_GetPtiRadioConfig()

sl_rail_ieee802154_get_phy_id()

sl_rail_status_t

Function renamed

RAIL_IEEE802154_Init()

sl_rail_ieee802154_init()

sl_rail_status_t

Same functionality

RAIL_IEEE802154_IsEnabled()

sl_rail_ieee802154_is_enabled()

bool

Same functionality

RAIL_IEEE802154_SetAddresses()

sl_rail_ieee802154_set_addresses()

sl_rail_status_t

Same functionality

RAIL_IEEE802154_SetFramePending()

sl_rail_ieee802154_toggle_frame_pending()

sl_rail_status_t

Function renamed

RAIL_IEEE802154_SetLongAddress()

sl_rail_ieee802154_set_long_address()

sl_rail_status_t

Same functionality

RAIL_IEEE802154_SetPanCoordinator()

sl_rail_ieee802154_set_pan_coordinator()

sl_rail_status_t

Same functionality

RAIL_IEEE802154_SetPanId()

sl_rail_ieee802154_set_pan_id()

sl_rail_status_t

Same functionality

RAIL_IEEE802154_SetPromiscuousMode()

sl_rail_ieee802154_set_promiscuous_mode()

sl_rail_status_t

Same functionality

RAIL_IEEE802154_SetRxToEnhAckTx()

sl_rail_ieee802154_set_rx_to_enh_ack_tx()

sl_rail_status_t

Function renamed

RAIL_IEEE802154_SetShortAddress()

sl_rail_ieee802154_set_short_address()

sl_rail_status_t

Same functionality

RAIL_IEEE802154_WriteEnhAck()

sl_rail_ieee802154_write_enh_ack()

sl_rail_status_t

Function renamed


Type Name Changes#

RAIL 2.x Type

RAIL 3.0 Type

Base Type

Notes

RAIL_AntennaSel_t

sl_rail_antenna_sel_t

Enum (uint8_t)

Same concept

RAIL_ChannelConfig_t

sl_rail_channel_config_t

Struct

Same concept

RAIL_Events_t

sl_rail_events_t

Bitfield (uint32_t)

Same concept

RAIL_Handle_t

sl_rail_handle_t

void *

Same concept

RAIL_IdleMode_t

sl_rail_idle_mode_t

Enum (uint8_t)

Same concept

RAIL_IrCalValues_t

sl_rail_ir_cal_values_t

Struct

Same concept

RAIL_PaPowerSetting_t

sl_rail_pa_power_setting_t

uint32_t

Same concept

RAIL_PtiProtocol_t

sl_rail_pti_protocol_t

Enum (uint8_t)

Same concept

RAIL_RadioConfig_t

sl_rail_radio_config_t

Struct

Same concept

RAIL_RadioStateDetail_t

sl_rail_radio_state_detail_t

Enum (uint8_t)

Same concept

RAIL_RadioState_t

sl_rail_radio_state_t

Enum (uint8_t)

Same concept

RAIL_RxOptions_t

sl_rail_rx_options_t

Enum (uint8_t)

Same concept

RAIL_SchedulerStatus_t

sl_rail_scheduler_status_t

Enum (uint8_t)

Same concept

RAIL_StateTiming_t

sl_rail_state_timing_t

Struct

Same concept

RAIL_StateTransitions_t

sl_rail_state_transitions_t

Struct

Same concept

RAIL_Status_t

sl_rail_status_t

sl_status_t

Same concept

RAIL_StopMode_t

sl_rail_stop_mode_t

Enum (uint8_t)

Same concept

RAIL_StreamMode_t

sl_rail_stream_mode_t

Enum (uint8_t)

Same concept

RAIL_TaskType_t

sl_rail_task_type_t

Enum (uint8_t)

Same concept

RAIL_TimeMode_t

sl_rail_time_mode_t

Enum (uint8_t)

Same concept

RAIL_TimerCallback_t

sl_rail_timer_callback_t

Function pointer

Same concept

RAIL_Time_t

sl_rail_time_t

uint32_t

Same concept

RAIL_TransitionTime_t

sl_rail_transition_time_t

Enum (uint8_t)

Same concept

RAIL_TxOptions_t

sl_rail_tx_options_t

Enum (uint8_t)

Same concept

RAIL_TxPowerConfig_t

sl_rail_tx_power_config_t

Struct

⚠️ Field names changed

RAIL_TxPowerCurvesConfigAlt_t

sl_rail_tx_power_table_config_t

Struct

Function renamed

RAIL_TxPowerMode_t

sl_rail_tx_power_mode_t

Enum (uint8_t)

Same concept

RAIL_TxPowerSettingEntry_t

sl_rail_tx_power_setting_entry_t

Struct

⚠️ Simplified structure

RAIL_TxPower_t

sl_rail_tx_power_t

int16_t

⚠️ 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 sl_rail_prepare_channel()

⚠️ Explicit call required

Power Units

Implicit (dBm * 10)

Explicit deci-dBm

✅ Clearer documentation

Struct Fields

.voltage, .rampTime

.voltage_mv, .ramp_time_us

⚠️ Snake_case + units

PA settings

RAIL_ConfigTxPower()

sl_rail_util_pa_post_init()

Instead of sl_rail_util_pa_post_init()if one parameter needs to change, use sl_rail_set_tx_pa_ramp_time() or sl_rail_set_tx_pa_voltage(). sl_rail_util_pa_post_init() will be called implicitly if sl_rail_util_callbacks component is used.

TX Power Setting

RAIL_ConvertDbmToRaw() + RAIL_SetTxPower()

sl_rail_set_tx_power_dbm()

Same functionality with only dBm focus

Type Names

RAIL_Handle_t, RAIL_Status_t

sl_rail_handle_t, sl_rail_status_t

sl_rail_ prefix


Struct Field Name Changes#

sl_rail_tx_power_config_t (formerly RAIL_TxPowerConfig_t)#

RAIL 2.x Field

RAIL 3.0 Field

Type

Notes

.mode

.mode

sl_rail_tx_power_mode_t

Same

.rampTime

.ramp_time_us

uint16_t

⚠️ Snake_case + _us suffix

.voltage

.voltage_mv

uint16_t

⚠️ Added _mv suffix

sl_rail_tx_power_setting_entry_t (formerly RAIL_TxPowerSettingEntry_t)#

RAIL 2.x Field

RAIL 3.0 Field

Type

Notes

.currentPaPowerDbm

.curr_pa_power_ddbm

sl_rail_tx_power_t

⚠️ Snake_case, deci-dBm

.maxPaPowerDbm

(removed)

-

✅ Simplified structure

.minPaPowerDbm

(removed)

-

✅ Simplified structure

.paPowerSetting

.pa_power_setting

sl_rail_pa_power_setting_t

⚠️ Snake_case

sl_rail_config_t (formerly RAIL_Config_t)#

RAIL 2.x Field

RAIL 3.0 Field

Type

Notes

buffer[]

opaque_value

sl_rail_opaque_value_t

Reserved for app use

eventsCallback

events_callback

sl_rail_events_callback_t

Same

protocol

p_opaque_handle_0

void *

Reserved for app use

scheduler

p_opaque_handle_1

void *

Reserved for app use

(none)

.rx_fifo_bytes

uint16_t

✅ New - FIFO config at init

(none)

.p_rx_fifo_buffer

uint8_t *

✅ New - FIFO config at init

(none)

.rx_packet_queue_entries

uint16_t

✅ New - FIFO config at init

(none)

.p_rx_packet_queue

void *

✅ New - FIFO config at init

(none)

.tx_fifo_bytes

uint16_t

✅ New - FIFO config at init

(none)

.tx_fifo_init_bytes

uint16_t

✅ New - FIFO config at init

(none)

.p_tx_fifo_buffer

uint8_t *

✅ New - FIFO config at init


Enum Value Changes#

New PA Mode Enums#

RAIL 3.0 Enum Value

Value

Notes

SL_RAIL_TX_PA_MODE_2P4_GHZ

0

2.4 GHz

SL_RAIL_TX_PA_MODE_SUB_GHZ

1

Sub GHz

SL_RAIL_TX_PA_MODE_SUB_GHZ_OFDM

2

Sub GHz OFDM

SL_RAIL_TX_PA_MODE_INVALID

3

Invalid PA mode


Constant Name Changes#

Status Code Constants#

RAIL 2.x Constant

RAIL 3.0 Constant

Value

Notes

none

SL_RAIL_STATUS_NO_MORE_RESOURCE

0x001A

New value

RAIL_STATUS_INVALID_CALL

SL_RAIL_STATUS_INVALID_CALL

0x000E

Same value

RAIL_STATUS_INVALID_PARAMETER

SL_RAIL_STATUS_INVALID_PARAMETER

0x0021

Same value

RAIL_STATUS_INVALID_STATE

SL_RAIL_STATUS_INVALID_STATE

0x0002

Same value

RAIL_STATUS_NO_ERROR

SL_RAIL_STATUS_NO_ERROR

0x0000

Same value

RAIL_STATUS_SCHED_ERROR

SL_RAIL_STATUS_SCHED_ERROR

0x0006

Same value

RAIL_STATUS_SUSPENDED

SL_RAIL_STATUS_SUSPENDED

0x0005

Same value


Header File Changes#

RAIL 2.x Include

RAIL 3.0 Include

Purpose

#include "rail.h"

#include "sl_rail.h"

Main RAIL header

#include "rail_types.h"

#include "sl_rail_types.h"

RAIL type definitions

#include "pa_conversions_efr32.h"

#include "sl_rail_util_pa_conversions.h"

PA conversion functions

#include "pa_curves_efr32.h"

(included in main header)

PA curve types

#include "pa_curve_types_efr32.h"

(included in main header)

PA curve type definitions


Component Changes#

RAIL 2.x Component

RAIL 3.0 Component

Purpose

Notes

(none)

sl_rail_util_pa_tables

PA power tables

✅ Required by sl_rail_util_pa

rail_util_pa

sl_rail_util_pa

PA conversion plugin

⚠️ Not compatible


Behavioral Changes Summary#

Feature

RAIL 2.x Behavior

RAIL 3.0 Behavior

Impact

Channel Configuration

RAIL_ConfigChannels() auto-prepares first channel

sl_rail_config_channels() only caches config

⚠️ Must call sl_rail_prepare_channel() explicitly

PA Power Tables

Only EFR32xG25 and SixG301

All platforms supported

✅ Expanded support

PA Initialization

Automatic

Must call sl_rail_util_pa_init()

⚠️ REQUIRED explicit call

PA Power Units

PA-dependent unitless power 'levels' (dBm * 10)

Explicit deci-dBm

✅ Clearer documentation

PA Plugin

pa-conversions

sl_rail_util_pa

⚠️ Not compatible

PA settings

RAIL_ConfigTxPower()

sl_rail_util_pa_post_init()

Instead of sl_rail_util_pa_post_init()if one parameter needs to change, use sl_rail_set_tx_pa_ramp_time() or sl_rail_set_tx_pa_voltage(). sl_rail_util_pa_post_init() will be called implicitly if sl_rail_util_callbacks component is used.

PA Automode

RAIL_EnablePaAutoMode()

Use automode tables provided by sl_rail_util_pa_tables component

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

RAIL_EVENT_RX_SCHEDULED_RX_END only with rxTransitionEndSchedule

SL_RAIL_EVENT_RX_SCHEDULED_RX_END always occurs

⚠️ 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 #include statements

  • 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() after sl_rail_init(), if sl_rail_util_callbacks is 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_pasl_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 channel

  • Channel preparation is deferred to the first API call that specifies a channel

  • To maintain RAIL 2.x behavior, call sl_rail_prepare_channel() after sl_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 requirement

  • Non-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 by SL_RAIL_MINIMUM_FIFO_BYTES)

  • Non-power-of-2 sizes are treated as linear buffers suitable for packet mode only

  • Supports start_offset_bytes parameter 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_t

  • Protocols 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_ptr and sl_rail_builtin_rx_packet_queue_entries

4. Scheduled Receive Event#

RAIL 2.x Behavior:

  • RAIL_EVENT_RX_SCHEDULED_RX_END only occurred based on rxTransitionEndSchedule setting

RAIL 3.0 Behavior:

  • SL_RAIL_EVENT_RX_SCHEDULED_RX_END always occurs regardless of rx_transition_end_schedule setting

  • This 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_table indicates 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)

sl_rail_util_pa_tables

✅ Required by sl_rail_util_pa

rail_util_pa

sl_rail_util_pa

⚠️ 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

#include "pa_conversions_efr32.h"

#include "sl_rail_util_pa_conversions.h"

PA API Changes#

Functionality

RAIL 2.x Function

RAIL 3.0 Function

Notes

Channel Config CB

sl_rail_util_pa_on_channel_config_change()

sl_rail_util_pa_on_channel_config_change()

Parameter RAIL_ChannelConfigEntry_t type changed to sl_rail_channel_config_entry_t

Get Power (dBm)

RAIL_GetTxPower() + RAIL_ConvertRawToDbm()

sl_rail_get_tx_power_dbm()

✅ Convenience API in RAIL 3.0

Init Power Tables

Not available

sl_rail_util_pa_init_tx_power_table()

✅ New - Initialize Power tables

PA Initialization

None (automatic)

sl_rail_util_pa_init()

Required - Must be called before PA config

PA Post Init

RAIL_ConfigTxPower()

sl_rail_util_pa_post_init()

Required - Returns sl_rail_status_t, takes sl_rail_tx_pa_mode_t parameter. Must be called after sl_rail_init() if sl_rail_util_callbacks is not used

PA Ramp Time

Part of RAIL_ConfigTxPower()

sl_rail_set_tx_pa_ramp_time()

✅ New - Can change ramp time independently

PA Voltage

Part of RAIL_ConfigTxPower()

sl_rail_set_tx_pa_voltage()

✅ New - Can change voltage independently

PA Automode

RAIL_EnablePaAutoMode()

(compile-time via table selection)

⚠️ No runtime API - select automode table at compile time

Power Table Convert

RAIL_ConvertDbmToPowerSettingEntry()

sl_railcb_convert_ddbm_to_power_setting_entry()

⚠️ Callback function, uses deci-dBm, takes sl_rail_tx_pa_mode_t parameter

Set Power (dBm)

RAIL_ConvertDbmToRaw() + RAIL_SetTxPower()

sl_rail_set_tx_power_dbm()

✅ Convenience API in RAIL 3.0

PA Type Changes#

RAIL 2.x Type

RAIL 3.0 Type

Notes

(none)

sl_rail_tx_pa_mode_t

✅ New - Simplified PA mode enum (2P4_GHZ, SUB_GHZ, SUB_GHZ_OFDM). Used by sl_rail_util_pa_post_init() and sl_railcb_convert_ddbm_to_power_setting_entry()

RAIL_PaPowerSetting_t

sl_rail_pa_power_setting_t

Type name changed

RAIL_TxPowerConfig_t

sl_rail_tx_power_config_t

Struct name changed

RAIL_TxPowerCurvesConfigAlt_t

sl_rail_tx_power_table_config_t

Type name changed

RAIL_TxPowerMode_t

sl_rail_tx_power_mode_t

Enum name changed (detailed power modes: HP, MP, LP, etc.)

RAIL_TxPowerSettingEntry_t

sl_rail_tx_power_setting_entry_t

✅ Structure simplified

RAIL_TxPower_t

sl_rail_tx_power_t

✅ Now explicitly deci-dBm

PA Struct Field Changes#

sl_rail_tx_power_config_t (formerly RAIL_TxPowerConfig_t):

  • .voltage.voltage_mv (added _mv suffix)

  • .rampTime.ramp_time_us (snake_case + _us suffix)

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 time

  • All PA settings were configured together in a single call

RAIL 3.0 Behavior:

  • sl_rail_util_pa_post_init() replaces RAIL_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 time

    • sl_rail_set_tx_pa_voltage() - to change only the PA voltage

  • sl_rail_util_pa_post_init() will be called implicitly if sl_rail_util_callbacks component is used

  • Default 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 level

  • Automode 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_tables component

  • Select 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_t is now explicitly int16_t representing deci-dBm

  • All power-related APIs (sl_rail_set_tx_power_dbm(), sl_rail_get_tx_power_dbm()) use deci-dBm

  • This makes power values consistent and comparable across all platforms and PAs

  • Example: 20.0 dBm is represented as 200 deci-dBm

Key Migration Points#

  1. Initialization Required: Must call sl_rail_util_pa_init() before configuring TX power

  2. Post-Init Required: Must call sl_rail_util_pa_post_init() after sl_rail_init() (if sl_rail_util_callbacks is not used). Call to RAIL_ConfigTxPower() is not necessary now.

  3. Individual PA Settings: Use sl_rail_set_tx_pa_ramp_time() or sl_rail_set_tx_pa_voltage() if only one parameter needs to change after initialization

  4. Power Units: RAIL 3.0 explicitly uses deci-dBm units (was implicit dBm * 10 in RAIL 2.x)

  5. PA Automode: Automode is now a compile-time choice via table selection, not a runtime API

  6. 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_t

  • Channel 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_ghz

  • Naming convention changed from camelCase to snake_case


Migration Tips#

  1. 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_ALIAS preprocessor define.

  2. Update Type Names: Systematically replace all RAIL_ prefixed types with sl_rail_ prefixed types.

  3. Update Function Names: Replace all RAIL_ prefixed function names with sl_rail_ prefixed names.

  4. Channel Configuration: After migrating to sl_rail_config_channels(), explicitly call sl_rail_prepare_channel() if you need the first channel prepared immediately.

  5. FIFO Configuration: Consider moving FIFO configuration to initialization time using sl_rail_config_t fields for better control.

  6. 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_ALIAS is defined

  • The 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