This is the documentation for the latest (main) development branch of Zephyr. If you are looking for the documentation of previous releases, use the drop-down menu on the left and select the desired version.

Zephyr 3.2.0

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

Major enhancements with this release include:

The following sections provide detailed lists of changes by component.

API Changes

Changes in this release

  • Zephyr now requires Python 3.8 or higher

  • Changed spi_cs_control to remove anonymous struct. This causes possible breakage for static initialization of the struct. Updated SPI_CS_CONTROL_PTR_DT to reflect this change.

  • The CONFIG_LEGACY_INCLUDE_PATH option has been disabled by default, all upstream code and modules have been converted to use <zephyr/...> header paths. The option is still available to facilitate the migration of external applications, but will be removed with the 3.4 release. The scripts/utils/migrate_includes.py script is provided to automate the migration.

  • include/zephyr/zephyr.h no longer defines __ZEPHYR__. This definition can be used by third-party code to compile code conditional to Zephyr. The definition is already injected by the Zephyr build system. Therefore, any third-party code integrated using the Zephyr build system will require no changes. External build systems will need to inject the definition by themselves, if they did not already.

  • include/zephyr/zephyr.h has been deprecated in favor of include/zephyr/kernel.h, since it only included that header. No changes are required by applications other than replacing #include <zephyr/zephyr.h> with #include <zephyr/kernel.h>.

  • Bluetooth: Applications where CONFIG_BT_EATT is enabled must set the chan_opt field on the GATT parameter structs. To keep the old behavior use BT_ATT_CHAN_OPT_NONE.

  • CAN

    • The Zephyr SocketCAN definitions have been moved from include/zephyr/drivers/can.h to include/zephyr/net/socketcan.h, the SocketCAN struct can_frame has been renamed to socketcan_frame, and the SocketCAN struct can_filter has been renamed to socketcan_filter. The SocketCAN utility functions are now available in include/zephyr/net/socketcan_utils.h.

    • The CAN controller struct zcan_frame has been renamed to can_frame, and struct zcan_filter has been renamed to can_filter.

    • The can_state enumerations have been renamed to contain the word STATE in order to make their context more clear:

    • The error code for can_send() when the CAN controller is in bus off state has been changed from -ENETDOWN to -ENETUNREACH. A return value of -ENETDOWN now indicates that the CAN controller is in CAN_STATE_STOPPED.

    • The list of valid return values for the CAN timing calculation functions have been expanded to allow distinguishing between an out of range bitrate/sample point, an unsupported bitrate, and a resulting sample point outside the guard limit.

  • Memory Management Drivers

    • Added sys_mm_drv_update_page_flags() and sys_mm_drv_update_region_flags() to update flags associated with memory pages and regions.

Removed APIs in this release

  • The following functions, macros, and structures related to the deprecated kernel work queue API have been removed:

    • k_work_pending()

    • k_work_q_start()

    • k_delayed_work

    • k_delayed_work_init()

    • k_delayed_work_submit_to_queue()

    • k_delayed_work_submit()

    • k_delayed_work_pending()

    • k_delayed_work_cancel()

    • k_delayed_work_remaining_get()

    • k_delayed_work_expires_ticks()

    • k_delayed_work_remaining_ticks()

    • K_DELAYED_WORK_DEFINE

  • Removed support for enabling passthrough mode on MPU9150 to AK8975 sensor.

  • Removed deprecated SPI spi_cs_control fields for GPIO management that have been replaced with gpio_dt_spec.

  • Removed support for configuring the CAN-FD maximum DLC value via Kconfig CONFIG_CANFD_MAX_DLC.

  • Removed deprecated civetweb module and the associated support code and samples.

Deprecated in this release

  • DT_SPI_DEV_CS_GPIOS_LABEL and DT_INST_SPI_DEV_CS_GPIOS_LABEL are deprecated in favor of utilizing DT_SPI_DEV_CS_GPIOS_CTLR and variants.

  • DT_GPIO_LABEL, DT_INST_GPIO_LABEL, DT_GPIO_LABEL_BY_IDX, and DT_INST_GPIO_LABEL_BY_IDX, are deprecated in favor of utilizing DT_GPIO_CTLR and variants.

  • DT_LABEL, and DT_INST_LABEL, are deprecated in favor of utilizing DT_PROP and variants.

  • DT_BUS_LABEL, and DT_INST_BUS_LABEL, are deprecated in favor of utilizing DT_BUS and variants.

  • STM32 LPTIM domain clock should now be configured using devicetree. Related Kconfig CONFIG_STM32_LPTIM_CLOCK option is now deprecated.

  • label property from devicetree as a base property. The property is still valid for specific bindings to specify like gpio-leds and fixed-partitions.

  • Bluetooth mesh Configuration Client API prefixed with bt_mesh_cfg_ is deprecated in favor of a new API with prefix bt_mesh_cfg_cli_.

  • Pinmux API is now officially deprecated in favor of the pin control API. Its removal is scheduled for the 3.4 release. Refer to Pin Control for more details on pin control.

  • Flash Map API macros FLASH_MAP_, which have been using DTS node label property to reference partitions, have been deprecated and replaced with FIXED_PARTITION_ which use DTS node label instead. Replacement list:

    Deprecated, takes label property

    Replacement, takes DTS node label

    FLASH_AREA_ID

    FIXED_PARTITION_ID

    FLASH_AREA_OFFSET

    FIXED_PARTITION_OFFSET

    FLASH_AREA_SIZE

    FIXED_PARTITION_SIZE

    FLASH_AREA_LABEL_EXISTS

    FIXED_PARTITION_EXISTS

    FLASH_AREA_DEVICE

    FIXED_PARTITION_DEVICE

    FLASH_AREA_LABEL_STR is deprecated with no replacement as its sole purpose was to obtain the DTS node property label.

