electrodyssey.net

Odyssey of Electronics and Computers

NASR-M board bring-up and Zephyr for a base controller

February 06, 2026 — Nazim

Zephyr firmware for the base controller is now working. I’ve spent some time setting up a device tree overlay to detect the I2C mux and the underlying devices. It works amazingly! The first thing I did after the firmware compiled initially was a shell module. Actually, it was one of the reasons behind switching to Zephyr. You can access the shell via UART, USB, or even Telnet. It’s extendable with user commands, supports tab completion, and offers many debugger features, such as I2C discovery and memory dumps. Zephyr has many advanced features, such as different schedulers, power management, and an IP stack, but what makes it attractive to me (besides the Apache 2 license) is its extensibility and hundreds of device drivers. It feels like moving away from Borland CRT to Turbovision back in the days. I was able to hook up a temperature sensor via the I2C mux with absolutely no effort. Nice, isn’t it?


Caught a couple of new bugs: The MCU UART was not transmitting to the DB-9 connector because the TRS3221E UART transceiver was entering suspend mode. Luckily, the workaround was simple. I just had to supply a positive voltage to the FORCEOFF and FORCEON pins simultaneously, as clearly described in the datasheet, but I somehow missed that. A quick solder jumper did the job. Lessons learned - RTFD.

I2C EEPROM SDA & SCL pins are connected in reverse order. I can live with no base controller EEPROM at this point.

Started the ERRATA file to log those.

Tags: nasr-m, zephyr