Simplicity SDK Platform - Platform MCU Version 6.1.0 - Release Notes (Jun 23, 2026)#

Simplicity SDK Platform Version 6.1.0

Release Summary#

Key Features | API Changes | Bug Fixes | Chip Enablement

Key Features#

Added in 6.1.0#

  • ARM CMSIS: Upgraded from CMSIS 5.8 to CMSIS 6.2.

  • Toolchains: Updated GCC to 14.2 Rel1 and IAR to 9.70.4. IAR support extended to SiXG301 (Series 3) devices.

  • sl_main: New app_init_post_platform application hook for initialization that depends on platform components, drivers, and services but must run before stacks are initialized.

  • DMA: Added dma_channel driver and dma_manager service. DMADRV is deprecated.

API Changes#

  • New: sl_main app_init_post_platform() application hook.

  • New: I2C_SlaveAddressGetShifted() and I2C_SlaveAddressSetShifted() in EMLIB I2C.

Bug Fixes#

Fixed in 6.1.0#

  • sl_status: Moved constant char arrays to flash memory rather than RAM.

  • mic: Fixed driver init and deinit issues related to DMA channel allocation.

  • pwm: Updated RGB LED PWM driver compatibility for Series 3 devices.

  • NVM: Updated NVM operations to use non-cacheable data-alias to avoid L1ICACHE returning outdated cached data.

  • EFP: Updated the EFP driver core component to depend on gpiointerrupt and set its priority in the driver initialization sequence.

  • app_log: Updated app_log_validation.lua to support RTT stream type.

  • I2CSPM: Added I2C3 instance support.

  • Security: Addressed Fortify SCA reported issues.

  • SPIDRV : Disable non-EM2-capable EUSART instances before low-energy mode to prevent MOSI line glitches.

Chip Enablement#

Added in 6.1.0#

Added Lion Rev2 (EFR32BG29/EFR32MG29) OPN and radio board support.

Added EFR32FG2D (Serval GA) and WPK Main Board (BRD4002B) support.

Key Features#

New Features | Enhancements | Removed Features | Deprecated Features

New Features#

Added in 6.1.0#

Evaluation-quality services (Added in 6.1.0)#

The following platform services are included in this release at evaluation quality. Customers may use them for early evaluation.

  • Debug Logger: Logger support added (evaluation quality).

  • Watchdog Manager: Watchdog manager support added (evaluation quality).

  • sl_main: Added a new app_init_post_platform application hook in sl_main_second_stage_init, called after sl_platform_init, sl_driver_init, and sl_service_init complete and before sl_stack_init. This hook lets applications run initialization that depends on platform components, drivers, and services but must run before stacks are initialized.

  • Linker: Added support for RAM-only execution for provisioning applications (GCC toolchain).

  • Startup code: Added an assembly reset handler trampoline so safe code can execute before the C environment is loaded.

Enhancements#

Added in 6.1.0#

  • ARM CMSIS: Upgraded from CMSIS 5.8 to CMSIS 6.2.

  • CMSIS Device: Removed FLUSHRANGE bit in L2CACHE for SiXG301 (Series 3) devices (not supported).

  • Toolchains: Updated GCC from 12.2.1 to 14.2 Rel1 and IAR from 9.40.1 to 9.70.4.

  • IAR: IAR 7.40.4 supported. IAR support extended to SiXG301 (Series 3) devices.

  • DMA: SPIDRV and UARTDRV upgraded to use the dma_channel driver and dma_manager service.

  • Linker: memory_flash_start may now be specified without memory_flash_size; the application uses the remaining flash. The same applies to memory_ram_start and memory_ram_size.

  • Sleeptimer: Project generation now displays a warning when Sleeptimer is selected over PRORTC and RAIL is present in the project.

  • Interrupt Manager: The interrupt_manager_hooks component is now visible and user-selectable in Studio. The component enables ISR entry and exit hooks to be contributed via template contributions.

Removed Features#

None.

Deprecated Features#

Deprecated in 6.1.0#

  • DMADRV: The DMADRV component and all DMADRV APIs are now deprecated. Do not use them in new designs. They remain functional in this release and are scheduled for removal in the future. For new designs, use the dma_manager service and the dma_channel driver. These components provide the supported DMA API for Series 2 and Series 3 devices. For the complete mapping, see the DMADRV Migration Guide and the Deprecated APIs table below.

  • sl_system_implementation_kernel: Deprecated. Its dependencies were already deprecated. Use sl_main instead.

