BLE
Accelerator routines for Bluetooth Low Energy (BLE).
Modules |
|
Angle of Arrival/Departure | |
These APIs are to a stack implementing BLE's angle of arrival and angle of departure functionality.
|
|
BLE TX Channel Hopping |
Data Structures |
|
struct | RAIL_BLE_State_t |
A state structure for BLE.
|
Macros |
|
#define | RAIL_BLE_RX_SUBPHY_ID_500K (0U) |
subPhyId indicating a 500kbps packet
|
|
#define | RAIL_BLE_RX_SUBPHY_ID_125K (1U) |
subPhyId indicating a 125kbps packet
|
|
#define | RAIL_BLE_RX_SUBPHY_ID_1M (2U) |
subPhyId value indicating a 1Mbps packet
|
|
#define | RAIL_BLE_RX_SUBPHY_ID_INVALID (3U) |
Invalid subPhyId value.
|
|
#define | RAIL_BLE_RX_SUBPHY_COUNT (4U) |
subPhyId indicating the total count
|
Enumerations |
|
enum |
RAIL_BLE_Coding_t
{
RAIL_BLE_Coding_125kbps = 0, RAIL_BLE_Coding_125kbps_DSA = 1, RAIL_BLE_Coding_500kbps = 2, RAIL_BLE_Coding_500kbps_DSA = 3 } |
The variant of the BLE Coded PHY.
|
|
enum |
RAIL_BLE_Phy_t
{
RAIL_BLE_1Mbps , RAIL_BLE_2Mbps , RAIL_BLE_Coded125kbps , RAIL_BLE_Coded500kbps } |
The variant of the BLE PHY.
|
|
enum |
RAIL_BLE_SignalIdentifierMode_t
{
RAIL_BLE_SIGNAL_IDENTIFIER_MODE_1MBPS = 1, RAIL_BLE_SIGNAL_IDENTIFIER_MODE_2MBPS } |
Available Signal Identifier modes.
|
Functions |
|
void | RAIL_BLE_Init ( RAIL_Handle_t railHandle) |
Configure RAIL to run in BLE mode.
|
|
void | RAIL_BLE_Deinit ( RAIL_Handle_t railHandle) |
Take RAIL out of BLE mode.
|
|
bool | RAIL_BLE_IsEnabled ( RAIL_Handle_t railHandle) |
Determine whether BLE mode is enabled or not.
|
|
RAIL_Status_t | RAIL_BLE_ConfigPhyQuuppa ( RAIL_Handle_t railHandle) |
Switch to the 1 Mbps Quuppa PHY.
|
|
RAIL_Status_t | RAIL_BLE_ConfigPhy1MbpsViterbi ( RAIL_Handle_t railHandle) |
Switch to the Viterbi 1 Mbps BLE PHY.
|
|
RAIL_Status_t | RAIL_BLE_ConfigPhy1Mbps ( RAIL_Handle_t railHandle) |
Switch to the legacy non-Viterbi 1 Mbps BLE PHY.
|
|
RAIL_Status_t | RAIL_BLE_ConfigPhy2MbpsViterbi ( RAIL_Handle_t railHandle) |
Switch to the Viterbi 2 Mbps BLE PHY.
|
|
RAIL_Status_t | RAIL_BLE_ConfigPhy2Mbps ( RAIL_Handle_t railHandle) |
Switch to the legacy non-Viterbi 2 Mbps BLE PHY.
|
|
RAIL_Status_t | RAIL_BLE_ConfigPhyCoded ( RAIL_Handle_t railHandle, RAIL_BLE_Coding_t bleCoding) |
Switch to the BLE Coded PHY.
|
|
RAIL_Status_t | RAIL_BLE_ConfigPhySimulscan ( RAIL_Handle_t railHandle) |
Switch to the Simulscan PHY.
|
|
RAIL_Status_t | RAIL_BLE_ConfigChannelRadioParams ( RAIL_Handle_t railHandle, uint32_t crcInit, uint32_t accessAddress, uint16_t channel, bool disableWhitening) |
Change BLE radio parameters.
|
|
RAIL_Status_t | RAIL_BLE_PhySwitchToRx ( RAIL_Handle_t railHandle, RAIL_BLE_Phy_t phy, uint16_t railChannel, uint32_t startRxTime, uint32_t crcInit, uint32_t accessAddress, uint16_t logicalChannel, bool disableWhitening) |
Change the current BLE PHY and go into receive.
|
|
RAIL_Status_t | RAIL_BLE_ConfigSignalIdentifier ( RAIL_Handle_t railHandle, const RAIL_BLE_SignalIdentifierMode_t signalIdentifierMode) |
Configure signal identifier for BLE signal detection.
|
|
RAIL_Status_t | RAIL_BLE_EnableSignalIdentifier ( RAIL_Handle_t railHandle, bool enable) |
Enable or Disable signal identifier for BLE signal detection.
|
Detailed Description
Accelerator routines for Bluetooth Low Energy (BLE).
The APIs in this module configure the radio for BLE operation and provide additional helper routines necessary for normal BLE send/receive that aren't available directly in RAIL. RAIL APIs should be used to set up the application. However, RAIL_ConfigChannels() and RAIL_ConfigRadio() should not be called to set up the PHY. Instead, RAIL_BLE_Config* APIs should be used to set up the 1 Mbps, 2 Mbps, or Coded PHY configurations needed by the application. These APIs will configure the hardware and also configure the set of valid BLE channels.
To implement a standard BLE link layer, you will also need to handle tight turnaround times and send packets at specific instants. This can all be managed through general RAIL functions, such as RAIL_ScheduleTx(), RAIL_ScheduleRx() , and RAIL_SetStateTiming() . See RAIL APIs for more useful functions.
A simple example to set up the application to be in BLE mode is shown below. Note that this will put the radio on the first advertising channel with the advertising Access Address. In any full-featured BLE application you will need to use the RAIL_BLE_ConfigChannelRadioParams() function to change the sync word and other parameters as needed based on your connection.
Enumeration Type Documentation
◆ RAIL_BLE_Coding_t
enum RAIL_BLE_Coding_t |
The variant of the BLE Coded PHY.
Enumerator | |
---|---|
RAIL_BLE_Coding_125kbps |
Enables the 125 kbps variant of the BLE Coded PHY. |
RAIL_BLE_Coding_125kbps_DSA |
|
RAIL_BLE_Coding_500kbps |
Enables the 500 kbps variant of the BLE Coded PHY. |
RAIL_BLE_Coding_500kbps_DSA |
|
Definition at line
131
of file
rail_ble.h
.
◆ RAIL_BLE_Phy_t
enum RAIL_BLE_Phy_t |
The variant of the BLE PHY.
Definition at line
154
of file
rail_ble.h
.
Function Documentation
◆ RAIL_BLE_ConfigChannelRadioParams()
RAIL_Status_t RAIL_BLE_ConfigChannelRadioParams | ( | RAIL_Handle_t |
railHandle,
|
uint32_t |
crcInit,
|
||
uint32_t |
accessAddress,
|
||
uint16_t |
channel,
|
||
bool |
disableWhitening
|
||
) |
Change BLE radio parameters.
- Parameters
-
[in] railHandle
A handle for RAIL instance. [in] crcInit
The value to use for CRC initialization. [in] accessAddress
The access address to use for the connection. [in] channel
The logical channel that you're changing to, which initializes the whitener if used. [in] disableWhitening
This can turn off the whitening engine and is useful for sending BLE test mode packets that don't have this turned on.
- Returns
- A status code indicating success of the function call.
This function can be used to switch radio parameters on every connection and/or channel change. It is BLE-aware and will set the access address, preamble, CRC initialization value, and whitening configuration without requiring you to load a new radio configuration. This function should not be called while the radio is active.
◆ RAIL_BLE_ConfigPhy1Mbps()
RAIL_Status_t RAIL_BLE_ConfigPhy1Mbps | ( | RAIL_Handle_t |
railHandle
|
) |
Switch to the legacy non-Viterbi 1 Mbps BLE PHY.
- Parameters
-
[in] railHandle
A handle for RAIL instance.
- Returns
- A status code indicating success of the function call.
Use this function to switch back to the legacy BLE 1 Mbps PHY if you have switched to the 2 Mbps or another configuration. You may only call this function after initializing BLE and while the radio is idle.
- Note
- The EFR32XG2x family does not support BLE non-Viterbi PHYs.
◆ RAIL_BLE_ConfigPhy1MbpsViterbi()
RAIL_Status_t RAIL_BLE_ConfigPhy1MbpsViterbi | ( | RAIL_Handle_t |
railHandle
|
) |
Switch to the Viterbi 1 Mbps BLE PHY.
- Parameters
-
[in] railHandle
A handle for RAIL instance.
- Returns
- A status code indicating success of the function call.
Use this function to switch back to the default BLE 1 Mbps PHY if you have switched to the 2 Mbps or another configuration. You may only call this function after initializing BLE and while the radio is idle.
- Note
- The EFR32XG1 family does not support BLE Viterbi PHYs. However, calls to this function from that family will be silently redirected to the legacy RAIL_BLE_ConfigPhy1Mbps() .
◆ RAIL_BLE_ConfigPhy2Mbps()
RAIL_Status_t RAIL_BLE_ConfigPhy2Mbps | ( | RAIL_Handle_t |
railHandle
|
) |
Switch to the legacy non-Viterbi 2 Mbps BLE PHY.
- Parameters
-
[in] railHandle
A handle for RAIL instance.
- Returns
- A status code indicating success of the function call.
Use this function to switch back to legacy BLE 2Mbps PHY from the default 1 Mbps option. You may only call this function after initializing BLE and while the radio is idle.
- Note
- The EFR32XG1 and EFR32XG2x families do not support BLE non-Viterbi 2 Mbps PHY.
◆ RAIL_BLE_ConfigPhy2MbpsViterbi()
RAIL_Status_t RAIL_BLE_ConfigPhy2MbpsViterbi | ( | RAIL_Handle_t |
railHandle
|
) |
Switch to the Viterbi 2 Mbps BLE PHY.
- Parameters
-
[in] railHandle
A handle for RAIL instance.
- Returns
- A status code indicating success of the function call.
Use this function to switch back to the BLE 2 Mbps PHY from the default 1 Mbps option. You may only call this function after initializing BLE and while the radio is idle.
- Note
- The EFR32XG1 family does not support BLE Viterbi PHYs.
◆ RAIL_BLE_ConfigPhyCoded()
RAIL_Status_t RAIL_BLE_ConfigPhyCoded | ( | RAIL_Handle_t |
railHandle,
|
RAIL_BLE_Coding_t |
bleCoding
|
||
) |
Switch to the BLE Coded PHY.
- Parameters
-
[in] railHandle
A handle for RAIL instance. [in] bleCoding
The RAIL_BLE_Coding_t to use
- Returns
- A status code indicating success of the function call.
Use this function to switch back to BLE Coded PHY from the default 1 Mbps option. You may only call this function after initializing BLE and while the radio is idle. When using a BLE Coded PHY, the RAIL_RxPacketDetails_t::subPhyId marks the coding of the received packet. A subPhyId of 0 marks a 500 kbps packet, and a subPhyId of 1 marks a 125 kbps packet.
- Note
- The EFR32XG1, EFR32XG12, and EFR32XG14 families do not support BLE Coded PHYs.
◆ RAIL_BLE_ConfigPhyQuuppa()
RAIL_Status_t RAIL_BLE_ConfigPhyQuuppa | ( | RAIL_Handle_t |
railHandle
|
) |
Switch to the 1 Mbps Quuppa PHY.
- Parameters
-
[in] railHandle
A handle for RAIL instance.
- Returns
- Status code indicating success of the function call.
You can use this function to switch to the Quuppa PHY.
- Note
- Not all chips support the 1Mbps Quuppa PHY. This API should return RAIL_STATUS_INVALID_CALL if unsupported by the hardware we're building for.
◆ RAIL_BLE_ConfigPhySimulscan()
RAIL_Status_t RAIL_BLE_ConfigPhySimulscan | ( | RAIL_Handle_t |
railHandle
|
) |
Switch to the Simulscan PHY.
- Parameters
-
[in] railHandle
A handle for RAIL instance.
- Returns
- A status code indicating success of the function call.
Use this function to switch to the BLE Simulscan PHY. You may only call this function after initializing BLE and while the radio is idle. When using Simulscan PHY, the RAIL_RxPacketDetails_t::subPhyId marks the coding of the received packet. A subPhyId of 0 marks a 500 kbps packet, a subPhyId of 1 marks a 125 kbps packet, and a subPhyId of 2 marks a 1 Mbps packet.
- Note
- : The Simulscan PHY is supported only on some 2.4 GHz Series-2 parts. The preprocessor symbol RAIL_BLE_SUPPORTS_SIMULSCAN_PHY and the runtime function RAIL_BLE_SupportsSimulscanPhy() may be used to test for support of the Simulscan PHY.
◆ RAIL_BLE_ConfigSignalIdentifier()
RAIL_Status_t RAIL_BLE_ConfigSignalIdentifier | ( | RAIL_Handle_t |
railHandle,
|
const RAIL_BLE_SignalIdentifierMode_t |
signalIdentifierMode
|
||
) |
Configure signal identifier for BLE signal detection.
- Parameters
-
[in] railHandle
A RAIL instance handle. [in] signalIdentifierMode
Mode of signal identifier operation.
This features allows detection of BLE signal on air based on the mode. This function must be called once before RAIL_BLE_EnableSignalIdentifier to configure signal identifier. Subsequent calls to this to function to reconfigure the signal identifier require a new call to RAIL_BLE_EnableSignalIdentifier() to re-enable the signal identifier.
To enable event for signal detection RAIL_ConfigEvents() must be called for enabling RAIL_EVENT_SIGNAL_DETECTED .
- Returns
- Status code indicating success of the function call.
◆ RAIL_BLE_Deinit()
void RAIL_BLE_Deinit | ( | RAIL_Handle_t |
railHandle
|
) |
Take RAIL out of BLE mode.
- Parameters
-
[in] railHandle
A handle for RAIL instance. This function will undo some of the configuration that happens when you call RAIL_BLE_Init() . After this you can safely run your normal radio initialization code to use a non-BLE configuration. This function does not change back your radio or channel configurations so you must do this by manually reinitializing. This also resets the protocol output on PTI to RAIL_PTI_PROTOCOL_CUSTOM .
◆ RAIL_BLE_EnableSignalIdentifier()
RAIL_Status_t RAIL_BLE_EnableSignalIdentifier | ( | RAIL_Handle_t |
railHandle,
|
bool |
enable
|
||
) |
Enable or Disable signal identifier for BLE signal detection.
- Parameters
-
[in] railHandle
A RAIL instance handle. [in] enable
Signal Identifer is enabled if true, disabled if false.
RAIL_BLE_ConfigSignalIdentifier must be called once before calling this function to configure signal identifier. Once a signal is detected signal identifier will be turned off and this function should be called to re-enable signal identifier without needing to call RAIL_BLE_ConfigSignalIdentifier if the signal identifier is already configured.
- Returns
- Status code indicating success of the function call.
◆ RAIL_BLE_Init()
void RAIL_BLE_Init | ( | RAIL_Handle_t |
railHandle
|
) |
Configure RAIL to run in BLE mode.
- Parameters
-
[in] railHandle
A handle for RAIL instance. This function changes your radio, channel configuration, and other parameters to match what is needed for BLE. To switch back to a default RAIL mode, call RAIL_BLE_Deinit() first. This function will configure the protocol output on PTI to RAIL_PTI_PROTOCOL_BLE .
- Note
- BLE may not be enabled while Auto-ACKing is enabled.
◆ RAIL_BLE_IsEnabled()
bool RAIL_BLE_IsEnabled | ( | RAIL_Handle_t |
railHandle
|
) |
Determine whether BLE mode is enabled or not.
- Parameters
-
[in] railHandle
A handle for RAIL instance.
- Returns
- True if BLE mode is enabled and false otherwise. This function returns the current status of RAIL's BLE mode. It is enabled by a call to RAIL_BLE_Init() and disabled by a call to RAIL_BLE_Deinit() .
◆ RAIL_BLE_PhySwitchToRx()
RAIL_Status_t RAIL_BLE_PhySwitchToRx | ( | RAIL_Handle_t |
railHandle,
|
RAIL_BLE_Phy_t |
phy,
|
||
uint16_t |
railChannel,
|
||
uint32_t |
startRxTime,
|
||
uint32_t |
crcInit,
|
||
uint32_t |
accessAddress,
|
||
uint16_t |
logicalChannel,
|
||
bool |
disableWhitening
|
||
) |
Change the current BLE PHY and go into receive.
- Parameters
-
[in] railHandle
A handle for RAIL instance. [in] phy
Indicates which PHY to receive on [in] railChannel
Which channel of the given PHY to receive on [in] startRxTime
When to enter RX [in] crcInit
The value to use for CRC initialization. [in] accessAddress
The access address to use for the connection. [in] logicalChannel
The logical channel that you're changing to, which initializes the whitener if used. [in] disableWhitening
This can turn off the whitening engine and is useful for sending BLE test mode packets that don't have this turned on.
- Returns
- A status code indicating success of the function call.
This function is used to implement auxiliary packet reception, as defined in the BLE specification. The radio will be put into IDLE, the PHY and channel will be changed, and then receive will be entered at the start time given. The new receive will have a timeout of 30 us, which means that this function should only be called if the offset unit is 30 us.
This function is extremely time-sensitive, and may only be called within the interrupt context of a RAIL_EVENT_RX_PACKET_RECEIVED event.