Stable API changes in this release

New APIs in this release

  • CAN

  • I3C

    • Added a set of new API for I3C controllers.

  • W1

    • Introduced the W1 api, used to interact with 1-Wire masters.

Kernel

  • Source files using multiple SYS_INIT macros with the same initialisation function must now use SYS_INIT_NAMED with unique names per instance.

Architectures

  • ARC

    • Added support of non-multithreading mode for all UP ARC targets.

    • Added extra compile-time checks of CONFIG_ISR_STACK_SIZE and CONFIG_ARC_EXCEPTION_STACK_SIZE value.

    • Added support of generation symbol file for ARC MWDT toolchain variant.

    • Added ARC MWDT toolchain version check.

    • Added support for GCC mcpu option tuning for ARC targets on SoC level.

    • Switched ARCv3 64bit targets for usage of new linker output format value.

    • Added ARCv3 64bit accumulator reg save / restore, cleanup it for ARCv3 32bit targets.

    • Fixed SMP race in ASM ARC interrupt handling code.

  • ARM

    • Improved HardFault handling on Cortex-M.

    • Enabled automatic placement of the IRQ vector table.

    • Enabled S2RAM for Cortex-M, hooking up the provided API functions.

    • Added icache and dcache maintenance functions, and switched to the new Kconfig symbols (CONFIG_CPU_HAS_DCACHE and CONFIG_CPU_HAS_ICACHE).

    • Added data/instr. sync barriers after writing to SCTLR to disable MPU.

    • Use spsr_cxsf instead of unpredictable spsr_hyp on Cortex-R52.

    • Removes -Wstringop-overread warning with GCC 12.

    • Fixed handling of system off failure.

    • Fixed issue with incorrect ssf under bad syscall.

    • Fixed region check issue with mmu.

  • ARM64

    • arch_mem_map() now supports K_MEM_PERM_USER.

    • Added CONFIG_WAIT_AT_RESET_VECTOR to spin at reset vector allowing a debugger to be attached.

    • Implemented erratum 822227 “Using unsupported 16K translation granules might cause Cortex-A57 to incorrectly trigger a domain fault”.

    • Enabled single-threaded support for some platforms.

    • IRQ stack is now initialized when CONFIG_INIT_STACKS is set.

    • Fixed issue when cache API are used from userspace.

    • Fixed issue about the way IPI are delivered.

    • TF-A (TrustedFirmware-A) is now shipped as module.

  • RISC-V

    • Introduced support for RV32E.

    • Reduced callee-saved registers for RV32E.

    • Introduced Zicsr, Zifencei and BitManip as separate extensions.

    • Introduced CONFIG_RISCV_ALWAYS_SWITCH_THROUGH_ECALL for platforms that require every mret to be balanced by ecall.

    • IRQ vector table is now used for vectored mode.

    • Disabled CONFIG_IRQ_VECTOR_TABLE_JUMP_BY_CODE for CLIC.

    • STRINGIFY macro is now used for CSR helpers.

    • CONFIG_CODE_DATA_RELOCATION is now supported.

    • PLIC and CLIC are now decoupled.

    • jedec,spi-nor is no longer required to be okay by the RISC-V arch linker script.

    • Removed usage of SOC_ERET.

    • Removed usage of ulong_t.

    • Added new TLS-based arch_is_user_context() implementation.

    • Fixed PMP for builds with SMP enabled.

    • Fixed the per-thread m-mode/u-mode entry array.

    • semihost_exec() function is now aligned at 16-byte boundary.

  • Xtensa

    • Macros RSR and WSR have been renamed to XTENSA_RSR and XTENSA_WSR to give them proper namespace.

    • Fixed a rounding error in timing function when converting from cycles to nanoseconds.

    • Fixed the calculation of average “cycles to nanoseconds” to actually return nanoseconds instead of cycles.