API Changes#

New APIs | Modified APIs | Removed APIs | Deprecated APIs

New APIs#

Added in 6.1.0#

New API Signature

Deprecated API replaced by this (if any)

void app_init_post_platform(void)

None

uint8_t I2C_SlaveAddressGetShifted(I2C_TypeDef *i2c)

None

void I2C_SlaveAddressSetShifted(I2C_TypeDef *i2c, uint8_t addr)

None

sl_status_t sl_dma_manager_init(sl_dma_handle_t *dma_handle, sl_peripheral_dma_t dma_peripheral)

DMADRV_Init

sl_status_t sl_dma_manager_get_default_handle(sl_dma_handle_t **dma_handle)

None

sl_status_t sl_dma_manager_allocate_channel(sl_dma_handle_t *dma_handle, uint8_t *channel_nbr)

DMADRV_AllocateChannel

sl_status_t sl_dma_manager_allocate_channel_with_properties(sl_dma_handle_t *dma_handle, uint32_t channel_properties, uint8_t *channel_nbr)

DMADRV_AllocateChannel

sl_status_t sl_dma_manager_reserve_channel(sl_dma_handle_t *dma_handle, uint8_t channel_nbr)

DMADRV_AllocateChannelById

sl_status_t sl_dma_manager_free_channel(sl_dma_handle_t *dma_handle, uint8_t channel_nbr)

DMADRV_FreeChannel

sl_status_t sl_dma_manager_allocate_sync(sl_dma_handle_t *dma_handle, uint8_t *sync_nbr)

None

sl_status_t sl_dma_manager_free_sync(sl_dma_handle_t *dma_handle, uint8_t sync_nbr)

None

sl_status_t sl_dma_manager_register_channel_irq_callback(sl_dma_handle_t *dma_handle, uint8_t channel_nbr, sl_dma_manager_channel_irq_callback_t callback)

None

sl_status_t sl_dma_manager_register_channel_user_data(sl_dma_handle_t *dma_handle, uint8_t channel_nbr, void *user_data)

None

sl_status_t sl_dma_manager_retrieve_current_channel_user_data(uint8_t *channel_nbr, void **user_data)

None

uint32_t sl_dma_manager_get_pending_errors(uint8_t channel_nbr)

None

void sl_dma_manager_clear_pending_errors(uint8_t channel_nbr)

None

sl_status_t sl_dma_channel_handle_alloc(sl_dma_channel_handle_t **handle)

None

sl_status_t sl_dma_channel_handle_free(sl_dma_channel_handle_t *handle)

None

size_t sl_dma_channel_handle_get_size(void)

None

sl_status_t sl_dma_channel_init(sl_dma_channel_handle_t *handle, sl_peripheral_t peripheral, uint8_t channel_number, sl_dma_channel_callback_t callback, void *user_data)

None

sl_status_t sl_dma_channel_deinit(sl_dma_channel_handle_t *handle)

None (per-channel teardown; DMADRV_DeInit was whole-driver)

sl_status_t sl_dma_channel_set_peripheral_signal(const sl_dma_channel_handle_t *handle, sl_dma_signal_t signal)

None

sl_status_t sl_dma_channel_descriptor_alloc(const sl_dma_channel_handle_t *handle, sl_dma_channel_xfer_descriptor_t **descriptor)

None

sl_status_t sl_dma_channel_descriptor_free(const sl_dma_channel_handle_t *handle, sl_dma_channel_xfer_descriptor_t *descriptor)

None

size_t sl_dma_channel_descriptor_get_size(void)

None

sl_status_t sl_dma_channel_submit_transfer_m2m(sl_dma_channel_handle_t *handle, void *source, void *destination, size_t size, sl_dma_channel_xfer_descriptor_t *descriptor)

None

sl_status_t sl_dma_channel_submit_transfer_m2p(sl_dma_channel_handle_t *handle, void *source, void *reg, size_t size, sl_dma_ctrl_size_t unit_size, sl_dma_channel_xfer_descriptor_t *descriptor)

DMADRV_MemoryPeripheral

