Zephyr 3.7.0

We are pleased to announce the release of Zephyr version 3.7.0.

This release is the last non-maintenance 3.x release and, as such, will be the next Long Term Support (LTS) release.

Major enhancements with this release include:

  • A new, completely overhauled hardware model has been introduced. It changes the way both SoCs and boards are named, defined and constructed in Zephyr. Additional information can be found in the Board Porting Guide.

  • A long-awaited HTTP Server library, and associated service API, allow to easily implement HTTP/1.1 and HTTP/2 servers in Zephyr. Resources can be registered statically or dynamically, and WebSocket support is included.

  • POSIX support has been extended, with most Options of the IEEE 1003-2017 System Interfaces receiving support, as well as most Options and Option groups required for PSE51, PSE52, and PSE53.

  • Bluetooth Host has been extended with support for the Nordic UART Service (NUS), Hands-free Audio Gateway (AG), Advanced Audio Distribution Profile (A2DP), and Audio/Video Distribution Transport Protocol (AVDTP).

  • Sensor abstraction model has been overhauled to adopt a read-then-decode approach that enables more types of sensors and data flows than the previous fetch/get APIs.

  • A new LLEXT Extension Developer Kit (EDK) makes it easier to develop and integrate custom extensions into Zephyr, including outside of the Zephyr tree.

  • Native simulator now supports leveraging the native host networking stack without having to rely on a complex setup of the host environment.

  • Trusted Firmware-M (TF-M) 2.1.0 and Mbed TLS 3.6.0 have been integrated into Zephyr. Both of these versions are LTS releases. What’s more, PSA Crypto has been adopted as a replacement for TinyCrypt and provides enhanced security and performance.

  • A new experimental implementation of the Precision Time Protocol (PTP, IEEE 1588) allows to synchronize time across devices with sub-microsecond accuracy.

  • New documentation pages have been introduced to help developers setup their local development environment for Visual Studio Code and CLion.

An overview of the changes required or recommended when migrating your application from Zephyr v3.6.0 to Zephyr v3.7.0 can be found in the separate migration guide.

While you may refer to release notes from previous 3.x releases for a full change log, other major enhancements and changes since previous LTS release, Zephyr 2.7.0, include:

  • Added support for Picolibc as the new default C library.

  • Added support for the following types of hardware peripherals:

    • 1-Wire

    • Battery Charger

    • Cellular Modem

    • Fuel Gauge

    • GNSS

    • Hardware Spinlock

    • I3C

    • RTC (Real Time Clock)

    • SMBus

  • Added support for snippets. Snippets are common configuration settings that can be used across platforms.

  • Added support for Linkable Loadable Extensions (LLEXT).

  • Summary of breaking changes (refer to release notes and migration guides from previous release notes for more details):

    • All Zephyr public headers have been moved to include/zephyr, meaning they need to be prefixed with <zephyr/...> when included.

    • Pinmux API has been removed. Pin control needs to be used as its replacement, refer to Pin Control for more details.

    • The following deprecated or experimental features have been removed:

      • 6LoCAN

      • civetweb module. See Zephyr 3.7’s new HTTP Server as a replacement.

      • tinycbor module. You may use zcbor as a replacement.

The following sections provide detailed lists of changes by component.

API Changes

Removed APIs in this release

  • The Bluetooth subsystem specific debug symbols are removed. They have been replaced with the Zephyr logging ones.

  • Removed deprecated pcie_probe and pcie_bdf_lookup functions from the PCIe APIs.

  • Removed deprecated CONFIG_EMUL_EEPROM_AT2X Kconfig option.

  • Removed pm_device_state_lock, pm_device_state_is_locked and pm_device_state_unlock functions from the Device PM APIs.

  • Removed deprecated MCUmgr transport API functions: zephyr_smp_rx_req, zephyr_smp_alloc_rsp and zephyr_smp_free_buf.

Deprecated in this release

  • SPI

  • Deprecated spi_is_ready() API function has been removed.

  • Deprecated spi_transceive_async() API function has been removed.

  • Deprecated spi_read_async() API function has been removed.

  • Deprecated spi_write_async() API function has been removed.

Architectures

  • ARC

    • Added ARC MWDT toolchain support for ARC-V targets

    • Added HW memory barrier API support for multicore targets

    • Enabled TLS by default if C++ is used in case of ARC MWDT toolchain

    • Fixed the issue when mbedtls failed to build with ARC MWDT toolchain & minimal LibC due to incorrect define which mark support of bounds-checking interfaces C library extension

    • Fixed device deferred initialization in case of ARC MWDT toolchain

  • ARM

    • Added initial support for Cortex-M85 Core

  • ARM64

    • Implemented symbol names in the backtraces, enable by selecting CONFIG_SYMTAB

    • Add compiler tuning for Cortex-R82

  • RISC-V

    • The fatal error message triggered from a fault now contains the callee-saved-registers states.

    • Implemented stack unwinding

      • Frame-pointer can be selected to enable precise stack traces at the expense of slightly increased size and decreased speed.

      • Symbol names can be enabled by selecting CONFIG_EXCEPTION_STACK_TRACE_SYMTAB

  • Xtensa

    • Added support to save/restore HiFi AudioEngine registers.

    • Added support to utilize MPU.

    • Added support to automatically generate interrupt handlers.

    • Added support to generate vector table at build time to be included in the linker script.

    • Added kconfig CONFIG_XTENSA_BREAK_ON_UNRECOVERABLE_EXCEPTIONS to guard using break instruction for unrecoverable exceptions. Enabling the break instruction via this kconfig may result in an infinite interrupt storm which may hinder debugging efforts.

    • Fixed an issue where passing the 7th argument via syscall was handled incorrectly.

    • Fixed an issue where arch_user_string_nlen() accessing unmapped memory resulted in an unrecoverable exception.

Kernel

  • Added k_uptime_seconds() function to simplify k_uptime_get() / 1000 usage.

  • Added k_realloc(), that uses kernel heap to implement traditional realloc() semantics.

  • Devices can now store devicetree metadata such as nodelabels by turning on CONFIG_DEVICE_DT_METADATA. This option may be useful in e.g. shells as devices can be obtained using human-friendly names thanks to APIs like device_get_by_dt_nodelabel().

  • Any device initialization can be deferred if its associated devicetree node has the special zephyr,deferred-init property set. The device can be initialized later in time by using device_init().

  • The declaration of statically allocated thread stacks has been updated to utilize K_THREAD_STACK_LEN for both single thread stack declaration and array thread stack declarations. This ensures correct alignment for all thread stacks. For user threads, this may increase the size of the statically allocated stack objects depending on architecture alignment requirements.

  • Fix an edge case deadlock in k_thread_abort() (and join) where racing ISRs on SMP systems could become stuck spinning to signal each other’s interrupted threads.

  • Fix a bug where CONFIG_SCHED_SCALABLE and CONFIG_SCHED_DEADLINE would corrupt the scheduling queue when used together.

