IoT Zephyr

Zephyr Weekly Update – Gotta love ’em snippets

Welcome to the second edition of the Zephyr Weekly Update series covering the week of March 24-31, 2023. In this series, I try to highlight some of the noteworthy changes that made it into Zephyr over the past week.

This week is all about snippets, a couple interesting new boards, and as always lots of activity on the drivers front. Let’s dive right in!


The most significant update this week is the introduction of Snippets.

If you’re like me, you’ve probably often found yourself reusing similar snippets of configuration (sometimes alongside corresponding devicetree overlays) to add a bit of functionality to your project. Things like overriding the default physical UART and Zephyr console to use a USB CDC-ACM UART one instead, enabling your favorite debugging combo (shell, custom log levels, …), etc.

However, the current build system lacked an extensible and composable solution that allows for capturing and naming such “snippets”, so that they can be referenced at build time, as opposed to copied repeatedly across your various projects.

Enter snippets! Snippets help streamline your project’s configuration by allowing you to define commonly used settings and then reference them when needed. This way, you can maintain a cleaner, more organized project structure while reducing the risk of errors caused by manual copy-pasting or inconsistent configurations across various parts of your project.

If it’s still not 100% clear to you how snippets can help you, check out this sample. It demonstrates how adding and enabling a USB CDC-ACM console to your project is now just a west build -S cdc-acm-console […] away. This will, behind the scenes, automagically:

  • add a cdc-acm-uart to an existing zephyr_udc0 node.
  • override the chosen zephyr,console so that it uses it.
  • set the proper KConfig options so that the USB device stack automatically boots up and is properly configured and will of course enable the new USB-based console.

Boards and SoC support

Arduino Giga R1 Wi-Fi
Arduino Giga R1 Wi-Fi

STM32H573I-DK Discovery kit
STM32H573I-DK Discovery kit
  • Support for the Arduino Giga board dropped shortly before I started this weekly update. It’s an impressive dual-core board from Arduino, which was recently announced and supported in Zephyr from day 1! As of this week, it is now also possible to use it for BLE [cf1ee6f615]
  • STMicroelectronics will soon be releasing a new Discovery Kit (STM32H573I-DK) for their STM32H573IIK3Q MCU.
    Commit [1f23bd7cf7] added support for this Arm Cortex-M33 based board featuring 2 MB of flash memory, and 640 KB of SRAM. It also has an LCD display and a Wi-Fi module, so it’s getting on my wish list!
    • In fact, it goes beyond just this specific board, as support for the complete STM32H5 series has been added [3b1dd7380b]
  • Added remote flashing support for MEC172xEVB_ASSY6906 board [efb3ccf2db]
  • Implemented cache management API for ARM Cortex-A and Cortex-R [98d4faf099]


Texas Instruments BP-BASSENSORSMKII BoosterPack™
Texas Instruments BP-BASSENSORSMKII BoosterPack™
  • The TMD2620 proximity sensor is the kind of sensor you could find in your phone for detecting when to turn the screen off due to it being close to your ear. Commit [924ac2265d] added support for it, including the integration with Zephyr’s Power Management system.
    • A code sample has also been added so you can easily try things out.
  • A new experimental driver is available for UART emulation [6180f96799].
  • The BP-BASSENSORSMKII Booster Pack from Texas Instruments is a feature-packed shield with tons of sensors (6-axis inertial sensor, 3-axis magnetometer, optical light sensor, temperature, humidity, …) that can be useful in building automation scenarios.
    Commit [524f01b60c] added support for it 🙂
  • Fabio from Google added an interesting new “longpress” input device that helps deal with making the difference between long-press and short-press events. Press a button for less than a configurable delay? That’s a short press! Otherwise, that’s a long press, and it will emit a different key event [5b36b4fa16]
  • Also related to input drivers, it’s now possible to use the newly added kscan input driver to listen for input events and report them on a kscan API. This allows porting kscan drivers to Zephyr’s input APIs while maintaining compatibility with the existing kscan-based applications. [a9735abf84]
  • Added flash readout and write protection support for STM32F4 [d652da5acb] [b6078cc906].
  • Added documentation for the Battery Charging 1.2 driver [24d5bac58f]
  • Added i2s domain clock support for STM32 devices [87f3e331a6]
  • New emulator for the PI3USB9201 USB charging detector [9b8c4ee847]
  • Added driver for Intel’s ADSP watchdog [ea405eb49e]
  • Several improvements around I3C [1f757bc67f] [2f02d6ca81] [62f22f8d3b].


  • Expanded AICS (Audio Input Control Service) API support to include audio [33bf1fa0c6]


