Zephyr 3.3.0 (Working Draft)

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

Major enhancements with this release include:

The following sections provide detailed lists of changes by component.

API Changes

Changes in this release

  • Bluetooth: Add extra options to bt_le_per_adv_sync_transfer_subscribe to allow disabling sync reports, and enable sync report filtering. these two options are mutually exclusive.

  • Bluetooth: CONFIG_BT_PER_ADV_SYNC_TRANSFER_RECEIVER and CONFIG_BT_PER_ADV_SYNC_TRANSFER_SENDER have been added to enable the PAST implementation rather than CONFIG_BT_CONN.

  • Flashdisk: CONFIG_DISK_FLASH_VOLUME_NAME, CONFIG_DISK_FLASH_DEV_NAME, CONFIG_DISK_FLASH_START, CONFIG_DISK_FLASH_MAX_RW_SIZE, CONFIG_DISK_ERASE_BLOCK_SIZE, CONFIG_DISK_FLASH_ERASE_ALIGNMENT, CONFIG_DISK_VOLUME_SIZE and CONFIG_DISK_FLASH_SECTOR_SIZE Kconfig options have been removed in favor of new zephyr,flash-disk devicetree binding.

  • Regulator APIs previously located in <zephyr/drivers/regulator/consumer.h> are now part of <zerphyr/drivers/regulator.h>.

  • Starting from this release zephyr- prefixed tags won’t be created anymore. The project will continue using v tags, for example v3.3.0.

  • Bluetooth: Deprecate the Bluetooth logging subsystem in favor of the Zephyr standard logging system. To enable debugging for a particular module in the Bluetooth subsystem, enable CONFIG_BT_(module name)_LOG_LEVEL_DBG instead of CONFIG_BT_DEBUG_(module name).

  • MCUmgr img_mgmt now requires that a full sha256 hash to be used when uploading an image to keep track of the progress, where the sha256 hash is of the whole file being uploaded (different to the hash used when getting image states). Use of a truncated hash or non-sha256 hash will still work but will cause issues and failures in client software with future updates to Zephyr/MCUmgr such as image verification.

  • MCUmgr handlers no longer need to be registered by the application code, handlers just need to use a define which will then call the supplied registration function at boot-up. If applications register this then those registrations should be removed to prevent registering the same handler multiple times.

  • MCUmgr Bluetooth and UDP transports no longer need to be registered by the application code, these will now automatically be registered at bootup (this feature can be disabled for the UDP transport by setting CONFIG_MCUMGR_TRANSPORT_UDP_AUTOMATIC_INIT). If applications register transports then those registrations should be removed to prevent registering the same transport multiple times.

Removed APIs in this release

  • Removed CONFIG_COUNTER_RTC_STM32_LSE_DRIVE* This should now be configured using the driving_capability property of LSE clock

  • Removed CONFIG_COUNTER_RTC_STM32_LSE_BYPASS This should now be configured using the new lse_bypass property of LSE clock

  • Removed CONFIG_COUNTER_RTC_STM32_BACKUP_DOMAIN_RESET