Bluetooth

  • Audio

    • Removed err from bt_bap_broadcast_assistant_cb.recv_state_removed as it was redundant.

    • The broadcast_audio_assistant sample has been renamed to bap_broadcast_assistant. The broadcast_audio_sink sample has been renamed to bap_broadcast_sink. The broadcast_audio_source sample has been renamed to bap_broadcast_source. The unicast_audio_client sample has been renamed to bap_unicast_client. The unicast_audio_server sample has been renamed to bap_unicast_server. The public_broadcast_sink sample has been renamed to pbp_public_broadcast_sink. The public_broadcast_source sample has been renamed to pbp_public_broadcast_source.

    • The CAP Commander and CAP Initiator now no longer require CAS to be discovered for BT_CAP_SET_TYPE_AD_HOC sets. This allows applications to use these APIs on e.g. BAP Unicast Servers that do not implement the CAP Acceptor role.

  • Host

    • Added Nordic UART Service (NUS), enabled by the CONFIG_BT_ZEPHYR_NUS. This Service exposes the ability to declare multiple instances of the GATT service, allowing multiple serial endpoints to be used for different purposes.

    • Implemented Hands-free Audio Gateway (AG), enabled by the CONFIG_BT_HFP_AG. It works as a device that is the gateway of the audio. The typical device acting as Audio Gateway is a cellular phone. It controls the device (Hands-free Unit), that is the remote audio input and output mechanism.

    • Implemented Advanced Audio Distribution Profile (A2DP) and Audio/Video Distribution Transport Protocol (AVDTP), A2DP is enabled by CONFIG_BT_A2DP, AVDTP is enabled by CONFIG_BT_AVDTP. They implement the protocols and procedures that realize distribution of audio content of high quality in mono, stereo, or multi-channel modes. A typical use case is the streaming of music content from a stereo music player to headphones or speakers. The audio data is compressed in a proper format for efficient use of the limited bandwidth.

    • Reworked the transmission path for data and commands. The “BT TX” thread has been removed, along with the buffer pools for HCI fragments and L2CAP segments. All communication with the Controller is now exclusively done in the system workqueue context.

    • CONFIG_BT_PER_ADV_SYNC_TRANSFER_RECEIVER and CONFIG_BT_PER_ADV_SYNC_TRANSFER_SENDER now depend on CONFIG_BT_CONN as they do not work without connections.

    • Improve bt_foreach_bond() to support Bluetooth Classic key traversal.

  • HCI Drivers

    • Completely redesigned HCI driver interface. See the Bluetooth HCI section in Migration guide to Zephyr v3.7.0 for more information.

    • Added support for Ambiq Apollo3 Blue series.

    • Added support for NXP RW61x.

    • Added support for Infineon CYW208XX.

    • Added support for Renesas SmartBond DA1469x.

    • Removed unmaintained B91 driver.

    • Added support for NXP IW612 on boards mimxrt1170_evkb and mimxrt1040_evk. It can be enabled by CONFIG_BT_NXP_NW612.

Boards & SoC Support