sl_status_t sl_dma_channel_submit_transfer_p2m(sl_dma_channel_handle_t *handle, void *reg, void *destination, size_t size, sl_dma_ctrl_size_t unit_size, sl_dma_channel_xfer_descriptor_t *descriptor)

DMADRV_PeripheralMemory

sl_status_t sl_dma_channel_submit_transfer_list(sl_dma_channel_handle_t *handle, sl_dma_channel_transfer_t *list_head)

None

sl_status_t sl_dma_channel_submit_ping_pong_transfer_m2p(sl_dma_channel_handle_t *handle, void *source, void *source_2, void *destination, size_t size, sl_dma_ctrl_size_t unit_size, sl_dma_channel_xfer_descriptor_t *descriptor)

DMADRV_MemoryPeripheralPingPong

sl_status_t sl_dma_channel_submit_ping_pong_transfer_p2m(sl_dma_channel_handle_t *handle, void *source, void *destination, void *destination_2, size_t size, sl_dma_ctrl_size_t unit_size, sl_dma_channel_xfer_descriptor_t *descriptors)

DMADRV_PeripheralMemoryPingPong

sl_status_t sl_dma_channel_submit_triple_buffered_transfer_m2p(sl_dma_channel_handle_t *handle, void *source, void *source_2, void *source_3, void *destination, size_t size, sl_dma_ctrl_size_t unit_size, sl_dma_channel_xfer_descriptor_t *descriptors)

None

sl_status_t sl_dma_channel_submit_triple_buffered_transfer_p2m(sl_dma_channel_handle_t *handle, void *source, void *destination, void *destination_2, void *destination_3, size_t size, sl_dma_ctrl_size_t unit_size, sl_dma_channel_xfer_descriptor_t *descriptor)

None

sl_status_t sl_dma_channel_update_active_transfer(sl_dma_channel_handle_t *handle, size_t new_size)

None

sl_status_t sl_dma_channel_abort(sl_dma_channel_handle_t *handle)

DMADRV_StopTransfer

sl_status_t sl_dma_channel_suspend(const sl_dma_channel_handle_t *handle)

DMADRV_PauseTransfer

sl_status_t sl_dma_channel_resume(const sl_dma_channel_handle_t *handle)

DMADRV_ResumeTransfer

sl_status_t sl_dma_channel_get_status(sl_dma_channel_handle_t *handle, sl_dma_channel_status_t *status)

DMADRV_TransferActive, DMADRV_TransferDone, DMADRV_TransferCompletePending, DMADRV_TransferRemainingCount

Modified APIs#

None.

Removed APIs#

None.

Deprecated APIs#

Deprecated in 6.1.0#

The following DMADRV APIs are deprecated and replaced by the DMA Manager (dma_manager) and DMA Channel Driver (dma_channel). They remain functional in this release. See the DMADRV Migration Guide for the full mapping.

Deprecated API Signature

Replacement API

Planned Removal

Ecode_t DMADRV_Init(void)

sl_dma_manager_init

June 2027

Ecode_t DMADRV_DeInit(void)

No direct equivalent. Tear down each channel with sl_dma_channel_deinit, then release it with sl_dma_manager_free_channel.

June 2027

Ecode_t DMADRV_AllocateChannel(unsigned int *channelId, void *capabilities)

sl_dma_manager_allocate_channel / sl_dma_manager_allocate_channel_with_properties

June 2027

Ecode_t DMADRV_AllocateChannelById(unsigned int channelId, void *capabilities)

sl_dma_manager_reserve_channel

June 2027

Ecode_t DMADRV_FreeChannel(unsigned int channelId)

sl_dma_manager_free_channel

June 2027

Ecode_t DMADRV_MemoryPeripheral(unsigned int channelId, DMADRV_PeripheralSignal_t peripheralSignal, ...)

sl_dma_channel_set_peripheral_signal + sl_dma_channel_submit_transfer_m2p

June 2027

Ecode_t DMADRV_PeripheralMemory(unsigned int channelId, DMADRV_PeripheralSignal_t peripheralSignal, ...)

sl_dma_channel_set_peripheral_signal + sl_dma_channel_submit_transfer_p2m

June 2027

