Energy Friendly Front End Module (EFF)

APIs for configuring and controlling an attached Energy Friendly Front End Module (EFF).

Data Structures

struct  RAIL_FemProtectionConfig_t
 Temperature protection configuration for the attached FEM.
 
struct  RAIL_EffConfig_t
 Configuration data for the attached EFF device.

Macros

#define RAIL_TEMP_MEASURE_COUNT   (13U)
 Number of temperature values provided by RAIL_GetTemperature().
 
#define RAIL_EFF_CONTROL_SIZE   (52U)
 Number of bytes provided by RAIL_GetSetEffControl().
 
#define RAIL_EFF_SUPPORTS_TRANSMIT(x)
 A macro that checks for EFFxx devices that support high power transmit.
 
#define RAIL_EFF_SUPPORTS_RECEIVE(x)
 A macro that checks for EFFxx devices that support receive.

Enumerations

enum  RAIL_EffDevice_t {
  RAIL_EFF_DEVICE_NONE = 0,
  RAIL_EFF_DEVICE_EFF01Z11,
  RAIL_EFF_DEVICE_EFF01A12,
  RAIL_EFF_DEVICE_COUNT
}
 EFF part numbers.
 
enum  RAIL_EffLnaMode_t {
  RAIL_EFF_LNA_MODE_RURAL = (0x01U << 0),
  RAIL_EFF_LNA_MODE_URBAN = (0x01U << 1),
  RAIL_EFF_LNA_MODE_BYPASS = (0x01U << 2),
  RAIL_EFF_LNA_MODE_COUNT = (0x01U << 3)
}
 EFF LNA Modes.
 
enum  RAIL_ClpcEnable_t {
  RAIL_EFF_CLPC_DISABLED = 0,
  RAIL_EFF_CLPC_MODE_CHANGE = 1,
  RAIL_EFF_CLPC_POWER_SLOW = 2,
  RAIL_EFF_CLPC_POWER_FAST = 3,
  RAIL_EFF_CLPC_POWER_BOTH = 4,
  RAIL_EFF_CLPC_POWER_SLOW_BELOW_MAX = 5,
  RAIL_EFF_CLPC_POWER_FAST_BELOW_MAX = 6,
  RAIL_EFF_CLPC_POWER_BOTH_BELOW_MAX = 7,
  RAIL_EFF_CLPC_COUNT = 8
}
 EFF Closed Loop Power Control (CLPC) Enable states.

Functions

RAIL_Status_t RAIL_ConfigEff (RAIL_Handle_t railHandle, const RAIL_EffConfig_t *config)
 Configure the attached EFF device.
 
RAIL_Status_t RAIL_GetTemperature (RAIL_Handle_t railHandle, int16_t tempBuffer[(13U)], bool reset)
 Get the different temperature measurements in Kelvin done by sequencer or host.
 
RAIL_Status_t RAIL_SetFemProtectionConfig (RAIL_Handle_t railHandle, const RAIL_FemProtectionConfig_t *newFemConfig)
 Set the FEM maximum power for continuous TX and the duty cycle for TX operations from RAIL_FemProtectionConfig_t.
 
RAIL_Status_t RAIL_GetFemProtectionConfig (RAIL_Handle_t railHandle, RAIL_FemProtectionConfig_t *femConfig)
 Get the FEM protection configuration.
 
RAIL_Status_t RAIL_GetSetEffControl (RAIL_Handle_t railHandle, uint16_t tempBuffer[(52U)/sizeof(uint16_t)], bool reset)
 Get the different EFF Control measurements.
 
RAIL_Status_t RAIL_GetSetEffMode (RAIL_Handle_t railHandle, uint8_t *newMode, bool changeMode)
 Copy the current FEM_DATA pin values into newMode.
 
RAIL_Status_t RAIL_GetSetEffRuralUrbanMv (RAIL_Handle_t railHandle, uint16_t *newTrip, bool changeTrip)
 Copy the current Rural to Urban trip voltage into newTrip.
 
RAIL_Status_t RAIL_GetSetEffUrbanBypassMv (RAIL_Handle_t railHandle, uint16_t *newTrip, bool changeTrip)
 Copy the current Urban to Bypass trip voltage into newTrip.
 
