Zephyr 3.7.0 (Working Draft)

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

Major enhancements with this release include:

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

  • Zephyr now requires Python 3.10 or higher

  • 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.

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.

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.

Deprecated in this release

  • POSIX API

  • 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

  • ARM

  • ARM64

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

  • 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

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.

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. Typical device acting as Audio Gateway is 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.

  • HCI Driver

    • Added support for Ambiq Apollo3 Blue series.

Boards & SoC Support

  • Added support for these SoC series:

    • Added support for Ambiq Apollo3 Blue and Apollo3 Blue Plus SoC series.

  • Made these changes in other SoC series:

    • ITE: Rename the Kconfig symbol for all ITE SoC variants.

  • Added support for these ARM boards:

    • Added support for Ambiq Apollo3 boards: apollo3_evb, apollo3p_evb.

    • Added support for RaspberryPi5 board: rpi5.

    • Added support for Seeed Studio XIAO RP2040 board: xiao_rp2040.

  • Added support for these Xtensa boards:

  • Made these changes for ARM boards:

  • Made these changes for RISC-V boards:

  • Made these changes for native/POSIX boards:

    • Introduced the simulated nrf54l15bsim target.

    • LLVM fuzzing support has been refactored while adding support for it in native_sim.

  • Added support for these following shields:

Build system and Infrastructure

  • CI-enabled blackbox tests were added in order to verify correctness of the vast majority of 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.

  • Board/SoC flashing configuration settings have been added.

  • 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.

Drivers and Sensors

  • ADC

  • Auxiliary Display

  • Audio

  • 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

  • CAN

    • Deprecated the can_calc_prescaler() API function, as it allows for bitrate errors. Bitrate errors between nodes on the same network leads to them drifting apart after the start-of-frame (SOF) synchronization has taken place, leading to bus errors.

    • 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_min_bitrate() and can_get_max_bitrate() API functions.

    • 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 a new CAN controller API function can_get_min_bitrate() for getting the minimum supported bitrate of a CAN controller/transceiver combination.

    • 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.

  • 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

  • Counter

    • Added support for Ambiq Apollo3 series.

  • Crypto

  • 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.

  • Display

  • DMA

  • Entropy

  • eSPI

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

  • Ethernet

    • Deperecated eth_mcux driver in favor of the reworked nxp_enet driver.

    • Driver nxp_enet is no longer experimental.

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

  • Flash

    • Added support for Ambiq Apollo3 series.

  • GNSS

  • GPIO

    • Added support for Ambiq Apollo3 series.

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

  • I2C

    • Added support for Ambiq Apollo3 series.

  • I2S

  • I3C

  • IEEE 802.15.4

  • Input

  • LED Strip

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

  • LoRa

    • Added driver for Reyax LoRa module

  • MDIO

  • 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.

  • PCIE

  • MEMC

  • MIPI-DBI

  • Pin control

  • PWM

  • Regulators

  • Retained memory

  • RTC

    • Added Raspberry Pi Pico RTC driver.

  • SMBUS:

  • SDHC

  • Sensor

    • Added TMP114 driver

    • Added DS18S20 1-wire temperature 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).

  • SPI

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

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

  • USB

  • W1

  • Watchdog

  • Wi-Fi

    • 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 numuber of STA entries.

Networking

USB

Devicetree

Libraries / Subsystems

  • Debug

    • symtab

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

  • 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.

  • Logging

  • Modem modules

  • Picolibc

  • Power management

  • Crypto

  • Random

  • Retention

  • 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.

  • POSIX API

  • LoRa/LoRaWAN

  • ZBus

HALs

  • STM32

MCUboot

Trusted Firmware-M

zcbor

LVGL

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.