Ecode_t DMADRV_MemoryPeripheralPingPong(unsigned int channelId, DMADRV_PeripheralSignal_t peripheralSignal, ...)

sl_dma_channel_set_peripheral_signal + sl_dma_channel_submit_ping_pong_transfer_m2p

June 2027

Ecode_t DMADRV_PeripheralMemoryPingPong(unsigned int channelId, DMADRV_PeripheralSignal_t peripheralSignal, ...)

sl_dma_channel_set_peripheral_signal + sl_dma_channel_submit_ping_pong_transfer_p2m

June 2027

Ecode_t DMADRV_LdmaStartTransfer(int channelId, ...)

Drive the channel directly through the sl_hal_ldma HAL after allocating it from the DMA Manager.

June 2027

Ecode_t DMADRV_PauseTransfer(unsigned int channelId)

sl_dma_channel_suspend

June 2027

Ecode_t DMADRV_ResumeTransfer(unsigned int channelId)

sl_dma_channel_resume

June 2027

Ecode_t DMADRV_StopTransfer(unsigned int channelId)

sl_dma_channel_abort

June 2027

Ecode_t DMADRV_TransferActive(unsigned int channelId, bool *active)

sl_dma_channel_get_status

June 2027

Ecode_t DMADRV_TransferCompletePending(unsigned int channelId, bool *pending)

No direct equivalent. The DMA Channel Driver delivers completion through the callback registered with sl_dma_channel_init; polling for a pending interrupt is no longer required.

June 2027

Ecode_t DMADRV_TransferDone(unsigned int channelId, bool *done)

sl_dma_channel_get_status

June 2027

Ecode_t DMADRV_TransferRemainingCount(unsigned int channelId, int *remaining)

sl_dma_channel_get_status reports bytes_completed (cumulative). Compute remaining as transfer_size - bytes_completed.

June 2027

Bug Fixes#

Fixed in 6.1.0#

ID Issue Description GitHub / Salesforce Reference (if any) Affected Software Variants, Hardware, Modes, Host Interfaces
Common / Build
1528902 Security: Addressed Fortify SCA reported issues. 00334559 All
1632474 app_log: Updated app_log_validation.lua script to support RTT stream type. 00340619 All
Services
1564149 sl_status: Modified the constant char arrays in sl_status.c to use flash memory rather than RAM. 00334831 All
1589197 NVM: Updated the code to use non-cacheable data-alias (0x6100_0000-0x67FF_FFFF) for all NVM operations to avoid L1ICACHE returning outdated cached data from 0x0100_0000-0x04FF_FFFF. None SiXG301 devices
1633904 EFP: Updated the EFP driver core component to depend on gpiointerrupt and set its priority in the driver initialization sequence. 00340925 All
1589194 Clock Manager: Added atomic sections around SE Manager function calls during Clock Manager initialization to prevent calls to sli_se_execute_and_wait() before sl_se_init(). 00338665 All
1574895 Memory Manager: Fixed an issue in the statistics APIs where the reported used heap value could underflow. None All
1574016 Memory Manager: Fixed an issue where freeing the same memory pool allocation twice would corrupt the memory pool, making it impossible to delete the memory pool. None All
Peripherals
1573843 mic: Fixed mic driver init and deinit issues related to DMA channel allocation. 00335348 All
1611330 pwm: Updated the compatibility of the PWM driver to support Series 3 devices. 00339649 SiXG301 devices
1575696 I2CSPM: Added the I2C3 instance support in I2CSPM. None All
1601391 SPIDRV: SPIDRV now disables non-EM2-capable EUSART instances before going into low-energy mode to prevent potential glitches on the MOSI line. 00338193 All
1577673 hal_ldma: Multiple inlined functions of sl_hal_ldma used in the DMADRV interrupt handler were not placed in RAM for Series 3; they are now correctly placed in RAM. None SiXG301 devices
1563576 hal_ldma: Cleared the CHDONE flag for a given channel before starting a new transfer with the sl_hal_ldma_start_transfer() API. None All

Chip Enablement#

Added in 6.1.0#

Chip Family OPNs / Boards / OPN Combinations Supported Software Variants (if applicable) Supported Modes Supported Host Interfaces
EFR32BG29
  • OPN: EFR32BG29B230F1024CM40
  • OPN: EFR32BG29B220F1024CJ45
  • OPN: EFR32BG29B140F1024IM40
  • OPN: EFR32BG29B221F1024CJ45
  • Board: BG29-RB4420A
  • Board: xG29-RB4412A