RAIL_Status_t RAIL_GetSetEffUrbanDwellTimeMs (RAIL_Handle_t railHandle, uint32_t *newDwellTime, bool changeDwellTime)
 Copy the current Urban dwell time into newDwellTime.
 
RAIL_Status_t RAIL_GetSetEffBypassDwellTimeMs (RAIL_Handle_t railHandle, uint32_t *newDwellTime, bool changeDwellTime)
 Copy the current Bypass dwell time into newDwellTime.
 
RAIL_Status_t RAIL_GetSetClpcSlowLoop (RAIL_Handle_t railHandle, uint16_t *newTarget, uint16_t *newSlope, bool changeValues)
 Copy the current CLPC Slow Loop values into newTarget and newSlope.
 
RAIL_Status_t RAIL_GetSetClpcFastLoop (RAIL_Handle_t railHandle, uint16_t *newTarget, uint16_t *newSlope, bool changeValues)
 Copy the current CLPC Fast Loop values into newTarget and newSlope.
 
RAIL_Status_t RAIL_GetSetClpcEnable (RAIL_Handle_t railHandle, uint8_t *newClpcEnable, bool changeClpcEnable)
 Copy the current CLPC Enable in to newClpcEnable.
 
RAIL_Status_t RAIL_GetSetEffTempThreshold (RAIL_Handle_t railHandle, uint16_t *newThreshold, bool changeThreshold)
 Get and set the EFF temperature threshold.
 
RAIL_Status_t RAIL_GetSetInternalTempThreshold (RAIL_Handle_t railHandle, uint16_t *newThreshold, bool changeThreshold)
 Get and set the internal temperature threshold.

Detailed Description

APIs for configuring and controlling an attached Energy Friendly Front End Module (EFF).

The EFF is a high-performance, transmit/receive (T/R) front end module (FEM) for sub-GHz EFR32 devices. RAIL includes built-in functionality to transmit and receive via an attached EFF. This functionality optimizes RF performance while ensuring that the EFF stays within safe operating temperature limits.

Configuration and control of the EFF is performed by the Energy Friendly Front End Module (EFF) Utility.

Note
The EFF is only supported with EFR32XG25 devices.

Macro Definition Documentation

◆ RAIL_EFF_CONTROL_SIZE

#define RAIL_EFF_CONTROL_SIZE   (52U)

Number of bytes provided by RAIL_GetSetEffControl().

Definition at line 5664 of file rail.h.

◆ RAIL_EFF_SUPPORTS_RECEIVE

#define RAIL_EFF_SUPPORTS_RECEIVE (   x)
Value:
)
EFF01A12.
Definition: rail_types.h:4281
EFF01Z11.
Definition: rail_types.h:4280

A macro that checks for EFFxx devices that support receive.

Definition at line 4294 of file rail_types.h.

◆ RAIL_EFF_SUPPORTS_TRANSMIT

#define RAIL_EFF_SUPPORTS_TRANSMIT (   x)
Value:
)
EFF01A12.
Definition: rail_types.h:4281

A macro that checks for EFFxx devices that support high power transmit.

Definition at line 4288 of file rail_types.h.

◆ RAIL_TEMP_MEASURE_COUNT

#define RAIL_TEMP_MEASURE_COUNT   (13U)

Number of temperature values provided by RAIL_GetTemperature().

Definition at line 5620 of file rail.h.

Enumeration Type Documentation

◆ RAIL_ClpcEnable_t

EFF Closed Loop Power Control (CLPC) Enable states.

The EFF CLPC Enable state is passed to RAIL_ConfigEff() as the RAIL_EffConfig_t::clpcEnable. The Energy Friendly Front End Module (EFF) Utility uses advanced power controls to tune EFF output to match Surface Acoustic Wave (SAW) filter losses and antenna performance.

Enumerator
RAIL_EFF_CLPC_DISABLED 

CLPC actions are completely disabled.

EFF will output but CLPC will not change modes, take power measurements or tune power output. Temperature measurements are taken.

RAIL_EFF_CLPC_MODE_CHANGE 

CLPC actions are completely disabled.

EFF will output, change modes, and take measurements, but not tune power output.

RAIL_EFF_CLPC_POWER_SLOW 

CLPC actions allows Slow Loop.

EFF will output, change modes, and take measurements, and tune power output based on slow loop.