Deprecated in this release

  • MCUmgr subsystem, specifically the SMP transport API, is dropping zephyr_ prefix, deprecating prefixed functions and callback type definitions with the prefix and replacing them with with prefix-less variants. The zephyr_smp_transport type, representing transport object, is now replaced with smp_transport, and the later one is used, instead of the former one, by all prefix-less functions.

    Deprecated functions and their replacements:

    Deprecated

    Drop in replacement

    zephyr_smp_transport_init()

    smp_transport_init()

    zephyr_smp_rx_req()

    smp_rx_req()

    zephyr_smp_alloc_rsp()

    smp_alloc_rsp()

    zephyr_smp_free_buf()

    smp_free_buf()

    Deprecated callback types and their replacements:

    Deprecated

    Drop in replacement

    zephyr_smp_transport_out_fn()

    smp_transport_out_fn()

    zephyr_smp_transport_get_mtu_fn()

    smp_transport_get_mtu_fn()

    zephyr_smp_transport_ud_copy_fn()

    smp_transport_ud_copy_fn()

    zephyr_smp_transport_ud_free_fn()

    smp_transport_ud_free_fn()

    NOTE: Only functions are marked as __deprecated, type definitions are not.

  • STM32 RTC source clock should now be configured using devicetree. Related Kconfig CONFIG_COUNTER_RTC_STM32_CLOCK_LSI and CONFIG_COUNTER_RTC_STM32_CLOCK_LSE options are now deprecated.

  • File backend for settings APIs and Kconfig options were deprecated:

    settings_mount_fs_backend() in favor of settings_mount_file_backend()

    CONFIG_SETTINGS_FS in favor of CONFIG_SETTINGS_FILE

    CONFIG_SETTINGS_FS_DIR in favor of CONFIG_SETTINGS_FILE_DIR

    CONFIG_SETTINGS_FS_FILE in favor of CONFIG_SETTINGS_FILE_PATH

    CONFIG_SETTINGS_FS_MAX_LINES in favor of CONFIG_SETTINGS_FILE_MAX_LINES

  • PCIe APIs pcie_probe() and pcie_bdf_lookup() have been deprecated in favor of a centralized scan of available PCIe devices.

  • SPI DT spi_is_ready() function has been deprecated in favor of spi_is_ready_dt().

  • LwM2M APIs using string references as LwM2M paths has been deprecated in favor of functions using lwm2m_path_obj instead.

Stable API changes in this release

  • MCUmgr events have been reworked to use a single, unified callback system. This allows better customisation of the callbacks with a lower flash size. Applications using the existing callback system will need to be upgraded to use the new API by following the migration guide

  • net_pkt_get_frag(), net_pkt_get_reserve_tx_data() and net_pkt_get_reserve_rx_data() functions are now requiring to specify the minimum fragment length to allocate, so that they work correctly also in case CONFIG_NET_BUF_VARIABLE_DATA_SIZE is enabled. Applications using this APIs will need to be updated to provide the expected fragment length.

New APIs in this release

Kernel

Architectures

  • ARM

  • ARM

  • ARM64

  • RISC-V

  • Xtensa

Bluetooth

  • Audio

  • Direction Finding

  • Host

    • Fixed missing calls to bt_le_per_adv_sync_cb.term when deleting a periodic advertising sync object.

    • Added local advertising address to bt_le_ext_adv_info.

  • Mesh

    • Change default advertiser to be extended advertiser.

  • Controller

  • HCI Driver

Boards & SoC Support

  • Added support for these SoC series:

  • Removed support for these SoC series:

  • Made these changes in other SoC series:

  • Changes for ARC boards:

  • Added support for these ARM boards:

  • Added support for these ARM64 boards:

  • Removed support for these ARM boards:

  • Removed support for these X86 boards:

  • Added support for these RISC-V boards:

  • Added support for these Xtensa boards:

  • Removed support for these Xtensa boards:

  • Made these changes in other boards:

  • Added support for these following shields:

Build system and infrastructure

Drivers and Sensors

  • ADC

  • CAN

  • Clock control

  • Counter

    • STM32 RTC based counter should now be configured using device tree.

  • Crypto

  • DAC

  • DFU

  • Disk

  • Display

  • DMA

  • EEPROM

  • Entropy

  • ESPI

  • Ethernet

  • Flash

    • NRF: Added CONFIG_SOC_FLASH_NRF_TIMEOUT_MULTIPLIER to allow tweaking the timeout of flash operations.

    • spi_nor: Added property mxicy,mx25r-power-mode to jedec,spi-nor binding for controlling low power/high performance mode on Macronix MX25R* Ultra Low Power flash devices.

    • spi_nor: Added check if the flash is busy during init. This used to cause the flash device to be unavailable until the system was restarted. The fix waits for the flash to become ready before continuing. In cases where a full flash erase was started before a restart, this might result in several minutes of waiting time (depending on flash size and erase speed).

  • GPIO

  • I2C

  • I2S

  • I3C

  • IEEE 802.15.4

  • Interrupt Controller

  • IPM

  • KSCAN

  • LED

  • MBOX

  • MEMC

  • PCIE

  • PECI

  • Pin control

    • Common pin control properties are now defined at root level in a single file: dts/bindings/pinctrl/pincfg-node.yaml. Pin control bindings are expected to include it at the level they need. For example, drivers using the grouping representation approach need to include it at grandchild level, while drivers using the node approach need to include it at the child level. This change will only impact out-of-tree pin control drivers, sinc all in-tree drivers have been updated.

  • PWM

  • Power domain

  • Reset

  • SDHC

  • Sensor

  • Serial

  • SPI

  • Timer

  • USB

  • W1

  • Watchdog

  • WiFi

