Reading bootloader versions in embedded Rust

Introduction It’s been well over a year (perhaps almost two even) since I implemented this, so unfortunately I’ve already forgotton most of the story around it. However, I remember it was a huge struggle so I’ve been meaning to write it up for a while in the hope that it might help others in the future. It’s also just a nice reference for my future self :) Anyway, we’ve recently starting shipping a product powered by embedded Rust and Embassy! Embassy includes a great bootloader, but it was not easy to find a way to read the bootloader version from the application, so in this post I’ll briefly document how that was achieved. ...

September 24, 2026 · 7 min · Gerhard de Clercq

Bare-metal Rust bootstrapped by C

Introduction As you might have noticed, Rust is already quite popular in the embedded space. And getting started with embedded Rust, even on a bare-metal level, isn’t all that difficult. However, I’m not a fan of the standard method as it has a bit too much magic for me. When it comes to embedded, I like to know exactly what is going on and that includes knowing the very first code which is run and “kicks off” the main code. As such, I have explored how to do this for the STM32F4-Discovery using C code which then fires up a Rust main function. In this blog post, I will give an overview of the process that I followed. ...

February 19, 2022 · 11 min · Gerhard de Clercq