You may be familiar with the Pmod standard interface that allows to easily attach peripherals to development boards. A new GPIO nexus has been added, allowing you to define your Pmod port as a node in your device tree [9d50b143ae]

I hope you find this update useful. Please share your thoughts in the comments and don’t hesitate to share the article widely to help spread the love for Zephyr! 🪁

If you enjoyed this article, don’t forget to subscribe to this blog to be notified of upcoming publications! And of course, you can also always find me on Twitter and Mastodon.

Embedded IoT Zephyr

Introducing the Zephyr Weekly Updates

As the Zephyr project continues to grow and evolve, I care deeply about making sure the community stays informed and engaged. To support this, I will start sharing Zephyr Weekly Update blog posts. In this series, I will do my best to highlight key changes, improvements, and noteworthy contributions that made it into the Zephyr GitHub repository over the previous week.

The goal is to provide you with a concise and easily digestible summary of the latest developments, ranging from new features and bug fixes to boards and drivers additions. I’ll probably tend to post these on Fridays, but I thought I would send this one out as it was ready to go!

Now, without further ado, let’s dive into this week’s update!

New boards and SoC support

The BeagleConnect Freedom is a TI CC1352P7-based development
board with enclosure and antenna featuring BLE and SubGHz wireless, 2x
mikroBUS sockets, external flash, light, temperature/humidity sensors,
USB-to-UART bridge, buzzer and battery charger. BeagleConnect Freedom BeagleConnect Freedom

A huge congratulations to Jason Kridner and team for not only helping bring support for the TI CC13X2X7 SoC series (cb953a4255) into Zephyr, but also adding support for their new baby, the BeagleConnect Freedom board (a57810dc3b).

If you want to try things out, feel free to head over to the dedicated documentation page and get your first Zephyr apps running on the board. I would love to hear about it if you end up doing so!


  • Audio: CAP (Common Audio Profile) unicast audio start support and implementation (b71f9f2702, 6866cd30e8)
    • The Bluetooth audio shell now supports the CAP unicast start command. Additionally, the unicast audio start for the CAP has been implemented, providing more functionality for audio streaming.
  • Host: Encrypted Advertising Data and Appearance values (a693b9b33b, 2ffe890b6a)
    • Encrypted Advertising Data is a new feature from the Bluetooth Core Specification 5.4. It provides a way to communicate encrypted data in advertising, scan response and EIR packets.
    • Additionally, new appearance values have been added, making it easier to advertise Bluetooth devices in a standard way.
  • Mesh: Removal of deprecated Health API (08f4a82038)


  • ADC: New Atmel SAM ADC driver (0b45710219)
  • Bluetooth: Infineon cyw43xxx BT driver (f91e35d447).
  • Clock: New Atmel SAM PMC driver (88cedcf5c5)
    • The Atmel SAM PMC driver has been introduced, enhancing clock management capabilities for devices based on the Atmel SAM platform.
  • Counter: Device tree adaptation (656b0e6426)
    • The counter drivers (RTC and timer) have been adapted to use the device tree, improving code maintainability and simplifying hardware configuration.
  • DMA: RaspberryPi Pico DMA support (08606eac44)
  • Fuel Gauge: MAX17048 support (2380710020)
  • Retained Memory: nRF GPREGRET driver (9bda013e5d)
    • The nRF GPREGRET driver has been added to the project, providing support for retained memory functionality on Nordic Semiconductor devices.
  • Serial: Virtual UART over ARC hostlink channel (56572687c7)
    • Added support for a virtual UART device that uses ARC Hostlink channels for data transfers.
  • SMBus: SMBus subsystem driver API, and SMBus subsystem shell, Intel ICH/PCH SMbus driver (adff73d618, 5fc55364a2, 4099bc2e63)
    • SMBus (System Management Bus) is a simple two-wire communication protocol derived from I²C that is used for low-speed communication between devices. It is often found in computer motherboards and embedded systems.
    • A new SMBus subsystem driver API has been added, with drivers for the Intel ICH / PCH controller hubs being the first implementors.
    • Furthermore, a shell module for the SMBus subsystem is now available, providing an interactive interface for developers to explore SMBus communication with peripheral devices.
  • SPI: Add Intel SPI penwell driver (3d44508c38)
  • Watchdog: Add Intel TCO Watchdog driver (2fe4a4a218)

Please do not hesitate to share your thoughts and feedback in the comments! As there has been over 400(!) commits last week, I may very well have missed something important so feel free to chime in ☺️.

If you enjoyed this article, don’t forget to subscribe to this blog to be notified of upcoming publications! And of course, you can also always find me on Twitter and Mastodon.