Peripheral HAL and EMLIB Low-Level Drivers Libraries#
With the introduction of the next generation Series 3 platform, a new low-level drivers library called Peripheral HAL has been created.
Silicon Labs has relied for many years upon a previous low-level drivers library called EMLIB. EMLIB provides a unified API for all EFM32 and EFR32 MCUs and SoCs from Silicon Labs Series 2.
EMLIB modules are provided for all peripherals and core features. The library implements no interrupt handlers. Static data, critical sections, and module interdependencies are kept at a minimum.
EMLIB functions assert on error if DEBUG_EFM is defined. See ASSERT module for more information on error handling and default assertion and how to implement a custom handler.
The new library Peripheral HAL replaces EMLIB. It supports Series 2 and Series 3 devices. It supports the same characteristics as the ones described for EMLIB above. It has been designed with the following characteristics in mind:
Modularity
Easy maintenance
Flexibility
Consistency
Lightweight
IMPORTANT NOTES
Peripheral HAL and EMLIB can co-exist in the same application.
EMLIB does not and will not support Series 3 devices.
Peripheral HAL should be favored over EMLIB whenever possible, for example when starting without an existing code base.
In the long term, EMLIB will be replaced by Peripheral HAL.
Even though EMLIB will be replaced by Peripheral HAL, EMLIB is not deprecated and will continue to be maintained in the future.
The Peripheral HAL library is a granular API in which each function performs simple task to configure and access the peripheral hardware capabilities. The Peripheral HAL library provides APIs based on the hardware functionality available in Series 2 and Series 3 peripherals. If a specific hardware feature is not present, the corresponding API will not be available.
Each peripheral API encompasses two main groups:
Core API
Peripheral-specific API
The Core API defines common functions to manage common hardware features found on most peripherals to favor API unicity. It covers the following common driver operations:
Initialization
Enable/disable
Start/stop
Reset
Wait
Lock
Status
Interrupts
The Peripheral-specific API (e.g. setting baud rate for UART, setting compare matches for timers, etc.) provides support for the other peripheral hardware features and thus complements the Core API.
These Core and Peripheral-specific API reflect precisely the hardware capabilities and provide operations that must be done in accordance with the programming model described in the SoC reference manual. As a result, the Peripheral HAL library does not implement any complex processing and does not require any additional memory resources to save the drivers states, counter or data pointers: all the operations are performed by changing the associated peripheral registers content. The Peripheral HAL API is flexible enough to perform custom steps between its initialization and its enablement. It may be useful to do special peripheral initialization/configuration required by some peripheral advanced features.
RAIL#
The RAIL library provides a generic interface for all Silicon Labs radio features. RAIL documentation is available from Simplicity Studio or at docs.silabs.com.
The Peripheral HAL and EMLIB APIs are device-specific. Select your device family below to see the relevant documentation.
EFR32 Wireless SoCs#
EFR32 Series 2 Peripheral HAL#
Some Series 2 Peripheral HAL drivers are scheduled for a future release. In the meantime, EMLIB can be used.
EFR32xG21: Mighty/Blue Gecko 21
EFR32xG22: Mighty/Blue/Flex Gecko 22
EFR32xG23: Flex/Zen Gecko 23
EFR32xG24: Mighty / Blue Gecko 24
EFR32xG25: Flex Gecko 25
EFR32xG26: Mighty / Blue Gecko 26
EFR32xG27: Leopard Mighty / Blue Gecko 27
EFR32xG28: Flex/Zen Gecko 28
EFR32xG29: Lion Mighty / Blue Gecko 29
EFR32 Series 2 EMLIB#
EFR32xG21: Mighty/Blue Gecko 21
EFR32xG22: Mighty/Blue/Flex Gecko 22
EFR32xG23: Flex/Zen Gecko 23
EFR32xG24: Mighty / Blue Gecko 24
EFR32xG25: Flex Gecko 25
EFR32xG26: Mighty / Blue Gecko 26
EFR32xG27: Leopard Mighty / Blue Gecko 27
EFR32xG28: Flex/Zen Gecko 28
EFR32xG29: Lion Mighty / Blue Gecko 29
EFM32 Microcontrollers#
EFM32 Series 2 Peripheral HAL#
Some Peripheral HAL drivers are missing for Series 2. In the meantime, EMLIB can be used.
EFM32PG22: Pearl Gecko 22
EFM32PG23: Pearl Gecko 23
EFM32PG26: Pearl Gecko 26
EFM32PG28: Pearl Gecko 28
EFM32 Series 2 EMLIB#
EFM32PG22: Pearl Gecko 22
EFM32PG23: Pearl Gecko 23
EFM32PG26: Pearl Gecko 26
EFM32PG28: Pearl Gecko 28
Series 3 Wireless SoCs#
SixG301 Series 30#
SixG301: 15.4 (Zigbee, Thread)/Bluetooth SoC 301