Embedded Rust: Einrichten vom Raspberry Pi Pico zur Entwicklung mit Rust
Rust wird seit einiger Zeit heiss diskutiert, auch in der Embedded-Welt. Es ist eine Sprache, die Performance-Mässig in etwa mit C/C++ mithalten kann. Nur ist sie zusätzlich modern und so konzipiert, dass Entwickler gezwungen sind, Code so sicher wie möglich zu schreiben. Beispielsweise sind unerlaubte Speicherzugriffe wesentlich unwahrscheinlicher, als bei C/C++. Nun, wenn Rust auch auf Embedded Geräten eingesetzt werden kann, wäre es da nicht schön, Rust auf einem Mikrocontroller auszuprobieren?
Ich zeige euch in diesem Artikel, wie man mit etwa 15 CHF Budget bei einem regnerischen Sonntagnachmittag Rust vollständig auf einem Mikrocontroller zum Laufen bringt, inklusive Debugging. Wenn alles einwandfrei läuft, ist mit einem Zeitaufwand von ca. 2 -3 Stunden zu rechnen. Verwendet wird dafür das Raspberry Pi Pico, das erste Mikrocontrollerboard von der Raspberry Pi Foundation, mit hauseignem Controller, dem RP2040.
Hardware und Tools
- Pico: Als Target wird wie oben erwähnt das Raspberry Pi Pico verwendet. Dabei handelt es sich um ein Mikrocontrollerboard, das perfekt in das Portfolio von Rapsberry Pi passt: preiswert, gut dokumentiert, grosse Community, relativ simpel, opensource. Als Debug-Probe verwenden wir: ebenfalls ein Pico. Dazu gibt es eine Firmware, die das Board mit sehr kleinem Aufwand in eine SWD Debug-Probe “verwandelt”. Benötigt werden also zwei Boards, die je ca. 5 – 7 CHF kosten.
- Rust: Obwohl dieser Blog zeigt, wie die Boards eingerichtet werden, um Rust darauf zu entwickeln, steht die Sprache selbst nicht im Vordergrund. Es wird also nicht auf die Eigenschaften der Sprache im Embedded-Bereich eingegangen. Wenn man mehr darüber wissen will, empfiehlt sich ein Blick in “The Embedded Rust Book” (https://docs.rust-embedded.org/book/). Rust wird installiert und Cargo als Packetmanager verwendet. Wir binden den Hardware Abstraction Layer für das Pico als Paket ein und verwenden diesen in einem Beispielprojekt.
- OpenOCD: Der grösste Teil des Zeitaufwands muss in OpenOCD investiert werden. Für die Kommunikation zur Debug-Probe wird OpenOCD verwendet. OpenOCD unterstützt bis jetzt den RP2040 offiziell nicht. Deshalb muss ein eigener Build davon gemacht werden, von Raspberry Pi wird dazu der Quellcode zur Verfügung gestellt.
- Die Arm GNU Toolchain wird für einzelne Build Schritte verwendet.
- Als Entwicklungsumgebung verwenden wir Visual Studio Code.
- Das ganze Setup wird für das Windows Betriebssystem gezeigt. Auf Linux Distributionen und macOS ist das Setup ähnlich, einzelne Schritte vereinfachen sich jedoch.