RAIL_EFF_CLPC_POWER_FAST 

CLPC actions allows Fast Loop.

EFF will output, change modes, and take measurements, and tune power output based on fast loop.

RAIL_EFF_CLPC_POWER_BOTH 

CLPC actions are completely enabled.

EFF will output, change modes, take measurements, and tune power output based on slow and fast loops. Default state.

RAIL_EFF_CLPC_POWER_SLOW_BELOW_MAX 

CLPC actions allows Slow Loop.

EFF will output, change modes, and take measurements, but not tune power output because requested output power is less than max. Internal only state.

RAIL_EFF_CLPC_POWER_FAST_BELOW_MAX 

CLPC actions allows Fast Loop.

EFF will output, change modes, and take measurements, but not tune power output because requested output power is less than max. Internal only state.

RAIL_EFF_CLPC_POWER_BOTH_BELOW_MAX 

CLPC actions are completely enabled.

EFF will output, change modes, and take measurements, but not tune power output because requested output power is less than max. Internal only state.

RAIL_EFF_CLPC_COUNT 

A count of the choices in this enumeration.

Must be last

Definition at line 4323 of file rail_types.h.

◆ RAIL_EffDevice_t

EFF part numbers.

The part number of the attached EFF device is passed to RAIL_ConfigEff() as RAIL_EffConfig_t::device. The Energy Friendly Front End Module (EFF) Utility configures and controls the EFF based on the capabilities of the attached EFF.

Enumerator
RAIL_EFF_DEVICE_NONE 

No EFF device attached.

RAIL_EFF_DEVICE_EFF01Z11 

EFF01Z11.

LNA only, TX is bypass mode.

RAIL_EFF_DEVICE_EFF01A12 

EFF01A12.

RAIL_EFF_DEVICE_COUNT 

A count of the choices in this enumeration.

Definition at line 4278 of file rail_types.h.

◆ RAIL_EffLnaMode_t

EFF LNA Modes.

The enabled EFF LNA modes are passed toRAIL_ConfigEff() as the RAIL_EffConfig_t::enabledLnaModes. The Energy Friendly Front End Module (EFF) Utility dynamically transitions between enabled LNA modes to maximize receive performance.

Enumerator
RAIL_EFF_LNA_MODE_RURAL 

Rural LNA Mode.

RAIL_EFF_LNA_MODE_URBAN 

Urban LNA Mode.

RAIL_EFF_LNA_MODE_BYPASS 

Bypass LNA Mode.

RAIL_EFF_LNA_MODE_COUNT 

A count of the choices in this enumeration.

Definition at line 4307 of file rail_types.h.

Function Documentation

◆ RAIL_ConfigEff()

RAIL_Status_t RAIL_ConfigEff ( RAIL_Handle_t  railHandle,
const RAIL_EffConfig_t config 
)

Configure the attached EFF device.

Parameters
[in]railHandleA RAIL instance handle.
[in]configA pointer to a RAIL_EffConfig_t struct that contains configuration data for the EFF.
Returns
Status code indicating success of the function call.

◆ RAIL_GetFemProtectionConfig()

RAIL_Status_t RAIL_GetFemProtectionConfig ( RAIL_Handle_t  railHandle,
RAIL_FemProtectionConfig_t femConfig 
)

Get the FEM protection configuration.

Parameters
[in]railHandleA RAIL instance handle.
[out]femConfigCurrent FEM protection configuration written to this pointer.
Returns
Status code indicating success of the function call.

◆ RAIL_GetSetClpcEnable()

RAIL_Status_t RAIL_GetSetClpcEnable ( RAIL_Handle_t  railHandle,
uint8_t *  newClpcEnable,
bool  changeClpcEnable 
)

Copy the current CLPC Enable in to newClpcEnable.

If changeClpcEnable is true, update current CLPC Enable with newClpcEnable first.

Parameters
[in]railHandleA RAIL instance handle
[in,out]newClpcEnableA pointer to a uint8_t that will contain the CLPC Enable
[in]changeClpcEnableIf true, use newClpcEnable to update the current CLPC Enable
Returns
Status code indicating success of the function call.

◆ RAIL_GetSetClpcFastLoop()

