Categories
IoT Zephyr

Zephyr Weekly Update – Spring boards!

Welcome to the Zephyr Weekly Update series covering the week of March 31-April 7, 2023. By now I am hoping many of you know the drill: I look at last week’s commits and GitHub activity to extract some of the things that I think you will not want to miss!

I am really happy to see the addition of a driver for the NXP SC18IM704 (read on in the Drivers section below)—not that I care about this chip specifically, but it is demonstrating some very interesting Zephyr capabilities.

New boards supported

It’s frankly impressive to see how many new boards get added each week. See for yourself:

phyBOARD®-i.MX 8M Mini
phyBOARD®-i.MX 8M Mini
  • The phyBOARD Polis from PHYTEC is a very beefy board powered by an i.MX8MM chip (i.e. a quad-core Cortex-A53 @ 1.6 GHz + a Cortex-M4 running at 400 MHz). The carrier board is equipped with a variety of connectors and interfaces for e.g. CAN FD, WLAN, etc. (see 180f1ffb5c and documentation page).
LoRa-STM32WL-DevKit
LoRa-STM32WL-DevKit
  • The LoRa-STM32WL-DevKit from OLIMEX is a LoRa/LoRaWAN developer kit with an interesting form factor, and the ability to run out of a AA battery. (29e78deb67 added support for new revisions of the board — rev. C and rev. D).
  • Lunar Lake is Intel’s next generation of microprocessors. Support has been added upstream for the audio DSP (ADSP) that can be found in the accompanying Tensilica-powered chipset. (f5728c298d, e2881fe61a).

Drivers

This week, as always, we have several new drivers joining the hundreds already available. I personally always learn a lot when skimming through those, and the first one below is a great example of what I mean by that!

  • The NXP SC18IM704 is a UART to I²C-Bus Bridge. I highly encourage you to check this driver out, even if you don’t care about this device in particular. It is a really great example of how powerful the Zephyr devicetree can be — the driver can be attached to an existing UART bus to expose nodes that effectively behave as an I2C controller (and GPIO too, since the SC18IM704 happens to have a couple). And as an application developer, you really won’t care about the “internal” UART-to-I²C ASCII-based protocol, you’ll just use the I²C API! (cd6fe580b0, 9b36e723f4).
  &uart0 {
    status = "okay";
    pinctrl-0 = <&uart0_default>;
    pinctrl-names = "default";
    sc18im704: sc18im704 {
      compatible = "nxp,sc18im704";
      status = "okay";
      target-speed = <115200>;
      reset-gpios = <&gpio1 15 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
      i2c_ext: sc18im704_i2c {
        compatible = "nxp,sc18im704-i2c";
        status = "okay";
        #address-cells = <1>;
        #size-cells = <0>;
      };
      gpio_ext: sc18im704_gpio {
        compatible = "nxp,sc18im704-gpio";
        status = "okay";
        gpio-controller;
        #gpio-cells = <2>;
        ngpios = <8>;
      };
    };
  };
  • I am always excited to see more display drivers being added. Did I mention how much I love embedded GUIs? The Orise Tech OTM8009A LCD panel driver from Orise Tech can now be used with Zephyr (84fc689d48). You’ll find 4.63″, 800×480px, 65K colors LCD panels using this controller for just a couple of US dollars on AliExpress — hard to beat!
  • Last week a new driver for emulating UARTs. This week a new emulated RTC driver made its premiere (ae36da516a), and it can already be used on the native_posix target.
  • The SBS Gauge driver keeps getting improved to implement more features from the SBS (Smart Battery Sytem) specification. This week, support for the “AtRate” properties has been added (9727cafb41). The idea is to be able to ask the fuel-gauge IC the estimated time at which the battery may be full/empty based on a specific charge/discharge current (the rate).
  • A new rtc.h RTC (real-time clock) API header has been added to standardize communication with real-time clocks (b557a1d711). The definition of the handlers one may want to use from user space (to be notified when an alarm expires, for example) has also been added.
STMicroelectronics B-LCD40-DSI1 shield
  • MIPI-DSI host controller (as found in e.g., STM32H7 series) driver has been added (06c58fdcc2). The MIPI-DSI (Display Serial Interface) controller provides a way to interface with serial displays using a reduced number of pins.

Samples

Lastly, some interesting updates to samples:


As always please feel free to jump in with your thoughts or questions in the comments below… and 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.

By Benjamin Cabé

Benjamin Cabé is a technology enthusiast with a passion for empowering developers to build innovative solutions. He has invented an award-winning open source and open hardware artificial nose that he likes to use as an educational platform for people interested in diving into the world of embedded development.
He is currently a Developer Advocate for the Zephyr Project at the Linux Foundation and lives near Toulouse, France, where he enjoys baking sourdough bread with the help of his artificial nose.

2 replies on “Zephyr Weekly Update – Spring boards!”

Awesome! As someone actively and heavily working with the SiLabs EFR32MG24 SoC series at my job, I’m excited about the support for this SoC!

Also, thanks for pointing out about the UART to I²C-Bus Bridge and how it is a good example about the device tree. I’ve had a hard time understanding it. Maybe because I haven’t used it, but anyway, it is good to know that this driver is a good example for it.

Thanks Manuel! It’s great to hear that the support for EFR32MG24 dropped in a timely fashion 🙂

For the UART-to-I²C driver I wouldn’t worry too much about not 100% understanding it at first sight, you can definitely start by simpler examples (+ you might not even need to write your own drivers in the first place, depending on your use case, so no need to have a “fear of missing out” :))

Cheers!

Leave a Reply

Your email address will not be published. Required fields are marked *