Build system and Infrastructure

  • CI-enabled blackbox tests were added to verify the correctness of most Twister flags.

  • A socs folder for applications has been introduced that allows for Kconfig fragments and devicetree overlays that should apply to any board target using a particular SoC and board qualifier (GitHub #70418). Support has also been added to sysbuild (GitHub #71320).

  • Board/SoC flashing configuration settings have been added (GitHub #69748).

  • Deprecated the global CSTD cmake property in favor of the CONFIG_STD_C choice to select the C Standard version. Additionally, subsystems can select a minimum required C Standard version, with, for example, CONFIG_REQUIRES_STD_C11.

  • Fixed issue with passing UTF-8 configs to applications using sysbuild (GitHub #74152).

  • Fixed issue whereby domain file in sysbuild projects would be loaded and used with outdated information if sysbuild configuration was changed, and west flash was ran directly after (GitHub #73864).

  • Fixed issue with Zephyr modules not being listed in sysbuild if they did not have a Kconfig file set (GitHub #72070).

  • Added sysbuild SB_CONFIG_COMPILER_WARNINGS_AS_ERRORS Kconfig option to turn on “warning as error” toolchain flags for all images, if set (GitHub #70217).

  • Fixed issue whereby files used in a project (e.g. devicetree overlays or Kconfig fragments) were not correctly watched and CMake would not reconfigure if they were changed (GitHub #74655).

  • Added flash support for Intel Hex files for the LinkServer runner.

  • Added sysbuild sysbuild/CMakeLists.txt entry point and added support for APPLICATION_CONFIG_DIR which allows for adjusting how sysbuild functions (GitHub #72923).

  • Fixed issue with armfvp find path if it contained a colon-separated list (GitHub #74868).

  • Fixed issue with version.cmake field sizes not being enforced (GitHub #74357).

  • Fixed issue with sysbuild not clearing EXTRA_CONF_FILE before processing images which prevented this option being passed on to the image (GitHub #74082).

  • Added sysbuild root support which works similarly to the existing root module, adjusting paths relative to APP_DIR (GitHub #73390).

  • Added warning/error message for blobs that are missing (GitHub #73051).

  • Fixed issue with correct python executable detection on some systems (GitHub #72232).

  • Added support for enabling LTO for whole application (GitHub #69519).

  • Fixed FILE_SUFFIX issues relating to double application of suffixes, non-application in sysbuild and variable name clashes in CMake functions (GitHub #70124, GitHub #71280).

  • Added support for new aggressive size optimisation flag (for GCC and Clang) using CONFIG_SIZE_OPTIMIZATIONS_AGGRESSIVE (GitHub #70511).

  • Fixed issue with printing out BUILD_VERSION if it was empty (GitHub #70970).

  • Fixed sysbuild issue of sysbuild_cache_set() cmake function wrongly detecting partial matches for de-duplication (GitHub #71381).

  • Fixed issue with detecting wrong VERSION file (GitHub #71385).

  • Added support for disabling output disassembly having the source code in using CONFIG_OUTPUT_DISASSEMBLY_WITH_SOURCE (GitHub #71535).

  • Twister now supports --flash-before parameter that allows flashing DUT before opening serial port (GitHub #47037).

Drivers and Sensors

  • ADC

    • Added ADC_DT_SPEC_*BY_NAME() macros to get ADC IO-channel information from DT by name.

    • Added support for voltage biasing:

      • Added a CONFIG_ADC_CONFIGURABLE_VBIAS_PIN selected by drivers that support voltage biasing.

      • Added a zephyr,vbias-pins property to the adc-controller base binding to describe voltage bias pins.

      • Implemented for the TI ADC114s08 ADC driver.

    • Sample changes

      • Renamed existing ADC sample to adc_dt.

      • Added a new sample called adc_sequence that shows more of the runtime adc_sequence features.

    • New ADC Drivers

      • Added driver for the ENE KB1200.

      • Added driver for the NXP GAU ADC.

    • ADI AD559x changes

      • Added support for ADI’s ad5593.

      • Added I2C bus support for ADI ad559x.

      • Added configuration of internal reference voltage value to ad559x to support calls of adc_raw_to_millivolts().

      • Fixed issue with driver initialization causing improper operation in the ad559x driver regarding the availability of CONFIG_THREAD_NAME.

      • Improved the ADC read efficiency and validation in ad559x driver.

    • ESP32 changes

      • Updated ESP32 ADC driver to work with version 5.1 of hal_espressif.

      • Added support for DMA mode operation for ESP32S3 and ESP32C3.

    • nRF changes

      • Added support for nRF54L15 and nRF54H20 in the nrfx_saadc driver.

      • Improved the nRF SAADC driver by disabling burst mode on unused channels, avoiding freezes.

      • Fixed issue which allowed negative ADC readings in single-ended mode using the adc_nrfx_saadc.c device driver. Note that this fix prevents the nRF54H and nRF54L series from performing 8-bit resolution single-ended readings due to hardware limitations.

    • NXP LPADC changes

      • Enabled acquisition time feature in the NXP LPADC driver.

      • Added support for regulator output as reference to NXP LPADC.

      • Changed phandle type DT property nxp,reference-supply to phandle-array type DT property nxp,references in nxp,lpc-lpadc binding. The NXP LPADC driver now supports passing the reference voltage value by using nxp,references.

    • Smartbond changes

      • Added support for power management to the Smartbond SDADC and GPADC drivers.

      • Fixed support for CONFIG_PM_DEVICE_RUNTIME in the Smartbond ADC driver.

    • STM32 changes

      • Fixed various issues with DMA support in the STM32 ADC driver.

      • Added support for STM32H7R/S series.

    • Other driver changes

      • Added support for Nuvoton m2l31x in the numaker ADC driver.

      • Fixed issue with configuration register access in the ads1119 driver.

      • Fixed uninitialized value in kb1200 driver found in static analysis.

      • Fixed issue with adc_raw_to_millivolts() returning half the actual voltage with the tla2021 driver by correcting the reference voltage value.

    • Added support for Nuvoton Numaker M2L31X series.

  • Battery

    • Added re-charge-voltage-microvolt property to the battery binding. This allows to set limit to automatically start charging again.

  • Battery backed up RAM

    • Added support for STM32G0 and STM32H5 series.

  • CAN

    • Extended support for automatic sample point location to also cover can_calc_timing() and can_calc_timing_data().

    • Added optional min-bitrate devicetree property for CAN transceivers.

    • Added devicetree macros DT_CAN_TRANSCEIVER_MIN_BITRATE and DT_INST_CAN_TRANSCEIVER_MIN_BITRATE for getting the minimum supported bitrate of a CAN transceiver.

    • Added support for specifying the minimum bitrate supported by a CAN controller in the internal CAN_DT_DRIVER_CONFIG_GET and CAN_DT_DRIVER_CONFIG_INST_GET macros.

    • Added can_get_bitrate_min() and can_get_bitrate_max() for retrieving the minimum and maximum supported bitrate for a given CAN controller/CAN transceiver combination, reflecting that retrieving the bitrate limits can no longer fail. Deprecated the existing can_get_max_bitrate() API function.

    • Updated the CAN timing functions to take the minimum supported bitrate into consideration when validating the bitrate.

    • Made the sample-point and sample-point-data devicetree properties optional.

    • Renamed the bus_speed and bus_speed_data fields of can_driver_config to bitrate and bitrate_data.

    • Added driver for nordic,nrf-can.

    • Added driver support for Numaker M2L31X to the nuvoton,numaker-canfd driver.

    • Added host communication test suite.

  • Charger

    • Added chgin-to-sys-current-limit-microamp property to maxim,max20335-charger.

    • Added system-voltage-min-threshold-microvolt property to maxim,max20335-charger.

    • Added re-charge-threshold-microvolt property to maxim,max20335-charger.

    • Added thermistor-monitoring-mode property to maxim,max20335-charger.

  • Clock control

    • Added support for Microcontroller Clock Output (MCO) on STM32H5 series.

    • Added support for MSI clock on STM32WL series.

    • Added driver for Analog Devices MAX32 SoC series.

    • Added support for Nuvoton Numaker M2L31X series.

    • Refactored ESP32 clock control driver to support ESP32-C6.

    • In LiteX (drivers/clock_control/clock_control_litex.c) added return code checking for litex_clk_get_duty_cycle() and litex_clk_get_clkout_divider().

  • Counter

    • Added support for Ambiq Apollo3 series.

    • Added support for STM32H7R/S series.

    • Added driver for LPTMR to NXP MCXN947

    • Added the resolution property in nxp,lptmr binding to represent the maximum width in bits the LPTMR peripheral uses for its counter.

  • DAC

  • Disk

    • Support for eMMC devices was added to the STM32 SD driver. This can be enabled with CONFIG_SDMMC_STM32_EMMC.

    • Added a loopback disk driver, to expose a disk device backed by a file. A file can be registered with the loopback disk driver using loopback_disk_access_register()

    • Added support for DISK_IOCTL_CTRL_INIT and DISK_IOCTL_CTRL_DEINIT macros, which allow for initializing and de-initializing a disk at runtime. This allows hotpluggable disk devices (like SD cards) to be removed and reinserted at runtime.

    • Added SDMMC support for STM32H5 series.

  • Display

  • DMA

    • Error callback configuration renamed to better signal enable/disable status

    • Add support to NXP MCXN947

  • DMIC

    • Added support for NXP rd_rw612_bga

  • Entropy

    • Added support for STM32H7R/S series.

  • EEPROM

  • eSPI

    • Renamed eSPI virtual wire direction macros, enum values and Kconfig to match the new terminology in eSPI 1.5 specification.

  • Ethernet

    • Introduced CONFIG_ETH_DRIVER_RAW_MODE. This option allows building ethernet drivers without the zephyr L2 ethernet layer.

    • Removed the ethernet-fixed-link DT binding.

    • Removed VLAN handling from ethernet drivers since it is now handled by the generic ethernet L2 code.

    • Implemented/reworked HW MAC Address filtering in the eth_mcux, eth_nxp_enet, and eth_nxp_s32_gmac, eth_stm32, and eth_nxp_s32_netc drivers.

    • New Drivers

      • Added new eth_nxp_enet_qos driver for the ethernet controller present on NXP MCXN SOCs.

      • Added support for adin1100 phy.

      • Added support for the Realtek RTL8211F phy.

    • NXP ENET driver changes

      • eth_nxp_enet driver is no longer experimental.

      • Deprecated eth_mcux driver.

      • All boards and SOCs with nxp,kinetis-ethernet compatible nodes reworked to use the new nxp,enet binding.

      • Added support for network device power management with nxp_enet driver on Kinetis platforms.

      • Converted eth_nxp_enet driver to use a dedicated workqueue for RX managed by the kernel rather than a manual infinite loop.

      • Disabled hardware checksum acceleration when IPV6 is enabled with eth_nxp_enet, since the hardware does not support accelerating ICMPv6 checksums.

      • Added support for nxp,enet1g.

      • Added support to use a fused MAC address for nxp_enet MAC on some platforms.

      • Fixed issue with LAA bit not being set and a confusing description of the nxp,unique-mac property used with the nxp_enet driver.

      • Fixed cache maintain being enabled when using a noncache DMA buffer in nxp_enet driver.

      • Added MMIO mappings to nxp_enet driver.

      • Clarified DSA supported with eth_nxp_enet.

    • NXP S32 ethernet changes

      • The eth_nxp_s32_gmac driver now implies CONFIG_MDIO.

      • eth_nxp_s32_netc driver updated to use new MBOX API.

    • Adin2111 driver changes

      • Corrected the bitfield position of IAMSK1 TX_READY_MASK in adin2111 driver.

      • Changed adin2111 driver to always append crc32 to the end of the frame.

      • Adjusted eth_adin2111 driver to have the appropriate multicaster filter mask.

      • Fixed the “generic SPI without crc8” mode of adin2111 driver.

      • Added Open Alliance SPI protocol support to the adin2111 driver.

      • Added custom driver extension APIs for adin2111 driver.

      • Enabled support for promiscuous mode in the adin2111 driver.

      • Moved OA buffers out of device data of the adin2111 driver to save ~32KB of space when using the generic SPI protocol.

      • Fixed a build warning in eth_adin2111 driver on 64-bit platforms.

      • Various small changes to adin2111 driver.

    • STM32 ethernet driver changes

      • Added support for PTP on compatible STM32 series (STM32F7, STM32H5 and STM32H7).

      • Changed eth_stm32 to use phy APIs to access the phy to avoid collisions when multitasking.

      • Removed legacy STM32Cube HAL API support for STM32 F4, F7, and H7 series.

      • Added support for RX/TX timestamping to eth_stm32_hal driver.

    • ESP32 ethernet driver changes

      • Added support to esp32 ethernet driver to set the MAC address during runtime.

      • Updated esp32 ethernet driver to work with version 5.1 of hal_espressif.

      • Fixed build of esp32 ethernet driver when CONFIG_NET_STATISTICS is enabled.

      • Fixed ESP32 ethernet driver not clocking external PHY correctly over GPIO.

    • Other ethernet driver changes

      • Added link status detection to the w5500 ethernet driver, configurable via Kconfig.

      • Added ability to set MAC address at runtime with eth_liteeth driver.

      • Fixed issue in the eth_stellaris driver where it was previously not taken into account that the number of interrupts received by the driver may be less than the number of data packets received by the ethernet controller.

      • Added a devicetree property for the enc28j60 to set the RX filter.

      • Fixed ESTAT TXABRT bit not being cleared on error in the enc28j60 driver.

      • Added conditions to enable ptp_clock driver implementation for the native_posix ethernet driver when PTP subsystem is enabled.

      • Fixed DSA driver for KSZ8xxx to correctly initialize LAN devices.

      • Fixed the wrong register address being used for tail tag enable in ksz8863.

    • Phy driver changes

      • Fixed various control issues with the KSZ8081 phy driver regarding resets, autonegotiation, link detection, and missing/spamming logging messages.

      • Changed property names of the reset and interrupt gpios in the KSZ8081 DT binding.

      • Fixed bus fault in phy_mii driver when using fixed-link mode.

  • Flash

    • Added support for Ambiq Apollo3 series.

    • Added support for multiple instances of the SPI NOR driver (spi_nor.c).

    • Added preliminary support for non-erase devices with introduction of device capabilities to flash_parameters and the utility function flash_params_get_erase_cap() that allows to obtain the erase type provided by a device; added FLASH_ERASE_C_EXPLICIT, which is currently the only supported erase type and is set by all flash devices.

    • Added the flash_flatten() function that can be used on devices, with or without erase requirement, when erase has been used not for preparing a device for a random data write, but rather to remove/scramble data from that device.

    • Added the flash_fill() utility function which allows to write a single value across a provided range in a selected device.

    • Added support for RRAM on nrf54l15 devices.

    • Added support of non busy wait polling in STM32 OSPI driver.

    • Added support for STM32 XSPI external NOR flash driver (st,stm32-xspi-nor).

    • Added support for XIP on external NOR flash in STM32 OSPI, QSPI and XSPI driver.

    • STM32 OSPI driver: clk, dqs, ncs ports can now be configured by device tree configurable (see st,stm32-ospi).

    • Added FlexSPI support to NXP MCXN947

    • Added support for Nuvoton Numaker M2L31X series.

  • Fuel Gauge

    • max17048: Corrected voltage units from mV to uV.

  • GNSS

    • Added GNSS device driver API test suite.

    • Added support for the u-blox UBX protocol.

    • Added device driver for the u-blox M8 GNSS modem (u-blox,m8).

    • Added device driver for the Luatos Air530z GNSS modem (luatos,air530z).

  • GPIO

    • Added support for Ambiq Apollo3 series.

    • Added Broadcom Set-top box(brcmstb) SoC GPIO driver.

    • Added STM32_GPIO_WKUP flag which allows to configure specific pins as wakeup source from Power Off state on STM32 L4, U5, WB, & WL SoC series.

    • Added driver for Analog Devices MAX32 SoC series.

    • Added support for Nuvoton Numaker M2L31X series.

    • Added interrupt support to the Renesas RZ/T2M GPIO driver (renesas,rzt2m-gpio).

  • Hardware info

    • Added device EUI64 ID support and implementation for STM32WB, STM32WBA and STM32WL series.

  • I2C

    • Added support for Ambiq Apollo3 series.

    • In STM32 V2 driver, added support for a new CONFIG_I2C_STM32_V2_TIMING which automatically computes bus timings which should be used to configure the hardware block depending on the clock configuration in use. To avoid embedding this heavy algorithm in a production application, a dedicated sample I2C V2 timings is provided to get the output of the algorithm. Once bus timings configuration is available, CONFIG_I2C_STM32_V2_TIMING could be disabled, bus timings configured using device tree.

    • Added support for STM32H5 series.

    • Added support to NXP MCXN947

    • Added driver for Analog Devices MAX32 SoC series.

    • Added support for Nuvoton Numaker M2L31X series.

    • LiteX I2C driver (drivers/i2c/i2c_litex.c):

      • Added support for bitrate setting from the devicetree.

      • Added i2c_litex_recover_bus() and i2c_litex_get_config() API implementations.

  • I2S

    • Added support for STM32H5 series.

    • Extended the MCUX Flexcomm driver to support additional channels and formats.

    • Added support for Nordic nRF54L Series.

    • Fixed divider calculations in the nRF I2S driver.

  • I3C

    • Added shell support for querying bus and CCC commands.

    • Added driver to support the I3C controller on NPCX.

    • Improvements and bug fixes on nxp,mcux-i3c, including handling the bus being busy more gracefully instead of simply returning errors.

  • Input

  • LED

    • Added device completion to LED shell commands and made the get_info command display colors as strings.

    • Added driver for Lumissil Microsystems (a division of ISSI) IS31FL3194 controller (issi,is31fl3194).

  • LED Strip

    • The chain-length and color-mapping properties have been added to all LED strip bindings.

    • The length of a strip is now checked before updating it, an error is returned if the provided data is too long.

    • A length function has been added which returns the length of the LED strip (led_strip_length()).

    • The update channels function is now optional and can be left unimplemented.

    • The in-gpios and output-pin properties of the respective worldsemi,ws2812-gpio and worldsemi,ws2812-rpi_pico-pio devicetree bindings have been renamed to gpios.

    • Removed CONFIG_WS2812_STRIP and CONFIG_WS2812_STRIP_DRIVER Kconfig options. They became useless after refactoring.

    • Added driver for Texas Instruments TLC59731 RGB controller.

  • LoRa

    • Added driver for Reyax LoRa module

  • Mailbox

    • Added support for HSEM based STM32 driver.

  • MDIO

    • Made the bus_enable and bus_disable functions optional for drivers to implement, and removed empty implementation from many drivers.

    • Added NXP ENET QOS MDIO controller driver.

    • Fixed but with NXP ENET MDIO driver blocking the system workqueue.

    • CONFIG_MDIO_NXP_ENET_TIMEOUT units change to microseconds.

    • Added support for STM32 MDIO controller driver.

  • MFD

  • Modem

    • Removed deprecated GSM_PPP driver along with its dts compatible zephyr,gsm-ppp.

    • Removed deprecated UART_MUX and GSM_MUX previously used by GSM_PPP.

    • Removed support for dts compatible zephyr,gsm-ppp from MODEM_CELLULAR driver.

    • Removed integration with UART_MUX from MODEM_IFACE_UART_INTERRUPT module.

    • Removed integration with UART_MUX from MODEM_SHELL module.

    • Implemented modem pipelinks in MODEM_CELLULAR driver for additional DLCI channels available by the different modems. This includes generic AT mode DLCI channels, named user_pipe_<index> and DLCI channels reserved for GNSS tunneling named gnss_pipe.

    • Added new set of shell commands for sending AT commands directly to a modem using the newly implemented modem pipelinks. The implementation of the new shell commands is both functional and together with the MODEM_CELLULAR driver will provide an example of how to implement and use the modem pipelink module.

  • PCIE

    • pcie_bdf_lookup and pcie_probe have been removed since they have been deprecated since v3.3.0.

  • MIPI-DBI

    • Added release API

    • Added support for mode selection via the device tree

  • MSPI

    • Add the new experimental MSPI(Multi-bit SPI) API, enabling support for advanced SPI controllers and peripherals that typically require command, address and data phases as well as variable latency for a transfer. The API now supports from single wire SDR up to hex wires DDR communication in sync/async ways.

    • Added MSPI bus emulator under bus emulators to showcase the implementation of the MSPI API.

    • Added MSPI flash device emulator to showcase the use of the MSPI API and interfacing with MSPI bus controllers.

    • Added APS6404L QPI pSRAM device driver.

    • Added ATXP032 OPI NOR flash device driver.

    • Added Ambiq Apollo3p MSPI controller driver.

    • Added MSPI asynchronous transfer and JEDEC MSPI-NOR flash samples to showcase the use of MSPI device drivers.

    • Added mspi/api and mspi/flash testcase for developers to check their implementations.

  • Pin control

    • Added driver for Renesas RA8 series

    • Added driver for Infineon PSoC6 (legacy)

    • Added driver for Analog Devices MAX32 SoC series.

    • Added driver for Ambiq Apollo3

    • Added driver for ENE KB1200

    • Added driver for NXP RW

    • Espressif driver now supports ESP32C6

    • STM32 driver now supports remap functionality for STM32C0

    • Added support for Nuvoton Numaker M2L31X series.

  • PWM

    • Added support for STM32H7R/S series.

    • Added a Add QTMR PWM driver for NXP imxrt11xx

    • Made the NXP MCUX PWM driver thread safe

    • Fix PWM Blinky code sample to demonstrate PWM support for BeagleConnect Freedom.

    • Added driver for ENE KB1200.

    • Added support for Nordic nRF54H and nRF54L Series SoCs.

    • Added support for Nuvoton Numaker M2L31X series.

  • Regulators

  • Reset

    • Added driver for reset controller on Nuvoton NPCX chips.

    • Added reset controller driver for NXP SYSCON.

    • Added reset controller driver for NXP RSTCTL.

    • Added support for Nuvoton Numaker M2L31X series.

  • RTC

    • Added Raspberry Pi Pico RTC driver.

    • Added support for CONFIG_RTC_ALARM on all STM32 MCU series (except STM32F1).

    • Added support for Nuvoton Numaker M2L31X series.

  • RTIO

    • Move lock-free queues out of RTIO into lib, dropping the rtio_ prefix to SPSC and MPSC queues.

    • Added tests and fixed bugs related to chained callback requests.

    • Wrapper around p4wq (rtio workq) created to go from blocking to non-blocking behavior in cases where native asynchronous RTIO functionality is unavailable.

  • SDHC

  • Sensors

    • General

      • Added a channel specifier to the new read/decoder API.

      • Added a blocking sensor read call sensor_read().

      • Decoupled RTIO requests using RTIO workqueues service to turn sensor_submit_callback() into an asynchronous request.

      • Moved most drivers to vendor subdirectories.

    • AMS

    • Aosong

      • Added DHT20 digital-output humidity and temperature sensor driver (aosong,dht20).

      • Added CONFIG_DHT_LOCK_IRQS for the dht11 driver which allows for locking interrupts during sensor reading to prevent issues with reading the sensor.

    • Bosch

      • Updated BME280 to the new async API.

    • Infineon

    • Maxim

    • NXP

      • Added low power comparator driver (nxp,lpcmp).

    • Rohm

    • Silabs

      • Made various fixes and enhancements to the SI7006 humidity/temperature sensor driver.

    • ST

      • QDEC driver now supports encoder mode configuration (see st,stm32-qdec).

      • Added support for STM32 Digital Temperature Sensor (st,stm32-digi-temp).

      • Added IIS328DQ I2C/SPI accelerometer sensor driver (st,iis328dq).

    • TDK

      • Added support for the MPU6500 3-axis accelerometer and 3-axis gyroscope sensor to the MPU6050 driver.

    • TI

      • Added TMP114 driver (ti,tmp114).

      • Added INA226 bidirectional current and power monitor driver (ti,ina226).

      • Added LM95234 quad remote diode and local temperature sensor driver (national,lm95234).

    • Other vendors

      • Added Angst+Pfister FCX-MLDX5 O2 sensor driver (ap,fcx-mldx5).

      • Added ENE KB1200 tachometer sensor driver (ene,kb1200-tach).

      • Added Festo VEAA-X-3 series proportional pressure regulator driver (festo,veaa-x-3).

      • Added Innovative Sensor Technology TSic xx6 temperature sensor driver (ist,tsic-xx6).

      • Added ON Semiconductor NCT75 temperature sensor driver (onnn,nct75).

      • Added ScioSense ENS160 digital metal oxide multi-gas sensor driver (sciosense,ens160).

      • Made various fixes and enhancements to the GROW_R502A fingerprint sensor driver.

  • Serial

    • Added driver to support UART over Bluetooth LE using NUS (Nordic UART Service). This driver enables using Bluetooth as a transport to all the subsystems that are currently supported by UART (e.g: Console, Shell, Logging).

    • Added CONFIG_NOCACHE_MEMORY support in async DMA mode in STM32 driver. It is now possible to use UART in DMA mode with CONFIG_DCACHE enabled on STM32 F7 & H7 SoC series, as long as DMA buffers are placed in an uncached memory section.

    • Added support for STM32H7R/S series.

    • Added support for HSCIF (High Speed Serial Communication Interface with FIFO) in the UART driver for Renesas RCar platforms.

    • Added driver for ENE KB1200 UART.

    • Added driver for UART on Analog Devices MAX32 series microcontrollers.

    • Added driver for UART on Renesas RA8 devices.

    • uart_emul (zephyr,uart-emul):

      • Added support for asynchronous API for the emulated UART driver.

    • uart_esp32 (espressif,esp32-uart):

      • Added support to invert TX and RX pin signals.

      • Added support for ESP32C6 SoC.

    • uart_native_tty (zephyr,native-tty-uart):

      • Added support to emulate interrupt driven UART.

    • uart_mcux_lpuart (nxp,kinetis-lpuart):

      • Added support for single wire half-duplex communication.

      • Added support to invert TX and RX pin signals.

    • uart_npcx (nuvoton,npcx-uart):

      • Added support for asynchronous API.

      • Added support for baud rate of 3MHz.

    • uart_nrfx_uarte (nordic,nrf-uarte):

      • Added support to put TX and RX pins into low power mode when UART is not active.

    • uart_nrfx_uarte2 (nordic,nrf-uarte):

      • Prevents UART from transmitting when device is suspended.

      • Fixed some events not being triggered.

    • uart_pl011 (arm,pl011):

      • Added support for runtime configuration.

      • Added support for reset device.

      • Added support to use clock control to determine frequency.

      • Added support for hardware flow control.

      • Added support for UART on Ambiq Apollo3 SoC.

    • uart_smartbond (renesas,smartbond-uart):

      • Added support for power management.

      • Added support to wake up via DTR and RX lines.

    • uart_stm32 (st,stm32-uart):

      • Added support to identify if DMA buffers are in data cache or non-cacheable memory.

    • Added support for Nuvoton Numaker M2L31X series.

  • SPI

    • Added support to NXP MCXN947

    • Added support for Ambiq Apollo3 series general IOM based SPI.

    • Added support for Ambiq Apollo3 BLEIF based SPI, which is specific for internal HCI.

    • Added support for CONFIG_PM and CONFIG_PM_DEVICE_RUNTIME on STM32 SPI driver.

    • Added support for CONFIG_NOCACHE_MEMORY in DMA SPI mode for STM32F7x SoC series.

    • Added support for STM32H7R/S series.

    • Added driver for Analog Devices MAX32 SoC series.

    • Fixed an incorrect register assignment in gd32 spi.

  • USB

    • Added UDC shim driver for NXP EHCI and IP3511 USB controller.

    • Various fixes and improvements in IT82xx2, DWC2, STM32, RP2040, Smartbond USB controller drivers.

  • Video

    • Added support for STM32 Digital camera interface (DCMI) driver (st,stm32-dcmi).

    • Enabled NXP USB Device controllers

    • Added support for the ov7670 camera

    • Added support for the ov5640 camera

    • Added CSI-2 MIPI driver for NXP MCUX

    • Added support for DVP FPC 24-pins mt9m114 camera module shield

  • Watchdog

    • Added CONFIG_WDT_NPCX_WARNING_LEADING_TIME_MS to set the leading warning time in milliseconds. Removed no longer used CONFIG_WDT_NPCX_DELAY_CYCLES.

    • Added support for Ambiq Apollo3 series.

    • Added support for STM32H7R/S series.

    • Added support for Nuvoton Numaker M2L31X series.

    • Added watchdog for external 32kHz crystal in ESP32 SoC variants.

  • Wi-Fi

    • Fixed message parsing for esp-at.

    • Fixed esp-at connect failures.

    • Implement bind() and recvfrom() for UDP sockets for esp-at.

    • Added option for setting maximum data size for eswifi.

    • Fixed ESP32 Wi-Fi driver memory leak.

Networking

  • ARP:

    • Added support for gratuitous ARP transmission.

    • Fixed a possible deadlock between TX and RX threads within ARP module.

    • Fixed a possible ARP entry leak.

    • Improved ARP debug logs.

  • CoAP:

    • Fixed CoAP observe age overflows.

    • Increased upper limit for CoAP retransmissions (CONFIG_COAP_MAX_RETRANSMIT).

    • Fixed CoAP observations in CoAP client library.

    • Added new CoAP client coap_client_cancel_requests() API which allows to cancel active observations.

    • Fixed CoAP ID generation for responses in CoAP Server sample.

  • Connection manager:

  • DHCPv4:

  • DHCPv6:

    • Fixed incorrect DHCPv6 events code base for net_mgmt events.

    • Added CONFIG_NET_DHCPV6_DUID_MAX_LEN which allows to configure maximum supported DUID length.

    • Added documentation page for DHCPv6.

  • DNS/mDNS/LLMNR:

    • Fixed an issue where the mDNS Responder did not work when the mDNS Resolver was also enabled. The mDNS Resolver and mDNS Responder can now be used simultaneously.

    • Reworked LLMNR and mDNS responders, and DNS resolver to use sockets and socket services API.

    • Added ANY query resource type.

    • Added support for mDNS to provide records in runtime.

    • Added support for caching DNS records.

    • Fixed error codes returned when socket creation fails, and when all results have been returned.

    • Fixed DNS retransmission timeout calculation.

  • gPTP/PTP:

    • Added support for IEEE 1588-2019 PTP.

    • Added support for SO_TIMESTAMPING socket option to get timestamping information in socket ancillary data.

    • Fixed race condition on timestamp callback.

    • Fixed clock master sync send SM if we are not the GM clock.

  • HTTP:

    • Added HTTP/2 server library and sample application with support for static, dynamic and Websocket resource types.

    • Added HTTP shell component.

    • Improved HTTP client error reporting.

    • Moved HTTP client library out of experimental.

    • Added POLLOUT monitoring when sending response in HTTP client.

  • IPSP:

    • Removed IPSP support. CONFIG_NET_L2_BT does not exist anymore.

  • IPv4:

    • Implemented IPv4 Address Conflict Detection, according to RFC 5227.

    • Added net_ipv4_is_private_addr() API function.

    • IPv4 netmask is now set individually for each address instead of being set for the whole interface.

    • Other minor fixes and improvements.

  • IPv6:

    • Implemented IPv6 Privacy Extensions according to RFC 8981.

    • Added net_ipv6_is_private_addr() API function.

    • Implemented reachability hint for IPv6. Upper layers can use net_if_nbr_reachability_hint() to report Neighbor reachability and avoid unnecessary Neighbor Discovery solicitations.

    • Added CONFIG_NET_IPV6_MTU allowing to set custom IPv6 MTU.

    • Added CONFIG_NET_MCAST_ROUTE_MAX_IFACES which allows to set multiple interfaces for multicast forwarding entries.

    • Added CONFIG_NET_MCAST_ROUTE_MLD_REPORTS which allows to report multicast routes in MLDv2 reports.

    • Fixed IPv6 hop limit handling for multicast packets.

    • Improved IPv6 Neighbor Discovery test coverage.

    • Fixed a bug, where Neighbor Advertisement packets reporting Duplicate address detection conflicts were dropped.

    • Other minor fixes and improvements.

  • LwM2M:

    • Added new API functions:

    • Added new offset parameter to lwm2m_engine_set_data_cb_t callback type. This affects post write and validate callbacks as well as some firmware callbacks.

    • Fixed block context not being reset upon receiving block number 0 in block transfer.

    • Fixed block size negotiation with the server in block transfer.

    • Added CONFIG_LWM2M_ENGINE_ALWAYS_REPORT_OBJ_VERSION which allows to force the client to always report object version.

    • Block transfer is now possible with resource w/o registered callback.

    • Fixed a bug, where an empty ACK sent from the registered callback would not be sent immediately.

    • Removed deprecated API functions and definitions.

    • Other minor fixes and improvements.

  • Misc:

    • Improved overall networking API Doxygen documentation.

    • Converted TFTP library to use zsock_* API.

    • Added SNTP sntp_simple_addr() API function to perform SNTP query when the server IP address is already known.

    • Added CONFIG_NET_TC_THREAD_PRIO_CUSTOM allowing to override default traffic class threads priority.

    • Fixed the IPv6 event handler initialization order in net config library.

    • Reworked telnet shell backend to use sockets and socket services API.

    • Fixed double dereference of IGMP packets.

    • Moved from native_posix to native_sim support in various tests and samples.

    • Added support for copying user data in network buffers.

    • Fixed cloning of zero sized network buffers.

    • Added net_buf APIs to handle 40 bit data format.

    • Added receive callback for dummy L2, applicable in certain use cases (for example, packet capture).

    • Implemented pseudo interface, a.k.a “any” interface for packet capture use case.

    • Added cooked mode capture support. This allows non-IP based network data capture.

    • Generate network events when starting or stopping packet capture.

    • Removed obsolete and unused tcp_first_msg net_pkt flag.

    • Added new Secure MQTT Sensor/Actuator sample.

    • Added support for partial L3 and L4 checksum offloading.

    • Updated Microsoft Azure IoT Hub MQTT with new CA certificates, the current on expires soon.

    • Added new driver for Native Simulator offloaded sockets.

    • Overhauled VLAN support to use Virtual network interfaces.

    • Added statistics collection for Virtual network interfaces.

    • Fixed system workqueue block in mgmt_event_work_handler() when CONFIG_NET_MGMT_EVENT_SYSTEM_WORKQUEUE is enabled.

  • MQTT:

    • Added ALPN support for MQTT TLS backend.

    • Added user data field in mqtt_client context structure.

    • Fixed a potential socket leak in MQTT Websockets transport.

  • Network Interface:

  • OpenThread

    • Removed deprecated openthread_set_state_changed_cb() function.

    • Added implementation of BLE TCAT advertisement API.

  • PPP

    • Removed deprecated gsm_modem driver and sample.

    • Optimized memory allocation in PPP driver.

    • Misc improvements in the Cellular modem sample

    • Added PPP low level packet capture support.

  • Shell:

    • Added net ipv4 gateway command to set IPv4 gateway address.

    • Added argument validation in network shell macros.

    • Fixed net_mgmt sockets information printout.

    • Reworked VLAN information printout.

    • Added option to set random MAC address with net iface set_mac command.

    • Added multicast join status when printing multicast address information.

  • Sockets:

    • Implemented new networking POSIX APIs:

    • Added support for tracing socket API calls.

    • TLS sockets are no longer experimental API.

    • Fixed the protocol field endianness for AF_PACKET type sockets.

    • Fixed getsockname() for TCP.

    • Improve sendmsg() support when using DTLS sockets.

    • Fixed net_socket_service_register() function stall in case socket services thread stopped.

    • Fixed potential socket services thread stoppage when deregistering service.

    • Removed support for asynchronous timeouts in socket services library.

    • Fixed potential busy looping when using zsock_accept() in case of file descriptors shortage.

  • Syslog:

    • Added new API functions:

    • Added structured logging support to syslog net backend.

    • Added TCP support to syslog net backend.

  • TCP:

    • Fixed possible deadlock when accepting new TCP connection.

    • Fixed ACK number verification during connection teardown.

    • Fixed a bug, where data bytes included in FIN packet were ignored.

    • Fixed a possible TCP context leak in case initial SYN packet transmission failed.

    • Deprecated CONFIG_NET_TCP_ACK_TIMEOUT as it was redundant with other configs.

    • Improved debug logs, so that they’re easier to follow under heavy load.

    • ISN generation now uses SHA-256 instead of MD5. Moreover, it now relies on PSA APIs instead of legacy Mbed TLS functions for hash computation.

    • Improved ACK reply logic in case no PSH flag is present to reduce redundant ACKs.

  • Websocket:

  • Wi-Fi:

    • Reduce memory usage of 5 GHz channel list.

    • Added channel validity check in AP mode.

    • Added support for BSSID configuration in connect call.

    • Wifi shell help text fixes. Option parsing fixes.

    • Support WPA auto personal security mode.

    • Collect unicast received/sent network packet statistics.

    • Added support for configuring RTS threshold. With this, users can set the RTS threshold value or disable the RTS mechanism.

    • Added support for configuring AP parameters. With this, users can set AP parameters at build and run time.

    • Added support to configure max_inactivity BSS parameter. Users can set this both build and runtime duration to control the maximum time duration after which AP may disconnect a STA due to inactivity from STA.

    • Added support to configure inactivity_poll BSS parameter. Users can set build only AP parameter to control whether AP may poll the STA before throwing away STA due to inactivity.

    • Added support to configure max_num_sta BSS parameter. Users can set this both build and run time parameter to control the maximum number of STA entries.

  • zperf:

    • Fixed IP_TOS and IPV6_TCLASS options handling in zperf.

    • Fixed throughput calculation during long zperf sessions.

    • Fixed error on TCP upload session end in case multicast IP address was used.

    • Fixed a bug, where IPv6 socket was bound with IPv4 address, giving error.

    • Added an option to specify the network interface to use during zperf sessions.

    • Added a new ZPERF_SESSION_PERIODIC_RESULT event for periodic updates during TCP upload sessions.

    • Fixed possible socket leak in case of errors during zperf session.

    • Improved performance in the default configuration for the zperf sample.

USB

  • New USB device stack:

    • Added support for HID devices

    • Introduced speed-specific configurations and made high-speed support compliant with the USB2.0 specification

    • Added notification support and initial BOS support

Devicetree

Kconfig

  • Added a substring Kconfig preprocessor function.

  • Added a dt_node_ph_prop_path Kconfig preprocessor function.

  • Added a dt_compat_any_has_prop Kconfig preprocessor function.

Libraries / Subsystems

  • Debug

    • symtab

    • By enabling CONFIG_SYMTAB, the symbol table will be generated with Zephyr link stage executable on supported architectures.

  • Demand Paging

    • NRU (Not Recently Used) eviction algorithm has updated its selection logic to avoid picking the same page to evict constantly. The updated login now searches for a new candidate linearly after the last evicted page.

    • Added LRU (Least Recently Used) eviction algorithm.

  • Formatted output

    • Fix warning when compiling cbprintf with ARCMWDT.

  • Management

    • hawkBit

      • The hawkBit subsystem has been reworked to use the settings subsystem to store the hawkBit configuration.

      • By enabling CONFIG_HAWKBIT_SET_SETTINGS_RUNTIME, the hawkBit settings can be configured at runtime. Use the hawkbit_set_config() function to set the hawkBit configuration. It can also be set via the hawkBit shell, by using the hawkbit set command.

      • When using the hawkBit autohandler and an update is installed, the device will now automatically reboot after the installation is complete.

      • By enabling CONFIG_HAWKBIT_CUSTOM_DEVICE_ID, a callback function can be registered to set the device ID. Use the hawkbit_set_device_identity_cb() function to register the callback.

      • By enabling CONFIG_HAWKBIT_CUSTOM_ATTRIBUTES, a callback function can be registered to set the device attributes that are sent to the hawkBit server. Use the hawkbit_set_custom_data_cb() function to register the callback.

    • MCUmgr

      • Instructions for the deprecated mcumgr go tool have been removed, a list of alternative, supported clients can be found on Tools/libraries.

      • Fixed an issue with the SMP structure not being packed which would cause a fault on devices that do not support unaligned memory accesses.

      • Added CONFIG_MCUMGR_TRANSPORT_BT_DYNAMIC_SVC_REGISTRATION that allows users to select whether MCUmgr BT service is statically registered at compile time or dynamically at run time.

      • In FS group, TinyCrypt has been replaced with PSA calls for SHA calculation.

  • Logging

    • By enabling CONFIG_LOG_BACKEND_NET_USE_DHCPV4_OPTION, the IP address of the syslog server for the networking backend is set by the DHCPv4 Log Server Option (7).

    • Use real time clock as timestamp on POSIX.

    • Add support for syslog (POSIX).

    • Add LOG_WRN_ONCE for logging warning message where only the first occurrence is logged.

    • Add log_thread_trigger() for triggering processing of the log messages.

    • Fix case when deferred logging not compiling when CONFIG_MULTITHREADING was disabled.

    • Fix case when logging strings could be stripped from the binary when dictionary based logging was mixed with non-dictionary.

    • Fix dictionary database not being generated in certain situations.

    • Fix dictionary logging parser not handling long long arguments correctly.

    • Fix support for CONFIG_LOG_MSG_APPEND_RO_STRING_LOC.

  • Modem modules

    • Added modem pipelink module which shares modem pipes globally, allowing device drivers to create and set up pipes for the application to use.

    • Simplified the modem pipe module’s synchronization mechanism to only protect the callback and user data. This matches the actual in-tree usage of the modem pipes.

    • Added modem_stats module which tracks the usage of buffers throughout the modem subsystem.

  • Power management

    • Devices can now declare which system power states cause power loss. This information can be used to set and release power state constraints when it is needed by the device. This feature is enabled with CONFIG_PM_POLICY_DEVICE_CONSTRAINTS. Use functions pm_policy_device_power_lock_get() and pm_policy_device_power_lock_put() to lock and unlock all power states that cause power loss in a device.

    • Added shell support for device power management.

    • Device power management was de-coupled from system power management. The new CONFIG_PM_DEVICE_SYSTEM_MANAGED option is used to enable whether devices must be suspended when the system sleeps.

    • Make it possible to disable system device power management individually per power state using zephyr,pm-device-disabled. This allows targets tuning which states should (and which should not) trigger device power management.

  • Crypto

    • TinyCrypt remains available but is now being phased out in favor of PSA Crypto for enhanced security and performance.

    • Mbed TLS was updated to 3.6.0. Release notes can be found at: https://github.com/Mbed-TLS/mbedtls/releases/tag/v3.6.0

    • When any PSA crypto provider is available in the system (CONFIG_MBEDTLS_PSA_CRYPTO_CLIENT is enabled), desired PSA features must now be explicitly selected through CONFIG_PSA_WANT_xxx symbols.

    • Choice symbols CONFIG_MBEDTLS_PSA_CRYPTO_LEGACY_RNG and CONFIG_MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG were added in order to allow the user to specify how Mbed TLS PSA crypto core should generate random numbers. The former option, which is the default, relies on legacy entropy and CTR_DRBG/HMAC_DRBG modules, while the latter relies on CSPRNG drivers.

    • CONFIG_MBEDTLS_PSA_P256M_DRIVER_ENABLED enables support for the Mbed TLS’s p256-m driver PSA crypto library. This is a Cortex-M SW optimized implementation of secp256r1 curve.

  • CMSIS-NN

  • FPGA

    • Improve handling of drivers missing reset, load, get_status, and get_info methods.

    • Add support for Agilex and Agilex 5.

  • Random

  • SD

    • SDMMC and SDIO frequency and timing selection logic have been reworked, to resolve an issue where a timing mode would not be selected if the SDHC device in use did not report support for the maximum frequency possible in that mode. Now, if the host controller and card both report support for a given timing mode but not the highest frequency that mode supports, the timing mode will be selected and configured at the reduced frequency (GitHub #72705).

  • State Machine Framework

    • The SMF_CREATE_STATE macro now always takes 5 arguments.

    • Transition sources that are parents of the state that was run now choose the correct Least Common Ancestor for executing Exit and Entry Actions.

    • Passing NULL to smf_set_state() is now not allowed.

  • Storage

    • FAT FS: It is now possible to expose file system formatting functionality for FAT without also enabling automatic formatting on mount failure by setting the CONFIG_FS_FATFS_MKFS Kconfig option. This option is enabled by default if CONFIG_FILE_SYSTEM_MKFS is set.

    • FS: It is now possible to truncate a file while opening using fs_open() and by passing FS_O_TRUNC flag.

    • Flash Map: TinyCrypt has been replaced with PSA Crypto in Flash Area integrity check.

    • Flash Map: flash_area_flatten() has been added to be used where an erase operation has been previously used for removing/scrambling data rather than to prepare a device for a random data write.

    • Flash Map: FIXED_PARTITION_NODE_OFFSET, FIXED_PARTITION_NODE_SIZE and FIXED_PARTITION_NODE_DEVICE have been added to allow obtaining fixed partition information from a devicetree node rather than a label.

    • Added CONFIG_NVS_DATA_CRC, to add CRC protection for data. Note that enabling this option makes NVS incompatible with existing storage that have not been previously using CRC on data.

    • Fixed NVS issue where nvs_calc_free_space() would return larger size than available, because space for reserved ate was not subtracted.

    • Fixed ext2 incorrectly calculating free space when attempting to format partition.

    • Fixed FAT driver leaving disk in initialized state after unmount.

  • Task Watchdog

    • Added shell (mainly for testing purposes during development).

  • POSIX API

  • LoRa/LoRaWAN

    • Added the Fragmented Data Block Transport service, which can be enabled via CONFIG_LORAWAN_FRAG_TRANSPORT. In addition to the default fragment decoder implementation from Semtech, an in-tree implementation with reduced memory footprint is available.

    • Added a sample to demonstrate LoRaWAN firmware-upgrade over the air (FUOTA).

  • ZBus

    • Improved the VDED process by optimizing the channel reference copying for the clones delivered during the message subscriber delivery notification.

    • Improved the initialization phase by statically initiating the semaphores and runtime observer list. That decreased the duration of the zbus initialization.

    • Added a way of isolating a channel message subscribers pool. Some channels can now share an isolated pool to avoid delivery failures and shorten communication latency. It is only necessary to enable the CONFIG_ZBUS_MSG_SUBSCRIBER_NET_BUF_POOL_ISOLATION and use the function zbus_chan_set_msg_sub_pool() to change the msg pool used by the channel. Channels can share the same message pool.

HALs

  • Nordic

    • Updated nrfx to version 3.5.0.

    • Added nRF Services (nrfs) library.

  • STM32

    • Updated STM32F0 to cube version V1.11.5.

    • Updated STM32F3 to cube version V1.11.5.

    • Updated STM32F4 to cube version V1.28.0.

    • Updated STM32F7 to cube version V1.17.2.

    • Updated STM32G0 to cube version V1.6.2.

    • Updated STM32G4 to cube version V1.5.2.

    • Updated STM32H5 to cube version V1.2.0.

    • Updated STM32H7 to cube version V1.11.2.

    • Updated STM32L5 to cube version V1.5.1.

    • Updated STM32U5 to cube version V1.5.0.

    • Updated STM32WB to cube version V1.19.1.

    • Updated STM32WBA to cube version V1.3.1.

    • Added STM32H7R/S with cube version V1.0.0.

  • ADI

    • Introduced the hal_adi module, which is a subset of the Maxim Software Development Kit (MSDK) that contains device header files and bare metal peripheral drivers (GitHub #72391).

  • Espressif

    • Updated HAL to version v5.1, which has new SoCs low-level files.

MCUboot

  • Fixed memory leak in bootutil HKDF implementation

  • Fixed enforcing TLV entries to be protected

  • Fixed disabling instruction/data caches

  • Fixed estimated image overhead size calculation

  • Fixed issue with swap-move algorithm failing to validate multiple-images

  • Fixed align script error in imgtool

  • Fixed img verify for hex file format in imgtool

  • Fixed issue with reading the flash image reset vector

  • Fixed too-early check_config.h include in mbedtls

  • Refactored image dependency functions to reduce code size

  • Added MCUboot support for ESP32-C6

  • Added optional MCUboot boot banner

  • Added TLV querying for protected region

  • Added using builtin keys for verification in bootutil

  • Added builtin ECDSA key support for PSA Crypto backend

  • Added OVERWRITE_ONLY_KEEP_BACKUP option for secondary images

  • Added defines for SOC_FLASH_0_ID and SPI_FLASH_0_ID

  • Fixed ASN.1 support for mbedtls version >= 3.1

  • Fixed bootutil signed/unsigned comparison in boot_read_enc_key

  • Updated imgtool version.py to take command line arguments

  • Added imgtool improvements to dumpinfo

  • Fixed various imgtool dumpinfo issues

  • Fixed imgtool verify command for edcsa-p384 signed images

  • Added support for NXP MCXN947

  • The MCUboot version in this release is version 2.1.0+0-dev.

OSDP

  • Fixed issue in CP secure channel handshake where R-MAC can be reverted to an old one by a rogue PD sending an out-of-order secure channel response resulting in a replay attack.

Trusted Firmware-M

LVGL

LVGL was updated to 8.4.0. Release notes can be found at: https://docs.lvgl.io/8.4/CHANGELOG.html#v8-4-0-19-march-2024

Additionally, the following changes in Zephyr were done:

  • Added support to place memory pool buffers in .lvgl_heap section by enabling CONFIG_LV_Z_MEMORY_POOL_CUSTOM_SECTION

  • Removed kscan-based pointer input wrapper code.

  • Corrected encoder button behavior to emit LV_KEY_ENTER events correctly.

  • Improved handling for invert-x,y and swap-xy configurations.

  • Added LV_MEM_CUSTOM_FREE call on file closure.

  • Added missing Kconfig stubs for DMA2D symbols.

  • Integrated support for LVGL rounder callback function.

Tests and Samples

  • Added snippet for easily enabling UART over Bluetooth LE by passing -S nus-console during west build. This snippet sets the CONFIG_BT_ZEPHYR_NUS_AUTO_START_BLUETOOTH which allows non-Bluetooth samples that use the UART APIs to run without modifications (e.g.: Console and Logging examples).

  • Removed GSM_PPP specific configuration overlays from samples net/cloud/tagoio and net/mgmt/updatehub. The GSM_PPP device driver has been deprecated and removed. The new MODEM_CELLULAR device driver which replaces it uses the native networking stack and PM subsystem, which like ethernet, requires no application specific actions to set up networking.

  • Removed net/gsm_modem sample as the GSM_PPP device driver it depended on has been deprecated and removed. The sample has been replaced by the sample net/cellular_modem based on the MODEM_CELLULAR device driver.

  • BT LE Coded PHY is now runtime tested in CI with the nrf5x bsim targets.

  • External ethernet network interfaces have been disabled in the tests/net tests, since these tests are meant to use simulated network interfaces.