Bluetooth

  • Audio

    • Implemented central security establishment when required.

    • Added additional security level options to the connection call.

    • Switched the unicast client and server to bidirectional CIS if available.

    • Added a new RSI advertising callback for CSIS.

    • Added multiple improvements to context handling, including public functions to get contexts.

    • Added ordered access procedure for the CSIS client, as well as storing active members by rank.

    • Added support for Write Preset Name in HAS.

    • Added support for using PACS for the broadcast sink role.

    • Cleaned up the MICP implementation, including renaming several structures and functions.

    • Implemented the CAP Acceptor role.

    • Added ASCS Metadata verification support.

    • Started exposing broadcast sink advertising data to the application.

    • Added support for unicast server start, reconfigure, release, disable and metadata.

    • Added support for multi-CIS.

    • Implemented HAS client support for preset switching.

    • Added support for setting vendor-specific non-HCI data paths for audio streams.

  • Direction Finding

    • Added support for selectable IQ samples conversion to 8-bit.

    • Added support for VS IQ sample reports in int16_t format.

  • Host

    • Added support for LE Secure Connections permission checking.

    • Added support for Multiple Variable Length Read procedure without EATT.

    • Added a new callback rpa_expired() in the struct bt_le_ext_adv_cb to enable synchronization of the advertising payload updates with the Resolvable Private Address (RPA) rotations when the CONFIG_BT_PRIVACY is enabled.

    • Added a new bt_le_set_rpa_timeout() API call to dynamically change the Resolvable Private Address (RPA) timeout when the CONFIG_BT_RPA_TIMEOUT_DYNAMIC is enabled.

    • Added bt_conn_auth_cb_overlay() to overlay authentication callbacks for a Bluetooth LE connection.

    • Removed CONFIG_BT_HCI_ECC_STACK_SIZE. A new Bluetooth long workqueue (CONFIG_BT_LONG_WQ) is used for processing ECC commands instead of the former dedicated thread.

    • bt_conn_get_security() and bt_conn_enc_key_size() now take a const struct bt_conn* argument.

    • The handling of GATT multiple notifications has been rewritten, and is now only to be used as a low-level API.

    • Added support for GATT CCCs in arbitrary locations as a client.

    • Extended the bt_conn_info structure with security information.

    • Added a new CONFIG_BT_PRIVACY_RANDOMIZE_IR that prevents the Host from using Controller-provided identity roots.

    • Added support for GATT over EATT.

    • Implemented the Immediate Alert Client.

  • Mesh

    • Added support for selectable RPL backends.

    • Changed the way segmented messages are sent, avoiding bulk transmission.

    • Added an async config client API.

    • Added model publish support to the Health Client.

    • Moved relayed messages to a separate buffer pool.

    • Reduced delay of sending segment acknowledge message. Set CONFIG_BT_MESH_SEG_ACK_PER_SEGMENT_TIMEOUT to 100 to get the previous timing.

    • Restructured shell commands.

  • Controller

    • Made the new LLCP implementation the default one. Enable CONFIG_BT_LL_SW_LLCP_LEGACY to revert back to the legacy implementation. CONFIG_BT_LL_SW_LLCP_LEGACY is marked deprecated in favor of the new CONFIG_BT_LL_SW_LLCP, which is the default now.

    • Marked Extended Advertising as stable, no longer experimental.

    • Added deinit() infrastructure in order to properly support disabling Bluetooth support, including the controller.

    • Implemented the Peripheral CIS Create procedure.

    • Implemented the CIS Terminate procedure.

    • Added support for Periodic Advertising ADI.

    • Implemented support for Extended Scan Response Data fragment operations.

    • Enable back-to-back PDU chaining for AD data.

    • Added a new CONFIG_BT_CTLR_SYNC_PERIODIC_SKIP_ON_SCAN_AUX for allowing periodic sync event skipping.

    • Added a new CONFIG_BT_CTLR_SCAN_AUX_SYNC_RESERVE_MIN for minimal time reservation.

    • Implemented ISO Test Mode HCI commands.

    • Added support for multiple BIS sync selection within a BIG.

    • Implement flushing pending ISO TX PDUs when a BIG event is terminated.

    • Added a new CONFIG_BT_CTLR_ADV_DATA_CHAIN to enable experimental Advertising Data chaining support.

  • HCI Driver

    • Added a new Telink B91 HCI driver.

Boards & SoC Support

  • Added support for these SoC series:

    • Atmel SAML21, SAMR34, SAMR35

    • GigaDevice GD32E50X

    • GigaDevice GD32F470

    • NXP i.MX8MN, LPC55S36, LPC51U68

    • renesas_smartbond da1469x SoC series

  • Made these changes in other SoC series:

    • gigadevice: Enable SEGGER RTT

    • Raspberry Pi Pico: Added ADC support

    • Raspberry Pi Pico: Added PWM support

    • Raspberry Pi Pico: Added SPI support

    • Raspberry Pi Pico: Added watchdog support

  • Changes for ARC boards:

    • Added support for qemu_arc_hs5x board (ARCv3, 32bit, UP, HS5x)

    • Simplified multi-runner setup for SMP nSIM ARC platforms

    • Fixed mdb execution folder for mdb-based west runners (mdb-nsim and mdb-hw)

  • Added support for these ARM boards:

    • Arduino MKR Zero

    • Atmel atsaml21_xpro

    • Atmel atsamr34_xpro

    • Blues Wireless Swan

    • Digilent Zybo

    • EBYTE E73-TBB

    • GigaDevice GD32E507V-START

    • GigaDevice GD32E507Z-EVAL

    • GigaDevice GD32F407V-START

    • GigaDevice GD32F450V-START

    • GigaDevice GD32F450Z-EVAL

    • GigaDevice GD32F470I-EVAL

    • NXP lpcxpresso51u68, RT1060 EVKB

    • NXP lpcxpresso55s36

    • Olimex LoRa STM32WL DevKit

    • PAN1770 Evaluation Board

    • PAN1780 Evaluation Board

    • PAN1781 Evaluation Board

    • PAN1782 Evaluation Board

    • ST STM32F7508-DK Discovery Kit

    • TDK RoboKit 1

    • WeAct Studio Black Pill V1.2

    • WeAct Studio Black Pill V3.0

    • XIAO BLE

    • da1469x_dk_pro

  • Added support for these ARM64 boards:

    • i.MX8M Nano LPDDR4 EVK board series

  • Added support for these RISC-V boards:

    • ICE-V Wireless

    • RISCV32E Emulation (QEMU)

  • Added support for these Xtensa boards:

    • ESP32-NET

    • intel_adsp_ace15_mtpm

  • Removed support for these Xtensa boards:

    • Intel S1000

  • Made these changes in other boards:

    • sam_e70_xplained: Uses EEPROM devicetree bindings for Ethernet MAC

    • sam_v71_xult: Uses EEPROM devicetree bindings for Ethernet MAC

    • rpi_pico: Added west runner configurations for Picoprobe, Jlink and Blackmagicprobe

  • Added support for these following shields:

    • ARCELI W5500 ETH

    • MAX7219 LED display driver shield

    • Panasonic Grid-EYE (AMG88xx)

