Categories
IoT Zephyr

Zephyr Weekly Update – Ahoj z Prahy!

Happy Friday, from sunny Prague, Czech Republic! As hundreds of Zephyr users, contributors, and maintainers gathered in-person (and virtually too!) this week, this Friday’s digest is a bit on the light side. Indeed, most of the “cool” stuff this week probably happened anywhere but in the GitHub repository: from the face-to-face meeting of the project’s Technical Steering Committee, to the dozens of talks at the Zephyr Developer Summit, and the numerous impromptu chats in-between sessions. That being said, there’s definitely a bunch of updates that are worth highlighting, so please keep reading 🙂

Before moving on to the digest, I wanted to make sure to call out the catalog of products running Zephyr that’s featured on the Zephyr Project’s website, as there’s been a few very interesting additions to it recently.

Image credit: Vestas.

Did you know that Vestas wind turbines are effectively powered by Zephyr? Oh, and wind too, I guess 🙃 but then Zephyr is also the god of the West wind, is it not?

If you are building a product using Zephyr, I would strongly recommend you consider getting it added to the catalog. This is an opportunity to make your product and company more visible, but also a great way to support the project by showing the breadth of use cases and applications that Zephyr is suited for.

Just fill out the dedicated form, and get your product added!

And now, for this week’s update!

Boards & shields

  • The Titanium Ti60 F225 Development Kit from Efinix is a development kit built around the Ti60 FPGA (a 225-ball FineLine BGA package fabricated on a 16nm process) with 256 Mb of HyperRAM on board. Efinix propose a RISC-V based soft-core for this board/FPGA, for which support has just been added to Zephyr. (PR #56370)
  • NXP RT1170 EVKB is a new revision to the popular RT1170 Evaluation Kit. It has an audio connector and an additional display connector compared to the previous revision, and is now supported upstream. (PR #59212)

Connectivity

Several interesting fixes and improvements this week on the Wi-Fi, CoAP, and LWM2M fronts:

  • Zephyr’s CoAP Client can now handle multiple concurrent requests (PR #59757).
  • Support for X509 certificates has been added in the LWM2M client, in addition to pre-shared keys (PSK) that were already supported. (PR #59019).
  • Wi-Fi passive scanning allows to passively wait for advertisement frames on each channel as opposed to actively probing the network. It can therefore be more power efficient.
    PR #59204 makes it possible to use passive mode when scanning a network, and also provides a way to make passive scan the default mode.
  • net_if_is_wifi() API has been added to the Network Interface abstraction layer and allows to check whether a given interface supports Wi-Fi.

Drivers

  • When using an ADC (Analog to Digital Converter) to measure the output of a current sensing circuit, you’re reading volts, which is not necessarily helpful since you probably care more about the actual current going through your sense resistors, and not the output voltage.
    There are now two new bindings available for current sensing circuits (current sense shunts and current sense amplifiers) that essentially allows you to transparently manipulate actual current reading as opposed to “raw” voltage information. Combined with some now current_sense_ API and macros, it is now possible to describe the circuit in your Devicetree (ex. set the shunt resistor value, or the amplifier gain), and then directly and transparently convert ADC readings (in volts), to the current value (in amps) measured by the circuit. Handy! ⚡️
A simple voltage divider (Wikipedia).
A simple voltage divider (Wikipedia).
  • Code has also been added to allow you to do something similar for voltage dividers, so that you can easily calculate the “scaled” output when using the voltage divider binding. As voltage dividers are slightly easier to grasp for my electronics-newbie brain, let me try and explain in a bit more detailed why I find this really cool and handy.
    Basically, you can describe the values of the Z1 and Z2 resistances in your circuit in your Devicetree, and indicate which ADC I/O channel you’re going to get the “raw” readings from. Once that is done, you can then use voltage_divider_scale_dt() in your code (and pass it a static initializer for your voltage divider node, ex. sensor0 in the example below) to directly have the ADC reading converted to the “original” scaled voltage, in just one line. With the divider configuration below, should the ADC input be 1.000V, the scaled output would in fact be 2.000V). Didn’t I say handy? 🙂 ⚡️
	sensor0: vd {
		compatible = "voltage-divider";
		io-channels = <&adc0 0>;
		output-ohms = <50>;
		full-ohms = <100>;
	};

  • The ICM42688 (3-axis gyroscope and a 3-axis accelerometer MEMS sensor from TDK) now has an async API. (PR #58870)
  • A driver has been added for the I2C controller on the PolarFire SoC Icycle kit (PR #59101).
  • A watchdog driver has been added for Andes atcwdt200 as found on e.g. AndeShape AE350 platform (PR #59258).

Miscellaneous

  • A useful fix in Zephyr’s JSON parser for properly handling multidimensional arrays (PR #50816).
  • The implementation of the POSIX stat() function has been fixed and will now correctly return informations about the file such as file size, etc. (thanks to @plinnie for their first contribution to Zephyr, with PR #59278!).

A big thank you to the 4 individuals who had their first pull request accepted this week, 💙 🙌: @Cladoc, @ethan-duckett-brill, @mkettn, and @plinnie.

As always please feel free to jump in with your thoughts or questions in the comments below. See you next week!

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.

Catch up on all the editions of the Zephyr Weekly Update: