Categories
IoT Zephyr

Zephyr Weekly Update – Summer catch-up

I’ve made a terrible mistake! I went on vacation for a few weeks, and just before that also missed a couple of weekly updates due to bank holidays and a busy schedule… Now, I have 750+ merged pull requests to catch up on to try and give y’all a sense of what recently landed in Zephyr. I will do my best to do justice to all the great work from the community over the past month, but I apologize in advance if I miss a few things here and there. I’ll try to resume to a normal schedule next week!

Support for ext2 filesystem

In addition to FatFS and LittleFS, Zephyr now supports ext2fs! Heartfelt kudos to Franciszek Zdobylak for the amazing work on this one.

Together with this very significant contribution, a new file system sample has been introduced to make it easier to play with FAT and ext2 on either an SD card or internal/external flash storage.

LwM2M engine now 2x more power efficient

The OMA LwM2M device management protocol is primarily aimed at low-power devices operated over constrained, also low-power, networks. A recent refactoring of the LwM2M engine makes it possible to rely on a tickless approach for managing the LwM2M communications. The engine only wakes up when needed, as opposed to ticking (potentially needlessly) every 0.5s.

See new LWM2M_TICKLESS Kconfig option and PR #60887. Some very impressive charts there demonstrating the 2x improvement on energy efficiency (actual power consumption impact might differ based on the actual hardware).

Boards & SoCs