RAIL_Status_t RAIL_GetSetClpcFastLoop ( RAIL_Handle_t  railHandle,
uint16_t *  newTarget,
uint16_t *  newSlope,
bool  changeValues 
)

Copy the current CLPC Fast Loop values into newTarget and newSlope.

If changeTarget is true, update current CLPC Fast Loop Target and Slope first.

Parameters
[in]railHandleA RAIL instance handle
[in,out]newTargetA pointer to a uint16_t that will contain the CLPC Fast Loop Target
[in,out]newSlopeA pointer to a uint16_t that will contain the CLPC Fast Loop Slope
[in]changeValuesIf true, use newTarget and newGain to update the CLPC Fast Loop values
Returns
Status code indicating success of the function call.

◆ RAIL_GetSetClpcSlowLoop()

RAIL_Status_t RAIL_GetSetClpcSlowLoop ( RAIL_Handle_t  railHandle,
uint16_t *  newTarget,
uint16_t *  newSlope,
bool  changeValues 
)

Copy the current CLPC Slow Loop values into newTarget and newSlope.

If changeTarget is true, update current CLPC Slow Loop Target and Slope first.

Parameters
[in]railHandleA RAIL instance handle
[in,out]newTargetA pointer to a uint16_t that will contain the CLPC Slow Loop Target
[in,out]newSlopeA pointer to a uint16_t that will contain the CLPC Slow Loop Slope
[in]changeValuesIf true, use newTarget and newGain to update the CLPC SLow Loop values
Returns
Status code indicating success of the function call.

◆ RAIL_GetSetEffBypassDwellTimeMs()

RAIL_Status_t RAIL_GetSetEffBypassDwellTimeMs ( RAIL_Handle_t  railHandle,
uint32_t *  newDwellTime,
bool  changeDwellTime 
)

Copy the current Bypass dwell time into newDwellTime.

If changeDwellTime is true, update current Bypass dwell time with newDwellTime first.

Parameters
[in]railHandleA RAIL instance handle
[in,out]newDwellTimeA pointer to a uint16_t that will contain the Bypass dwell dwell time, in milliseconds
[in]changeDwellTimeIf true, use newDwellTime to update current Bypass dwell time
Returns
Status code indicating success of the function call.

◆ RAIL_GetSetEffControl()

RAIL_Status_t RAIL_GetSetEffControl ( RAIL_Handle_t  railHandle,
uint16_t  tempBuffer[(52U)/sizeof(uint16_t)],
bool  reset 
)

Get the different EFF Control measurements.

Parameters
[in]railHandleA RAIL instance handle.
[out]tempBufferThe address of the target array. tempBuffer array must be at least RAIL_EFF_CONTROL_SIZE bytes.
[in]resetReset the EFF Control measurements.
Returns
Status code indicating success of the function call.

◆ RAIL_GetSetEffMode()

RAIL_Status_t RAIL_GetSetEffMode ( RAIL_Handle_t  railHandle,
uint8_t *  newMode,
bool  changeMode 
)

Copy the current FEM_DATA pin values into newMode.

If changeMode is true, update FEM_DATA pin values with newMode first.

Parameters
[in]railHandleA RAIL instance handle
[in,out]newModeA pointer to a uint8_t that will contain the FEM_DATA pin values
[in]changeModeIf true, use newMode to update FEM_DATA pin values
Returns
Status code indicating success of the function call.

◆ RAIL_GetSetEffRuralUrbanMv()

RAIL_Status_t RAIL_GetSetEffRuralUrbanMv ( RAIL_Handle_t  railHandle,
uint16_t *  newTrip,
bool  changeTrip 
)

Copy the current Rural to Urban trip voltage into newTrip.

If changeTrip is true, update current Rural to Urban trip voltage with newTrip first.

Parameters
[in]railHandleA RAIL instance handle
[in,out]newTripA pointer to a uint16_t that will contain the Rural to Urban trip voltage, in millivolts
[in]changeTripIf true, use newTrip to update current Rural to Urban trip voltage
Returns
Status code indicating success of the function call.

◆ RAIL_GetSetEffTempThreshold()

RAIL_Status_t RAIL_GetSetEffTempThreshold ( RAIL_Handle_t  railHandle,
uint16_t *  newThreshold,
bool  changeThreshold 
)

Get and set the EFF temperature threshold.