Build system and infrastructure

  • Introduced sysbuild, a new higher-level build system layer that enables combining multiple build systems together. It can be used to generate multiple images from a single build system invocation while maintaining a link between those different applications/images via a shared Kconfig layer.

  • Introduced support for binary blobs in west, via a new west blobs command that allows users to list, fetch and delete binary blobs from their filesystem. Vendors can thus now integrate binary blobs, be it images or libraries, with upstream Zephyr.

  • Removed deprecated GCCARMEMB_TOOLCHAIN_PATH setting.

Drivers and Sensors

  • ADC

    • STM32: Now supports Vbat monitoring channel and STM32U5 series.

    • Added driver for GigaDevice GD32 SoCs.

    • Raspberry Pi Pico: Added ADC support for the Pico series.

    • Added adc_dt_spec related helpers for sequence initialization, setting up channels, and converting raw values to millivolts.

    • Fixed ADC_DT_SPEC_GET and related macros to properly handle channel identifiers >= 10.

  • CAN

    • A driver for bridging from Native POSIX execution (native_posix) to Linux SocketCAN has been added.

    • A driver for the Espressif ESP32 TWAI has been added. See the espressif,esp32-twai devicetree binding for more information.

    • The STM32 CAN-FD CAN driver clock configuration has been moved from Kconfig to devicetree. See the st,stm32-fdcan devicetree binding for more information.

    • The filter handling of STM32 bxCAN driver has been simplified and made more reliable.

    • The STM32 bxCAN driver now supports dual instances.

    • The CAN loopback driver now supports CAN-FD.

    • The CAN shell module has been rewritten to properly support the additions and changes to the CAN controller API.

    • The Zephyr network CAN bus driver, which provides raw L2 access to the CAN bus via a CAN controller driver, has been moved to drivers/net/canbus.c and can now be enabled using CONFIG_NET_CANBUS.

    • Added CAN support for NXP LPC55S36.

  • Clock control

    • STM32: PLL_P, PLL_Q, PLL_R outputs can now be used as domain clock.

    • Added driver for GigaDevice GD32 SoCs (peripheral clocks configuration only).

    • Documented behavior when clock is not on.

  • Counter

    • Added counter_get_value_64() function.

    • STM32: RTC : Now supports STM32U5 and STM32F1 series.

    • STM32: Timer : Now supports STM32L4 series.

    • Added counter support using CTimer for NXP MIMXRT595.

    • ESP32: Added support to Pulse Counter Mode (PCNT) and RTC.

  • Crypto

    • Added Intel ADSP sha driver.

    • stm32: Check if clock device is ready before accessing clock control devices.

    • ataes132a: Convert to devicetree.

  • DFU

    • Fixed fetch of the flash write block size from incorrect device by flash_img.

    • Fixed possible build failure in the image manager for mcuboot on redefinitions of BOOT_MAX_ALIGN and BOOT_MAGIC_SZ.

  • Display

    • Renamed EPD controller driver GD7965 to UC81xx.

    • Improved support for different controllers in ssd16xx and uc81xx drivers.

    • Added basic read support for ssd16xx compatible EPD controllers.

    • Revised intel_multibootfb driver.

    • Added MAX7219 display controller driver.

  • Disk

    • Added support for DMA transfers when using STM32 SD host controller.

    • Added support for SD host controller present on STM32L5X family.

  • DMA

    • STM32: Now supports stm32u5 series.

    • cAVS drivers renamed with the broader Intel ADSP naming.

    • Kconfig depends on improvements with device tree statuses.

    • Added driver for GigaDevice GD32 SoCs.

    • Added DMA support for NXP MIMXRT595.

  • EEPROM

    • Added Microchip XEC (MEC172x) on-chip EEPROM driver. See the microchip,xec-eeprom devicetree binding for more information.

  • Entropy

    • Update drivers to use devicetree Kconfig symbol.

    • gecko: Add driver using Secure Element module of EFR3.

    • Added entropy driver for MCUX CAAM.

    • stm32: Check if clock device is ready before accessing.

  • ESPI

    • eSPI emulator initialization improvements.

    • Nuvoton: Enabled platform specific Virtual Wire GPIO.

    • Microchip: Added XEC (MEC152x) overcurrent platform-specific virtual wires.

    • Nuvoton: Added driver flash channel operations support.

  • Ethernet

    • Atmel gmac: Add EEPROM devicetree bindings for MAC address.

    • Performance improvements on the NXP MCUX Ethernet Driver.

  • Flash

    • Atmel eefc: Fix support for Cortex-M4 variants.

    • Added flash driver for Renesas Smartbond platform

    • Added support for STM32H7 and STM32U5 in the STM32 OSPI driver.

    • Added DMA transfer support in the STM32 OSPI driver.

    • Added driver for GigaDevice GD32 SoCs

    • Added Flash support for NXP LPCXpresso55S36.

    • Added Flash support for NXP MIMXRT595 EVK.

    • Added on-chip flash driver for TI CC13xx/CC26xx.

    • Fixed flash to flash write for Telink B91.

    • Fixed DMA priority configuration in the stm32 QSPI driver.

    • Drivers are enabled by default based on their devicetree hardware declarations.

    • Fixed write from unaligned source for STM32G0x.

    • Added Flash support for Renesas Smartbond platform.

    • Added Flash support for Cadence QSPI NOR FLASH.

    • Fixed usage fault on nRF driver (along with BLE) due to possible incorrect handling of the ticker stop operation.

  • GPIO

    • Added GPIO driver for Renesas Smartbond platform.

  • I2C

    • Terminology updated to latest i2c specification removing master/slave terminology and replacing with controller/target terminology.

    • Asynchronous APIs added for requesting i2c transactions without waiting for the completion of them.

    • Added NXP LPI2C driver asynchronous i2c implementation with sample showing usage with a FRDM-K64F board.

    • STM32: support for second target address was added.

    • Kconfig depends on improvements with device tree statuses.

    • Improved ITE I2C support with FIFO and command queue mode.

    • Improve gd32 driver stability (remove repeated START, use STOP + START conditions instead).

    • Fixed gd32 driver incorrect Fast-mode config.

    • Add bus recovery support to the NXP MCUX LPI2C driver.

    • Enable I2C support on NXP MIMXRT595 EVK.

  • I2S

    • Removed the Intel S1000 I2S driver.

  • I3C

    • Added a driver to support the NXP MCUX I3C hardware acting as the primary controller on the bus (tested using RT685).

  • IEEE 802.15.4

    • All IEEE 802.15.4 drivers have been converted to Devicetree-based drivers.

    • Atmel AT86RF2xx: Add Power Table on devicetree.

    • Atmel AT86RF2xx: Add support to RF212/212B Sub-Giga devices.

  • Interrupt Controller

    • Added support for ACE V1X.

    • Fixed an addressing issue on GICv3 controllers.

    • Removed support for intel_s1000_crb.

  • IPM

    • Kconfig is split into smaller, vendor oriented files.

    • Support for Intel S1000 in cAVS IDC driver has been removed as the board intel_s1000_crb has been removed.

  • KSCAN

    • Enabled the touch panel on the NXP MIMXRT1170 EVK.

  • LED

    • Added support for using multiple instances of LP5562 LED module.

    • Devicetree usage cleanups.

    • i2c_dt_spec migration.

    • Updated LED PWM support for ESP32 boards.

  • LoRa

    • Added support for setting the sync-word and iq-inverted modes in LoRa modems.

    • Removed REQUIRES_FULL_LIBC library dependency from LoRa drivers. This results in considerable flash memory savings.

    • Devicetree usage cleanups.

  • MEMC

    • Added support for Atmel SAM SMC/EBI.

  • PCIE

    • Added a dump subcommand to the pcie shell command to print out the first 16 configuration space registers.

    • Added a ls subcommand to the pcie shell command to list devices.

  • PECI

    • Added PECI driver for Nuvoton NPCX family.

    • Devicetree binding for ITE it8xxx2 PECI driver has changed from ite,peci-it8xxx2 to ite,it8xxx2-peci so that this aligns with other ITE devices.

  • Pin control

    • Added driver for Infineon XMC4XXX.

    • Added driver for Renesas Smartbond platform.

    • Added driver for Xilinx Zynq-7000.

    • Added support for PSL pads in NPCX driver.

    • MEC15XX driver now supports both MEC15XX and MEC17XX.

    • nRF driver now supports disconnecting a pin by using NRF_PSEL_DISCONNECT.

    • nRF driver will use S0D1 drive mode for TWI/TWIM pins by default.

  • PWM

    • Added PWM driver for Renesas R-Car platform.

    • Added PWM driver for Raspberry Pi Pico series.

    • Added PWM support for NXP LPC55S36.

    • Added MCPWM support for ESP32 boards.

    • Fixed the nRF PWM driver to properly handle cases where PWM generation is used for some channels while some others are set to a constant level (active or inactive), e.g. when the LED driver API is used to turn off a PWM driven LED while another one (within the same PWM instance) is blinking.

  • Power Domain

    • Enabled access to the PMIC on NXP MXRT595 EVK.

    • Added soft off mode to the RT10xx Power Management.

    • Added support for power gating for Intel ADSP devices.

  • Reset

    • Added driver for GigaDevice GD32 SoCs.

  • SDHC

    • Added SDHC driver for NXP LPCXpresso platform.

    • Added support for card busy signal in SDHC SPI driver, to support the File System API.

  • Sensor

    • Converted drivers to use Kconfig ‘select’ instead of ‘depends on’ for I2C, SPI, and GPIO dependencies.

    • Converted drivers to use I2C, SPI, and GPIO dt_spec helpers.

    • Added multi-instance support to various drivers.

    • Added DS18B20 1-wire temperature sensor driver.

    • Added Würth Elektronik WSEN-HIDS driver.

    • Fixed unit conversion in the ADXL345 driver.

    • Fixed TTE and TTF time units in the MAX17055 driver.

    • Removed MPU9150 passthrough support from the AK8975 driver.

    • Changed the FXOS8700 driver default mode from accel-only to hybrid.

    • Enhanced the ADXL345 driver to support SPI.

    • Enhanced the BQ274XX driver to support the data ready interrupt trigger.

    • Enhanced the INA237 driver to support triggered mode.

    • Enhanced the LPS22HH driver to support being on an I3C bus.

    • Enhanced the MAX17055 driver to support VFOCV.

  • Serial

    • Added serial driver for Renesas Smartbond platform.

    • The STM32 driver now allows to use serial device as stop mode wake up source.

    • Added check for clock control device readiness during configuration for various drivers.

    • Various fixes on lpuart.

    • Added a workaround on bytes dropping on nrfx_uarte.

    • Fixed compilation error on uart_pl011 when interrupt is disabled.

    • Added power management support on stm32.

    • xlnx_ps has moved to using DEVICE_MMIO API.

    • gd32 now supports using reset API to reset hardware and clock control API to enable UART clock.

  • SPI

    • Add interrupt-driven mode support for gd32 driver.

    • Enable SPI support on NXP MIMXRT595 EVK.

    • PL022: Added SPI driver for the PL022 peripheral.

  • Timer

    • STM32 LPTIM based timer should now be configured using device tree.

  • USB

    • Restructured the NXP MCUX USB driver.

    • Added USB support for NXP MXRT595.

    • Fixed detach behavior in nRF USBD and Atmel SAM drivers.

  • W1

    • Added Zephyr-Serial 1-Wire master driver.

    • Added DS2484 1-Wire master driver. See the maxim,ds2484 devicetree binding for more information.

    • Added DS2485 1-Wire master driver. See the maxim,ds2485 devicetree binding for more information.

    • Introduced a shell module for 1-Wire.

  • Watchdog

    • Added support for Raspberry Pi Pico watchdog.

    • Added watchdog support on NXP MIMXRT595 EVK.

  • WiFi

    • Added ESP32 WiFi integration to Wi-Fi API management.