All All All
EFR32MG29
  • OPN: EFR32MG29B230F1024CM40
  • OPN: EFR32MG29B140F1024IM40
  • Board: xG29-RB4412A
All All All

Added in 6.0.2#

Chip Family OPNs / Boards / OPN Combinations Supported Software Variants (if applicable) Supported Modes Supported Host Interfaces
EFR32FG2D
  • OPN: EFR32FG2DB010F512IM48
  • OPN: EFR32FG2DB020F512IM48
  • OPN: EFR32FG2DB010F512IM40
  • OPN: EFR32FG2DA010F256IM40
  • OPN: EFR32FG2DA020F256IM48
  • OPN: EFR32FG2DA010F256IM48
  • Board: BRD4277A
  • Board: BRD4278A
  • Board: BRD2611A
All All All
WPK Main Board
  • Board: BRD4002B
All All All

Added in 6.0.1#

None.

Added in 6.0.0#

Chip Family OPNs / Boards / OPN Combinations Supported Software Variants (if applicable) Supported Modes Supported Host Interfaces
EFR32FG23L
  • OPN: EFR32FG23L010F128GM40
  • OPN: EFR32FG23L020F128GM40
All All All
EFR32FG2D
  • OPN: EFR32FG2DB010F512IM48
  • Board: BRD4277A
All All All
BGM270S
  • OPN: BGM270SC22SNA4
All All All
MGM270S
  • OPN: MGM270SC22SNA4
  • Board: BRD2715A
  • Board: BRD4356A
All All All

Application Example Changes#

New Examples | Modified Examples | Removed Examples | Deprecated Examples

New Examples#

None.

Modified Examples#

None.

Removed Examples#

None.

Deprecated Examples#

None.

Known Issues and Limitations#

ID Issue or Limitation Description GitHub / Salesforce Reference (if any) Workaround (if any) Affected Software Variants, Hardware, Modes, Host Interfaces
None

Some variants of the ARM GCC 14.2.rel1 toolchain for Windows and macOS (Apple Silicon) were built without ZSTD compression support. LTO-enabled libraries built on the Linux version of the toolchain use ZSTD compression and are not compatible with the ARM-released toolchains on these platforms.

Customers who choose to use the official ARM GCC release on these platforms should be aware that enabling LTO may result in a link-time error.

None

Silicon Labs provides a fixed GCC 14.2 Rel1 toolchain for Windows and macOS (Apple Silicon), built from the same source as the ARM release but with ZSTD support included. The fixed toolchain identifies itself as Build silabs-14.2.rel1-b66 in the version output and is distributed through the Silicon Labs package manager (Simplicity Installer / SLT).

Windows and macOS (Apple Silicon). GCC toolchain with LTO enabled.
None

Applications that initialize osThreadAttr_t with the deprecated .reserved member must remove it from initializer lists. This release includes a union-based compatibility layer to ease migration when the deprecated .reserved member is still referenced.

None Remove the deprecated .reserved member from osThreadAttr_t initializer lists. Applications using ARM CMSIS 6.2 that still initialize osThreadAttr_t with the deprecated .reserved member.
1675728

Saving the memory layout in Simplicity Studio v6 Memory Editor writes memory_ram_start and related fields to the project .slcp file but omits memory_ram_alias_start. GCC project generation on SiXG301 devices then fails with a linker script template error (%x format: an integer is required, not Undefined).

None

Edit the project .slcp file and add memory_ram_alias_start under template_contribution.

Use the alias that matches the security view of memory_ram_start: 8388608 (0x00800000, Non-Secure / device_ram_alias_addr_ns) when memory_ram_start is in the Non-Secure RAM range (for example 536870912 / 0x20000000); 276824064 (0x10800000, Secure / device_ram_alias_addr_s) when memory_ram_start is in the Secure RAM range (for example 805306368 / 0x30000000).

If RAM start was offset from the device default, use memory_ram_alias_start = alias_base + (memory_ram_start - ram_base). Regenerate the project.

SiXG301 device family. GCC toolchain. Simplicity Studio v6 Memory Editor.