Multi-Protocol Transition Time Utility#

The Multi-Protocol Transition Time Utility is a software component designed to dynamically determine and configure the appropriate transition time for switching between protocols in a multi-protocol environment. This ensures proper operation of the radio for a given system clock frequency, and maximizes protocol access to the shared radio.


Overview#

The Multi-Protocol Transition Time Utility is designed to determine and configure the worst-case transition times required for switching between protocols in a dynamic multiprotocol (DMP) application. These transition times represent how early the radio scheduler must begin a protocol switch before a scheduled event in order to not miss it.

The default configuration is tuned specifically for BLE and Zigbee use cases, ensuring reliable operation across Silicon Labs RAIL stacks. Customers can further customize these transition times to optimize performance for their specific applications.

This utility uses a configurable table of frequency thresholds and corresponding transition times to dynamically select the optimal transition time based on the current system clock frequency. By doing so, it ensures efficient protocol switching while maintaining reliable radio performance.

As the system clock frequency increases, the performance of the protocol switch process improves. For example, at 150 MHz, the radio can switch from one protocol to another more quickly than at 38.4 MHz, enabling faster transitions and better overall access to the shared radio in high-frequency systems.


Key Features#

  • Dynamic Transition Time Selection: Automatically selects the appropriate transition time based on the current system clock frequency.

  • Configurable Table: Users can define custom frequency-to-transition-time mappings using the override functionality.

  • Default Compatibility: Pre-configured to work with all Silicon Labs stacks on supported part families.

  • Override Support: Customers can override the default configuration to optimize for their specific device family or application requirements.


Configuration Options#

Default Configuration#

The default configuration is defined in the sl_rail_util_mp_transition_time component. It includes a table of frequency thresholds and corresponding transition times, which are used to determine the appropriate transition time for the current system clock frequency.

Example default configuration for device family sixx301 in .slcc:

template_contribution:
  - name: sl_rail_util_mp_transition_time_table
    value:
      minimum_frequency_hz: "150000000, 38400000, 20000000, 10000000"
      transition_time_us: "350, 450, 1000, 2000"
    condition: [device_generic_family_sixx301]
    unless: [sl_rail_util_mp_transition_time_override]

Override Functionality#

Customers can override the default values by requiring the sl_rail_util_mp_transition_time_override component in their SLCP file. This allows them to define their own sl_rail_util_mp_transition_time_table using the same format as the default configuration.

Example override configuration in .slcp:

requires:
  - name: sl_rail_util_mp_transition_time_override
template_contribution:
  - name: sl_rail_util_mp_transition_time_table
    value:
      minimum_frequency_hz: "100000000, 50000000"
      transition_time_us: "400, 800"

By using the override functionality, customers can fine-tune the transition times to better suit their specific device family or application requirements.


How It Works#

  1. Initialization: The utility initializes by determining the current system clock frequency and selecting the appropriate transition time from the table.

  2. Dynamic Selection: During runtime, the utility dynamically selects the transition time based on the system clock frequency, ensuring proper protocol transitions for the radio. It is only run once during startup, however the APIs are available for subsequent usage or testing.

  3. RAIL Configuration: The selected transition time is passed to the RAIL library sl_rail_set_transition_time API.


API Reference#

<tt>sl_rail_util_mp_transition_time_get</tt>#

sl_status_t sl_rail_util_mp_transition_time_get(
  const sl_rail_util_mp_transition_time_table_t *p_table,
  const size_t table_size,
  sl_rail_time_t *p_transition_time
);

Retrieves the appropriate transition time based on the current system clock frequency.

Parameters:#

  • p_table: Pointer to the transition time table.

  • table_size: Number of entries in the table.

  • p_transition_time: Pointer to store the resulting transition time (in microseconds).

Returns:#

  • SL_STATUS_OK: Transition time successfully retrieved.

  • SL_STATUS_INVALID_PARAMETER: Invalid input parameters.

  • SL_STATUS_NOT_FOUND: No matching entry found for the current system clock frequency.

<tt>sl_rail_util_mp_transition_time_init</tt>#

void sl_rail_util_mp_transition_time_init(void);

Initializes the transition time utility by determining the appropriate transition time and configuring the RAIL library.