Networking

  • CoAP:

  • Ethernet:

    • Added EAPoL and IEEE802154 Ethernet protocol types.

  • HTTP:

    • Improved API documentation.

  • LwM2M:

    • Moved LwM2M 1.1 support out of experimental.

    • Refactored SenML-JSON and JSON encoder/decoder to use Zephyr’s JSON library internally.

    • Extended LwM2M shell module with the following commands: exec, read, write, start, stop, update, pause, resume.

    • Refactored LwM2M engine module into smaller sub-modules: LwM2M registry, LwM2M observation, LwM2M message handling.

    • Added an implementation of the LwM2M Access Control object (object ID 2).

    • Added support for LwM2M engine pause/resume.

    • Improved API documentation of the LwM2M engine.

    • Improved thread safety of the LwM2M library.

    • Added lwm2m_registry_lock() and lwm2m_registry_unlock() functions, which allow to update multiple resources w/o sending a notification for every update.

    • Multiple minor fixes/improvements.

  • Misc:

    • CONFIG_NET_CONFIG_IEEE802154_DEV_NAME has been removed in favor of using a Devicetree choice given by zephyr,ieee802154.

    • Fixed net_pkt leak with shallow clone.

    • Fixed websocket build with CONFIG_POSIX_API.

    • Extracted zperf shell commands into a library.

    • Added support for building and using IEEE 802.15.4 L2 without IP support.

    • General clean up of inbound packet handling.

    • Added support for restarting DHCP w/o randomized delay.

    • Fixed a bug, where only one packet could be queued on a pending ARP request.

  • OpenThread:

  • Sockets:

    • Fixed filling of the address structure provided in recvfrom() for packet socket.

    • Fixed a potential deadlock in TCP send() call.

    • Added support for raw 802.15.4 packet socket.

  • TCP:

    • Added support for Nagle’s algorithm.

    • Added “Silly Window Syndrome” avoidance.

    • Fixed MSS calculation.

    • Avoid unnecessary packet cloning on the RX path.

    • Implemented randomized retransmission timeouts and exponential backoff.

    • Fixed out-of-order data processing.

    • Implemented fast retransmit algorithm.

    • Multiple minor fixes/improvements.

  • Wi-Fi

    • Added support for using offloaded wifi_mgmt API with native network stack.

    • Extended Wi-Fi headers with additional Wi-Fi parameters (security, bands, modes).

    • Added new Wi-Fi management APIs for retrieving status and statistics.

