RAIL Library#
RAIL functionality is delivered as a library that is linked to the developer’s application. The RAIL library implements the core features and runtime APIs needed to configure and control the radio.
The RAIL library works by taking intuitive and easy-to-use commands from the RAIL API and translating them into register-level code used to control radio and communications functions. The API commands remain constant across ICs. The changes in the underlying code are transparent to the developer or system tester. This also allows developers to create multiple stacks for different products quickly, as they are always presented with a similar software radio interface. RAIL provides the foundation upon which developers can implement their own MAC layer and network layer functionality.
Where possible, all features currently implemented for the EFR32 will be implemented for future ICs, allowing for easy migration of all RAIL-based applications. The main differences between EFR32 generations are highlighted in EFR32 Migration Guide for Proprietary Applications.
The RAIL API is built up from commands and events. Commands can be used to initiate something from the software, while events are generated by the hardware (usually from an interrupt) to let the software know of something, like a received frame.
RAIL is built to support multiple protocol stacks at the same time. The Silicon Labs Dynamic Multiprotocol solution is implemented with the Radio Scheduler, a preemptive, priority scheduler, which can schedule the radio hardware between protocols. The API is the same for single-protocol and multiprotocol RAIL, but multiprotocol RAIL applications should be implemented somewhat differently. See the Dynamic Multiprotocol User’s Guide for more information.
The library supports GCC and IAR compilers for ARM.