Skip to main content

Zephyr Weekly Update – Zephyr 3.6.0 is a go, Hello 3.6.99!

By March 1, 2024No Comments

Zephyr 3.6 was released a week ago and it is really amazing to see how well it was received. I am particularly happy to see that thousands of people have already watched the video highlighting some of the changes and additions available in this release, such as the added support for GNSS receivers, keyboard matrix driver, and more.

Please check it out if you haven’t had a chance already!

I also encourage you to check out our special Zephyr Tech Talk episode earlier this week!

Zephyr 3.7, which will be the next Long-Term Support version of the project, is already starting to shape up, and below are some of the highlights from the first couple hundreds of commits already merged into the main branch.

Native UART TTY driver now supports interrupt-driven API

In an effort to make it increasingly easier to emulate Zephyr on host systems, the native UART TTY driver now supports an interrupt-driven API. In order to use the new driver for your zephyr,native-tty-uart UARTs, you may simply enable CONFIG_UART_INTERRUPT_DRIVEN in your project configuration.

I find it particularly interesting as this means that it’s now easier to e.g. simulate a GNSS receiver on your host system, by attaching your Zephyr app to a virtual UART into which you can inject your mock NMEA sentences. (PR #68857).

Boards & SoCs

As the project is in the process of transitioning to a new model for describing the SoCs and boards in the source tree, no work has been merged in the main branch this week.

The maintainers are holding off with adding new boards/SoCs and making changes in main until the working branch (collab-hwm) where the migration is happening is ready to be merged (which should be very soon).

General drivers

  • An interesting new input driver allows to define input keys that are implemented using an ADC and a resistor ladder.
Image credit:

This is a pretty clever way to add multiple buttons while only using a single ADC channel, and the driver allows to basically define the mapping of how each ADC values / voltage ranges correspond to each key, or key combination. (PR #68446)

/ {
        buttons {
                compatible = "adc-keys";
                io-channels = <&adc 2>;
                keyup-threshold-mv = <0>;
                key_0 {
                        press-thresholds-mv = <1650>,  /* KEY0 */
                                              <2536>;  /* KEY0 + KEY1 */
                        zephyr,code = <INPUT_KEY_0>;
                key_1 {
                        press-thresholds-mv = <2300>,  /* KEY1 */
                                              <2536>;  /* KEY0 + KEY1 */
                        zephyr,code = <INPUT_KEY_1>;
    • RRAM (or ReRAM, Resistive Random-Access Memory) is a type of non-volatile memory that stores data by changing the resistance across a dielectric solid-state material. It’s a relatively new technology and one of its benefit is that it is several orders of magnitude faster than flash memory.
      A new flash driver for the RRAM controller found on some Nordic nRF SoCs has been contributed this week. (PR #68309)
    • New regulator driver for the Cirrus CP9314 buck switched capacitor DC/DC Converter (cirrus,cp9314). (PR #68177)
  • New driver for the ScioSense ENS160 environmental, multi-gas, sensor (sciosense,ens160). This sensor allows to measure CO2, VOC, as well as a general air quality index (AQI). (PR #67343)
  • The PixArt PAT9125EL is a low-power optical tracking sensor that doesn’t require a lens to work, and a new input driver for it has been added (pixart,pat912x)!
    This sensor is particularly well suited for tracking movement over a shiny/glossy surface. (PR #69492)
Video courtesy of Fabio Baltieri
  • The charger subsystem now allows to define output limits for the discharge rate and the system voltage, allowing to issue alerts when these limits are reached. (PR #67810)
  • The Ethernet driver for the W5500 now supports link status detection. (PR #68752)
  • The ESP-AT Wi-Fi driver now allows to bind and receive from UDP sockets. (PR #68586)


  • Various improvements to the DHCPv4 server.
  • New lwm2m_set_bulk() API allows to set multiple resource values at once. (PR #68988)
  • New network shell command (net iface set_ipv4_gateway) allows to set the IPv4 gateway of a network interface. (PR #68465)
  • It is now possible to use CONFIG_SHELL_MSG_CMD_NOT_FOUND and SHELL_MSG_SPECIFY_SUBCOMMAND to indicate what message (if any) will be printed when a given command or subcommand is not found. (PR #69002)
  • New sign_extend() and sign_extend_64() helper functions to perform sign extensions. (PR #68828)
  • Bluetooth CAP Commander now supports the “Change Volume Mute State” procedure. (PR #66281)
  • New POSIX APIs:
    • fattach()
    • fdetach()
    • syslog() (PR #68515)

A big thank you to the 16 individuals who had their first pull request accepted this week, 💙 🙌: @JayHCloud, @bmihelcic, @thompsa, @jaz1-nordic, @vshymanskyy, @rntsoma, @sageve, @jerome-pouiller, @ngphibang, @celinakalus, @MaochenWang1, @allemanm, @Brianmm94, @rysiof, @jpanisbl, and @cmrdrbz.

As always, I very much welcome your thoughts and feedback in the comments below!

Benjamin Cabé