USB

  • Minor bug fixes and improvements in class implementations CDC ACM, DFU, and MSC. Otherwise no significant changes.

Devicetree

Libraries / Subsystems

  • C Library

    • Added Picolibc as a Zephyr module. Picolibc module is a footprint-optimized full C standard library implementation that is configurable at the build time.

    • C library heap initialization call has been moved from the APPLICATION phase to the POST_KERNEL phase to allow calling the libc dynamic memory management functions (e.g. malloc()) during the application initialization phase.

    • Added strerror() and strerror_r() functions to the minimal libc.

    • Removed architecture-specific off_t type definition in the minimal libc. off_t is now defined as intptr_t regardless of the selected architecture.

  • C++ Subsystem

    • Added std::ptrdiff_t, std::size_t, std::max_align_t and std::nullptr_t type definitions to the C++ subsystem cstddef header.

    • Renamed global constructor list symbols to prevent the native POSIX host runtime from executing the constructors before Zephyr loads.

  • Cbprintf

    • Updated cbprintf static packaging to interpret unsigned char * as a pointer to a string. See Limitations and recommendations for more details about how to efficienty use strings. Change mainly applies to the logging subsystem since it uses this feature.

  • Emul

  • Filesystem

    • Added cash used to reduce the NVS data lookup time, see CONFIG_NVS_LOOKUP_CACHE option.

    • Changing mkfs options to create FAT32 on larger storage when FAT16 fails.

    • Added CONFIG_FS_FATFS_MIN_SS that allows to set minimal expected sector size to be supported.

  • Management

    • MCUMGR race condition when using the task status function whereby if a thread state changed it could give a falsely short process list has been fixed.

    • MCUMGR shell (group 9) CBOR structure has changed, the rc response is now only used for mcumgr errors, shell command execution result codes are instead returned in the ret variable instead, see Shell management for updated information. Legacy behaviour can be restored by enabling CONFIG_MCUMGR_CMD_SHELL_MGMT_LEGACY_RC_RETURN_CODE.

    • MCUMGR img_mgmt erase command now accepts an optional slot number to select which image will be erased, using the slot input (will default to slot 1 if not provided).

    • MCUMGR CONFIG_OS_MGMT_TASKSTAT_SIGNED_PRIORITY is now enabled by default, this makes thread priorities in the taskstat command signed, which matches the signed priority of tasks in Zephyr, to revert to previous behaviour of using unsigned values, disable this Kconfig.

    • MCUMGR taskstat runtime field support has been added, if CONFIG_OS_MGMT_TASKSTAT is enabled, which will report the number of CPU cycles have been spent executing the thread.

    • MCUMGR transport API drops zst parameter, of zephyr_smp_transport type, from zephyr_smp_transport_out_fn() type callback as it has not been used, and the nb parameter, of net_buf type, can carry additional transport information when needed.

    • A dummy SMP transport has been added which allows for testing MCUMGR functionality and commands/responses.

    • An issue with the UART/shell transports whereby large packets would wrongly be split up with multiple start-of-frame headers instead of only one has been fixed.

    • SMP now runs in its own dedicated work queue which prevents issues running in the system workqueue with some transports, e.g. Bluetooth, which previously caused a deadlock if buffers could not be allocated.

    • Bluetooth transport will now reduce the size of packets that are sent if they are too large for the remote device instead of failing to send them, if the remote device cannot accept a notification of 20 bytes then the attempt is aborted.

    • Unaligned memory access problems for CPUs that do not support it in MCUMGR headers has been fixed.

    • Groups in MCUMGR now use kernel slist entries rather than the custom MCUMGR structs for storage.

    • Levels of function redirection which were previously used to support multiple OS’s have been reduced to simplify code and reduce output size.

    • Bluetooth SMP debug output format specifier has been fixed to avoid a build warning on native_posix platforms.

    • Issue with img_mgmt_dfu_stopped() being wrongly called on success has been fixed.

    • Issue with MCUMGR img_mgmt image erase wrongly returning success during an error condition has been fixed.

    • Unused MCUMGR header files such as mcumgr_util.h have been removed.

    • Verbose error response reporting has been fixed and is now present when enabled.

    • Internal SMP functions have been removed from the public smp.h header file and moved to smp_internal.h

    • Kconfig files have been split up and moved to directories containing the systems they influence.

    • MCUMGR img_mgmt image upload over-riding/hiding of result codes has been fixed.

  • Logging

    • Removed legacy (v1) implementation and removed any references to the logging v2.

    • Added LOG_RAW for logging strings without additional formatting. It is similar to LOG_PRINTK but do not append <cr> when new line is found.

    • Improvements in the ADSP backend.

    • File system backend: Only delete old files if necessary.

  • IPC

    • Introduced a ‘zephyr,buffer-size’ DT property to set the sizes for TX and RX buffers per created instance.

    • Set WQ priority back to PRIO_PREEMPT to fix an issue that was starving the scheduler.

    • icmsg_buf library was renamed to spsc_pbuf.

    • Added cache handling support to spsc_pbuf.

    • Fixed an issue where the TX virtqueue was misaligned by 2 bytes due to the way the virtqueue start address is calculated

    • Added ipc_service_deregister_endpoint() function to deregister endpoints.

  • LoRaWAN

    • Added Class-C support.

    • Upgraded the loramac-node repository to v4.6.0.

    • Moved the REQUIRES_FULL_LIBC library dependency from LoRa to LoRaWAN.

    • Fixed the async reception in SX127x modems.

  • Modbus

    • Added user data entry for ADU callback.

  • Power management

    • Allow multiple subscribers to latency changes in the policy manager.

    • Added new API to implement suspend-to-RAM (S2RAM). Select CONFIG_PM_S2RAM to enable this feature.

    • Added pm_device_is_powered() to query a device power state.

  • POSIX

    • Made tz non-const in gettimeofday() for conformance to spec.

    • Fixed pthread descriptor resource leak. Previously only pthreads with state PTHREAD_TERMINATED could be reused. However, pthread_join() sets the state to PTHREAD_EXITED. Consider both states as candidates in pthread_create().

    • Added perror() implementation.

    • Used consistent timebase in sem_timedwait().

  • RTIO

    • Initial version of an asynchronous task and executor API for I/O similar inspired by Linux’s very successful io_uring.

    • Provided a simple linear and limited concurrency executor, simple task queuing, and the ability to poll for task completions.

  • SD Subsystem

    • SDMMC STM32: Now compatible with STM32L5 series. Added DMA support for DMA-V1 compatible devices.

    • Added support for handling the DISK_IOCTL_CTRL_SYNC ioctl call. this enables the filesystem api fs_sync().

  • Settings

    • Added API function settings_storage_get() which allows to get the storage instance used by the settings backed to store its records.

  • Shell

    • Added new API function checking shell readiness: shell_ready().

    • Added option to control formatting of the logging timestamp.

    • Added missing asserts to the shell api functions.

    • MQTT backend: bug fix to handle negative return value of the wait function.

    • A new backends command that lists the name and number of active shell backends.

    • Fixed handling mandatory args with optional raw arg.

  • Storage

    • flash_area_open() returns error if area’s flash device is unreachable.

    • flash_area components were reworked so build-time reference to the flash device is used instead of its name with runtime driver buinding.

    • Added FIXED_PARTITION_ macros that move flash_map to use DTS node labels.

  • Testsuite

  • Storage

    • Flash Map API deprecates usage of FLASH_AREA_ macros and replaces them with FIXED_PARTITION_ macros. This follows removal of label property from DTS nodes.

