What we've been reading in February (2021)

Here are the articles, videos, and tools that we’ve been excited about this February.

We hope you enjoy these links, and we look forward to hearing what you’ve been reading in the comments or on the Interrupt Slack.

Articles & Learning

  • ESP32 Secure firmware update Over-The-Air (OTA) by Refik Hadzialic
    A nice end-to-end prototype of updating the ESP32 with an NGINX server, covering all the details from DNS and SSL certificates to the required ESP32 firmware modifications.
  • Explaining Changes post-firmware 2019.16 Regarding Range Loss by wk057
    An interesting read that I found crawling Hackernews about why some Tesla battery packs would lose range while the car was sitting idle. Long story short, Tesla had a hardware bug in their battery management system modules, and there were able to perform iterative OTA updates to the car to cleverly mitigate an otherwise drastic issue.
  • Process isolation with Arm FuSa runtime system by Vladimir Marchenko
    An overview of Arm’s FuSA (Functional Safety runtime System). Not entirely sure about the quality or usability of the system, but I appreciate the modern features they are providing! Process isolation, task watchdogs relevant, and better fault handling. Happy to see these features are becoming commonplace.
  • Testing a Hardware Abstraction Layer (HAL) by Ferrous Systems
    An introduction to testing a HAL using Embedded Rust! The post covers testing GPIO’s, a UART, and more. Exciting to see Ferrous Systems wrangling this difficult problem.
  • Dumb Embedded System Mistakes: Running The Wrong Code by Steve Branam
    Steve talks about a common mistake developers make…loading the wrong code on the device. The mitigation strategies taken involve embedded and surfacing versions and tags and making sure developers see them.
  • How to use custom partition tables on ESP32 by Pedro Minatel
    An overview of how to partition the flash on an ESP32 to allow for multiple OTA images and other information that you want to keep across reboots, including an example project that you can easily load onto your own board.
  • Emprog ThunderBench - Linker Script Guide
    One of the better linker script guides that we’ve come across.
  • Unnamed Reverse Engineering Podcast
    Can’t believe we haven’t linked this podcast before! Alvaro and Jen talk to various people broadly about reverse engineering and firmware.
  • Teardown of a quartz crystal oscillator and the tiny IC inside by Ken Shirriff
    Ken breaks down exactly what is happening underneath the covers of an oscillator.
  • Mars Helicopter Technology Demonstrator by J. (Bob) Balaram
    A deep-dive into the technical details of the Mars Helicopter that just landed in the last month. It runs embedded Linux and uses Zigbee. So cool.
  • Tutorial - Write a Shell in C by Stephen Brennan
    Stephen covers how one can build a shell from scratch, which, brings me back to the days of a college computer science project. This could be useful for when you inevitably have to include a minimal shell into a new firmware project.
  • Creating GUIs with LVGL
    How to build a GUI using LVGL and an Arduino Portenta H7 connected to a display with HDMI.
  • A Practical Approach To Attacking IoT Embedded Designs (Pt. 1) by Ruben Santamarta
    Ruben covers various security vulnerabilities in popular RTOS’s and libraries, such as stack and buffer overflows and memory corruption. Do note that all of these issues were patched at the time the article was written.

Neat Projects

  • InfiniTime - Pinetime Firmware
    We’ve posted the Pinetime smartwatch here before, but never the InifiTime firmware itself. The firmware now has call notifications, vibrations, heart rate reading capabilities, and LVGL v7. It’s really starting to take shape!
  • Whitefield
    “Whitefield provides a simulation environment for sensor networks by combining realistic PHY/MAC layer simulation with the native mode use of popular IoT stacks/OSes such as Contiki/RIOT/OpenThread/Zephyr/FreeRTOS/OT-RTOS.”
  • Wireguard-lwIP
    A WireGuard implementation for lwIP written in C and optimized for embedded systems.
  • theacodes/Structy
    Don’t really want to try to paraphrase the description. “Structy is an irresponsibly dumb and simple struct serialization/deserialization library for C, Python, and vanilla JavaScript”. Think Protobuf and friends are too complicated? Check this out.

Random!

  • Name that Ware (Blog) by bunnie
    A series, “Name that Ware”, in which bunnie posts an image of a circuit board or inside of a device and readers get to guess what the picture is taken of. The articles on the blog date back to 2015, but it seems to have been taking place for much longer.
  • Opinions after a decade of professional software engineering by Stargirl Flowers
    It’s always helpful to hear from experienced engineers about what they’ve learned and what they would do differently. This time, Stargirl. My favorite quote: “Code isn’t even close to [the] most important thing about software engineering.”
  • Procedure Call Standard for the Arm® Architecture (Github)
    Unbeknownst to us at Memfault, Arm recently moved their ABI spec to Github!
Tyler Hoffman has worked on the embedded software teams at Pebble and Fitbit. He is now a founder at Memfault.