The EFR32 device periodically takes temperature measurements of the attached EFF device. If the EFF temperature ever exceeds the EFF temperature threshold, any active transmit operation is aborted and future transmit operations are blocked until the EFF temperature falls below the threshold.

Parameters
[in]railHandleA RAIL instance handle
[in,out]newThresholdA pointer to a uint16_t that will contain the EFF temperature threshold, in Kelvin
[in]changeThresholdIf true, use changeThreshold to update current EFF temperature threshold
Returns
Status code indicating success of the function call.

◆ RAIL_GetSetEffUrbanBypassMv()

RAIL_Status_t RAIL_GetSetEffUrbanBypassMv ( RAIL_Handle_t  railHandle,
uint16_t *  newTrip,
bool  changeTrip 
)

Copy the current Urban to Bypass trip voltage into newTrip.

If changeTrip is true, update current Urban to Bypass trip voltage with newTrip first.

Parameters
[in]railHandleA RAIL instance handle
[in,out]newTripA pointer to a uint16_t that will contain the Urban to Bypass trip voltage, in millivolts
[in]changeTripIf true, use newTrip to update current Urban to Bypass trip voltage
Returns
Status code indicating success of the function call.

◆ RAIL_GetSetEffUrbanDwellTimeMs()

RAIL_Status_t RAIL_GetSetEffUrbanDwellTimeMs ( RAIL_Handle_t  railHandle,
uint32_t *  newDwellTime,
bool  changeDwellTime 
)

Copy the current Urban dwell time into newDwellTime.

If changeDwellTime is true, update current Urban dwell time with newDwellTime first.

Parameters
[in]railHandleA RAIL instance handle
[in,out]newDwellTimeA pointer to a uint16_t that will contain the Urban dwell dwell time, in milliseconds
[in]changeDwellTimeIf true, use newDwellTime to update current Urban dwell time
Returns
Status code indicating success of the function call.

◆ RAIL_GetSetInternalTempThreshold()

RAIL_Status_t RAIL_GetSetInternalTempThreshold ( RAIL_Handle_t  railHandle,
uint16_t *  newThreshold,
bool  changeThreshold 
)

Get and set the internal temperature threshold.

The EFR32 device periodically takes measurements of its internal temperature when attached to an EFF device. If the internal temperature ever exceeds the internal temperature threshold, any active transmit operation is aborted and future transmit operations are blocked until the internal temperature falls below the threshold.

Parameters
[in]railHandleA RAIL instance handle
[in,out]newThresholdA pointer to a uint16_t that will contain the internal temperature threshold, in Kelvin
[in]changeThresholdIf true, use changeThreshold to update current internal temperature threshold
Returns
Status code indicating success of the function call.

◆ RAIL_GetTemperature()

RAIL_Status_t RAIL_GetTemperature ( RAIL_Handle_t  railHandle,
int16_t  tempBuffer[(13U)],
bool  reset 
)

Get the different temperature measurements in Kelvin done by sequencer or host.

Values that are not populated yet or incorrect are set to 0.

Parameters
[in]railHandleA RAIL instance handle.
[out]tempBufferThe address of the array that will contain temperatures. tempBuffer array must be at least RAIL_TEMP_MEASURE_COUNT int16_t.
[in]resetReset the EFF temperature values.
Returns
Status code indicating success of the function call.

◆ RAIL_SetFemProtectionConfig()

RAIL_Status_t RAIL_SetFemProtectionConfig ( RAIL_Handle_t  railHandle,
const RAIL_FemProtectionConfig_t newFemConfig 
)

Set the FEM maximum power for continuous TX and the duty cycle for TX operations from RAIL_FemProtectionConfig_t.

Default continuous TX power is defined at 200 deci-dBm and can be set to a maximum of 300 deci-dBm. Default duty cycle is defined at 50 percent and can be set to a maximum of 100 percent.

Parameters
[in]railHandleA RAIL instance handle.
[in]newFemConfigPointer to the new limits to use for the FEM protection configuration
Returns
Status code indicating success of the function call.
Note
Setting the power for continuous TX and the duty cycle from RAIL_FemProtectionConfig_t to 0 will apply their default value. For an ambient temperature above 70 degrees Celsius, it is recommended to use the default configuration.