HALs

  • Atmel

    • sam: Fixed incorrect CIDR values for revision b silicon of SAMV71 devices.

  • Espressif

    • Updated Espressif HAL with esp-idf 4.4.1 updates.

    • Added support to binary blobs implementation.

    • Fixed ESP32-C3 wifi issues.

  • GigaDevice

    • Added support for gd32e50x.

    • gd32e10x: upgraded to v1.3.0.

    • gd32f4xx: upgraded to v3.0.0.

  • NXP

    • Updated the NXP MCUX SDK to version 2.12.

    • Updated the USB middleware to version 2.12.

    • Removed all binary Blobs for power management libraries.

    • Removed all binary archive files.

  • Nordic

    • Updated nrfx to version 2.9.0.

  • RPi Pico

    • Renamed adc_read to pico_adc_read, to avoid name collision with Zephyr’s API.

  • STM32

    • stm32cube: update stm32f7 to cube version V1.17.0.

    • stm32cube: update stm32g0 to cube version V1.6.1.

    • stm32cube: update stm32g4 to cube version V1.5.1.

    • stm32cube: update stm32l4 to cube version V1.17.2.

    • stm32cube: update stm32u5 to cube version V1.1.1.

    • stm32cube: update stm32wb to cube version V1.14.0.

    • pinctrl: some pin definitions did not contain the “_c” suffix, used by pins with analog switch on certain H7 devices.

  • TI

    • simplelink: cc13x2_cc26x2: include ADC driverlib sources.

    • simplelink: cc13x2_cc26x2: include flash driverlib sources.

    • cc13x2: kconfig conditions for P variant support & custom RF hwattrs.

    • cc13x2_cc26x2: update to TI SimpleLink SDK 4.40.04.04.