Networking

IPv4 packet fragmentation support has been added, this allows large packets to be split up before sending or reassembled during receive for packets that are larger than the network device MTU. This is disabled by default but can be enabled with CONFIG_NET_IPV4_FRAGMENT.

USB

Devicetree

  • Bindings

    • New:

      • zephyr,flash-disk

      • STM32 SoCs:

        • dtcompatible:

          st,stm32-lse-clock: new lse-bypass property

Libraries / Subsystems

  • File systems

  • Management

    • MCUmgr functionality deprecated in 3.1 has been removed: CONFIG_FS_MGMT_UL_CHUNK_SIZE, CONFIG_IMG_MGMT_UL_CHUNK_SIZE, CONFIG_OS_MGMT_ECHO_LENGTH

    • MCUmgr fs_mgmt issue with erasing a file prior to writing the first block of data has been worked around by only truncating/deleting the file data if the file exists. This can help work around an issue whereby logging is enabled and the command is sent on the same UART as the logging system, in which a filesystem error was emitted.

    • A MCUmgr bug when using the smp_svr sample with Bluetooth transport that could have caused a stack overflow has been fixed.

    • A MCUmgr issue with Bluetooth transport that could cause a deadlock of the mcumgr thread if the remote device disconnected before the output message was sent has been fixed.

    • A MCUmgr img_mgmt bug whereby the state of an image upload could persist when it was no longer valid (e.g. after an image erase command) has been fixed.

    • MCUmgr fs_mgmt command has been added that allows querying/listing the supported hash/checksum types.

    • MCUmgr Bluetooth transport will now clear unprocessed commands sent if a remote device disconnects instead of processing them.

    • A new MCUmgr transport function pointer has been added which needs registering in smp_transport_init for removing invalid packets for connection-orientated transports. If this is unimplemented, the function pointer can be set to NULL.

    • MCUmgr command handler definitions have changed, the mgmt_ctxt struct has been replaced with the smp_streamer struct, the zcbor objects need to replace cnbe object access with writer and cnbd object access with reader to successfully build.

    • MCUmgr callback system has been reworked with a unified singular interface which supports status passing to the handler (MCUmgr Callbacks).

    • MCUmgr subsystem directory structure has been flattened and contents of the lib subdirectory has been redistributed into following directories:

      Subdirectory

      MCUmgr area

      mgmt

      MCUmgr management functions, group registration, and so on;

      smp

      Simple Management Protocol processing;

      transport

      Transport support and transport API;

      grp

      Command groups, formerly lib/cmd; each group, which has Zephyr built in support has its own directory here;

      util

      Utilities used by various subareas of MCUmgr.

      Public API interfaces for above areas are now exported through zephyr_interface, and headers for them reside in zephyr/mgmt/mcumgr/<mcumgr_subarea>/. For example to access mgmt API include <zephyr/mgmt/mcumgr/mgmt/mgmt.h>.

      Private headers for above areas can be accessed, when required, using paths: mgmt/mcumgr/mgmt/<mcumgr_subarea>/.

    • MCUmgr os_mgmt info command has been added that allows querying details on the kernel and application, allowing application-level extensibility see OS/Application Info for details.

  • MCUMgr CONFIG_APP_LINK_WITH_MCUMGR has been removed as it has not been doing anything.

  • LwM2M

    • The lwm2m_senml_cbor_* files have been regenerated using zcbor 0.6.0.

HALs

MCUboot

Trusted Firmware-M

zcbor

Upgraded zcbor to 0.6.0. Among other things, this brings in a few convenient changes for Zephyr:

  • In the zcbor codebase, the ARRAY_SIZE macro has been renamed to ZCBOR_ARRAY_SIZE to not collide with Zephyr’s ARRAY_SIZE macro.

  • The zcbor codebase now better supports being used in C++ code.

The entire release notes can be found at https://github.com/zephyrproject-rtos/zcbor/blob/0.6.0/RELEASE_NOTES.md

Documentation

Tests and Samples