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.

EFR32 Series 2 EMLIB#

EFM32 Microcontrollers#

EFM32 Series 2 Peripheral HAL#

Some Peripheral HAL drivers are missing for Series 2. In the meantime, EMLIB can be used.

EFM32 Series 2 EMLIB#

Series 3 Wireless SoCs#

SixG301 Series 30#

  • SixG301: 15.4 (Zigbee, Thread)/Bluetooth SoC 301