MCUboot

  • Added initial support for leveraging the RAM-LOAD mode with the zephyr-rtos port.

  • Added the MCUboot status callback support. See CONFIG_MCUBOOT_ACTION_HOOKS.

  • Edited includes to have the zephyr/ prefix.

  • Edited the DFU detection’s GPIO-pin configuration to be done through DTS using the mcuboot-button0 pin alias.

  • Edited the LED usage to prefer DTS’ mcuboot-led0 alias over the bootloader-led0 alias.

  • Removed device_get_binding() usage in favor of DEVICE_DT_GET().

  • Added support for generic watchdog0 alias.

  • Enabled watchdog feed by default.

  • Dropped the CONFIG_BOOT_IMAGE_ACCESS_HOOKS_FILE option. The inclusion of the Hooks implementation file is now up to the project’s customization.

  • Switched zephyr port from using FLASH_AREA_ macros to FIXED_PARTITION_ macros.

  • Made flash_map_backend.h compatible with a C++ compiler.

  • Allowed to get the flash write alignment based on the zephyr,flash DT chosen node property.

  • boot_serial:

    • Upgraded from cddl-gen v0.1.0 to zcbor v0.4.0.

    • Refactored and optimized the code, mainly in what affects the progressive erase implementation.

    • Fixed a compilation issue with the echo command code.

  • imgtool:

    • Added support for providing a signature through a third party.

Trusted Firmware-M

  • Allowed enabling FPU in the application when TF-M is enabled.

  • Added option to exclude non-secure TF-M application from build.

  • Relocated mergehex.py to scripts/build.

  • Added option for custom reset handlers.

Documentation

Tests and Samples

  • A large number of tests have been reworked to use the new ztest API, see Test Framework for more details. This should be used for newly introduce tests as well.

  • smp_svr Bluetooth overlay (overlay-bt) has been reworked to increase throughput and enable packet reassembly.

  • Added test for the new shell API function: shell_ready().