ST Nucleo WBA52CG
  • Initial support was added for the STM32WBA series from ST Microelectronics. It leverages the STM32U5 architectures and focuses on low-power and Bluetooth® Low Energy 5.3 use cases. (PR #60138)
  • Silabs SLTB009A board is now supported. It boasts an EFM32 Giant Gecko 12 MCU (Cortex-M4) and targets ultra-low energy applications. (PR #60137)
  • Intel Alder Lake (Intel’s codename for the 12th generation of Intel Core) reference boards are now supported. (PR #61072)
  • CY8CKIT-062S4 Pioneer kit from Infineon is an ultra-low-power device specifically designed for battery-operated analog sensing applications based on a 150 MHz Cortex-M4 CPU coupled to a 100 MHz Cortex-M0 for supporting low-power operations. (PR #60413)
  • NXP VMU RT1170 is now supported. In case you didn’t know, VMY stands for Vehicle Management Unit — think rugged and wide range of temperatures supported, and tons of onboard sensors: IMUs, barometer, magnetometer, GNSS module, … And, of course, it supports CAN bus! (PR #61192)
  • Google Twinkie is a dongle for, among other things, monitoring USB Power Delivery traffic. Twinkie V2 is now supported in Zephyr. (PR #54286)
  • The Intel Agilex5 FPGA platform is now supported. (PR #61192)
  • The R8A77951 and R8A77961 SoC series from Renesas are now supported, with added support for the H3ULCB and R-CAR Salvator XS M3 boards. (PR #57172)

Shields

Semtech SX1276MB1MAS LoRa shield.
  • The Semtech SX1276MB1MAS LoRa shield is an Arduino compatible shield based on the SX1276 LoRa transceiver from Semtech. Now supported! (PR #59889)

Drivers

  • New ADC driver added for Silicon Labs Gecko Series 1 (EFM32). (PR #60002).
  • New Ethernet driver added for STM32 H573I DK. (PR #60152)
  • USB-UDC is now supported for STM32 MCUs. (PR #53408)
  • Adds drivers for pwm on xmc4xxx using Capture Compare Unit 4 (CCU4)
  • Initial support for Infineon CAT1 counter driver.(PR #59626)
  • New NPCX flash driver for Nuvoton SoCs. (PR #60024)
  • New Andes qspi-nor flash driver means that you can now enjoy the ability to use flash memory on the Andes ADP-XC7K AE350 board. (PR #58718)

Display

  • A new auxiliary display driver has been added, namely the PTC PT6314 VFD controller. (PR #59728)
  • The Rocktech RK055HDMIPI4M MIPI Display is a 5.5 inch, 720x1280px TFT display + capacitive touch panel and can now be used as a Zephyr shield with NXP boards featuring a 40-pin FPC connector. (PR #55493)
G1120B0MIPI smartwatch display – Credit: NXP
  • Any wearable geeks out there? The G1120B0MIPI smartwatch display from NXP is now supported, also bringing support for the RM67162 display controller that it includes. Similar to the Rocktech display above, it is available as a Zephyr shield. (PR #57578)

Sensors

  • BMI08x IMU sensors from Bosch Sensortec are now supported. (PR #51545)
  • Added support for the Isentek IST8310 3-axis magnetic sensor. (PR #60639)
DFRobot A01NYUB distance sensor
  • DFRobot A01NYUB distance sensor, is now supported. It is a waterproof ultrasonic sensor module which can measure distance in the 28-750cm range with 1mm of resolution. (PR #58377).
  • ICM42688 motion sensor now has an emulated version in-tree. (PR #61051)
  • Existing TI LP503x LED driver has been extended to now support all variations of LP50xx devices. (PR #59852)

Bluetooth

  • New samples are available for the TMAP (Telephony and Media Audio Profile) broadcast functionality, more specifically Broadcast Media Sender and Broadcast Media Receiver.
  • Added support for advanced settings for QoS of isochronous channels. (PR #53945)
  • Common Audio Profile shell now allows to start specific audio configurations based on the BAP specification. (PR #58914)

Miscellaneous

  • TrustedFirmware-M (TF-M) version upgraded to 1.8. (PR #60226)
  • There is now an MCUmgr and a Simple Management Protocol (SMP) client. (PR #56934)

A big thank you to the 48 individuals who had their first pull request accepted since last time I posted, 💙 🙌: @dbongartz, @KyraLengfeld, @lutb-ot, @DaWei8823, @HoZHel, @rnpnr, @supcik, @xqinx, @TimMThomas, @joeker64, @bdmendes, @benner, @dluke62, @JDuchniewicz, @kobelev-dev, @mfikes, @shaggygi, @wsipak, @KarthikL1729, @Dalachowsky, @Crzyrndm, @valentinkorenblit, @avolkov-1221, @wangwillian0, @ggrs, @gdengi, @radsemijmitchell, @man-gc, @Flameeyes, @janhenke, @rubienr, @deining, @kmeinhar, @slpp95prashanth, @msobkowski, @vdsh-sc, @lawrencek52, @napl-nordic, @mbolivar-ampere, @aronlander-pe, @konradderda, @chencaidy, @MarGasiorek, @MarcelKr, @PetervdPerk-NXP, @ioannis-karachalios, @antoinebout0, @dey-r.

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 previous issues of the Zephyr Weekly Update:

Categories
IoT Zephyr

Zephyr Weekly Update – Introducing ACPI support

There’s no such thing as summer holidays for the Zephyr community, it would seem. It’s very nice to see ACPI support being introduced this week, and there’s also intereting work being done on making it easier and more flexible to run Zephyr applications natively on your development machine.

This week, I would also like to point out the Github issues that are explicitly labelled as “good first issues”. I am highlighting some of these in the article below, but generally speaking I would really encourage you to regularly check them out, as your first contribution to Zephyr might be lying there 🙂 Also, if you’re a maintainer, a kind reminder that there are probably many issues opened in your area of expertise that could be good ones for newcomers, so don’t forget to tag them as part of bug triaging!

ACPI Support

One of the biggest changes this week is the addition of initial support for the ACPI (Advanced Configuration and Power Interface) standard.

The ACPI standard has been around for over 25 years and provide a hardware abstraction layer to help with power management, auto configuration, and status monitoring of peripherals.

The new implementation is using the ACPICA open source project, and allows to discover and configure hardware components at run-time, perform power management (e.g. putting unused hardware components to sleep), and perform auto configuration tasks. You can check out the documentation of the new ACPI API here. (PR #56347)

Native simulator

Another significant change is the introduction of a new “virtual” board to be used for simulation purposes, the native simulator, a.k.a. native_sim. (PR #59302)

You may be already familiar with the native_posix which allows you to run Zephyr natively on e.g. your local Linux machine. It’s very complete, and allows to go as far as simulating a display, a real-time clock, etc. which is very handy in situation where you don’t need (or sometimes can’t) test against real hardware.

This new “native simulator” is meant to make it easier to run against a custom libC (where native_posix would typically use the host’s libC). It also makes it possible to simulate assymetric multiprocessing scenarios (several simulated MCUs, each running their own Zephyr instance).

SoCs

  • Support has been added for STM32L451 SoC series from STMicroelectronics. (PR #59763)
  • PR #58332 added support for the NXP MR-CANHUBK3 (see below), but also worth noting that it also brought support for the entire NXP S32K344 SoC family, a series of qualified MCUs based on the Arm Cortex-M7 and aimed at safety-critical automotive and industrial applications.

Boards & shields

Seeed Studio XIAO ESP32 S3
Seeed Studio XIAO ESP32 S3
  • A new board from Seeed Studio has been added, the XIAO ESP32S3 (PR #59732). It is built around Espressif’s 240MHz Xtensa 32-bit LX7 dual-core processor, and supportsWiFi and BLE 5.0. And it’s super tiny!
    I am really excited about this one since this board also has a “Sense” variant that comes with a 1600x1200px camera, a micro-SD card reader, and a digital microphone, for only a few dollars more. In fact, since the initial contribution did not include the XIAO ESP32S3 Sense variant, I would love for someone to contribute it! In fact, I just opened an issue to track this, and I would recommend you look into it as your first potential contribution to Zephyr 😉
NXP MR-CANHUBK3
NXP MR-CANHUBK3
  • The NXP MR-CANHUBK3 board is an evaluation board for mobile robotics applications (ex. autonomous mobile robots and automated guided vehicles for which support was added this week. (PR #58332)
  • All the STM32 Nucleo-64 boards from STMicroelectronics feature a Morpho connector—think of it as an Arduino connector on steroids, as it has more pins and allows to access all the I/Os of the MCU.
    PR #59754 adds the nexus node definitions for the 15 Nucleo-64 kits supported in Zephyr, making it easier to directly manipulate the Morpho pin headers (for example ST_MORPHO_CN7_25 on the NUCLEO-L476RG would be equivalent to pin 14 on GPIO port C).
Arduino Uno Click Shield from MIKROE
Arduino Uno Click Shield from MIKROE

Drivers

  • New driver for Texas Instruments TLA2021, a cost-optimized, ultra-small, 12-Bit ADC typically used for system-monitoring applications (ex. battery voltage supervision, current sensing, …). (PR #57861)
  • Flash SPI NOR driver now supports device power management. (PR #59647)
  • New counter driver for Renesas SmartBond general purpose timers. (PR #56758)

Bluetooth

  • Kconfig options for Bluetooth Mesh have been reorganized to be easier to manipulate. Among other things, options are now grouped according to the protocol layer (network, transport, etc.) they are related to. (PR #59909)
  • A new optional module allows to collect statistics related to mesh frames. It can be helpful for measuring performance, packet loss, etc. The module can be turned on via BT_MESH_STATISTIC Kconfig option. It also comes with shell commands to help access the statistics interactively. (PR #59962)
  • A new shell module has been added for TMAP (Telephony and Media Audio Profile). (PR #58915)

Miscellaneous

  • Our documentation website docs.zephyrproject.org provides seamless integration of Doxygen documentation in the general documentation pages. This used to be provided by the breathe Python library, but as of this week we’ve switched to using docleaf, an improved and faster alternative to the former, made by its original author. One of the biggest improvement is around incremental builds, as rebuilding the documentation when only a few things have been changed is now much faster! Thanks Michael for this awesome first contribution to the project!
  • A lot of work is being done on the POSIX front to get to a point where the PSE52 profile is fully supported for the upcoming LTS v3 release. There are dozens of open issues flagged as “Good First Issues” that I encourage you to look at if you’d like to contribute to Zephyr but don’t know where to start. Plus, you will likely learn a few things about threads, semaphores, and more! 🙂

A big thank you to the 14 individuals who had their first pull request accepted this week, 💙 🙌: @najumon1980, @robertoxmed, @mku514k, @jaiiarora, @andy9a9, @Maxwelltoo, @michaeljones, @jasperjonker, @EricNRS, @bperseghetti, @Chenhongren, @faloj, @MrMarteng, and @ithinuel.

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 previous issues of the Zephyr Weekly Update:

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: