Table of Contents

Bootloader Katapult

Katapult (ehemals CanBoot) wurde ursprünglich entwickelt, um über CAN-Bus Klipper Updates einzuspielen. Es wurde aber erweitert um die Möglichkeit auch mittels USB bzw. Seriell zu flashen. Somit ist Katapult ein sehr universell einsetzbarer Bootloader. Er ermöglicht ein Firmware Update (wie z.B. Klipper), ohne dass man am Druckerboard selber Hand anlegen muss. Also kein SD-Karten jonglieren, keine Jumper stecken, keine Taster drücken.

Das Video / diese Anleitung befasst sich nur mit STM32, RP2040 und da auch nur mit USB und CAN Bus! Serielles Flashen sollte am Ende ähnlich funktionieren wie die USB Variante. Die LPC176x Controller werden hier nicht behandelt da sie kaum noch Verwendung finden.

Hinweise:
1. SBC meint im folgenden Text immer Single Board Computer und dürfte bei den meisten ein Raspberry Pi sein.
2. Wenn ihr Katapult installiert, wird der Original Bootloader gelöscht!

Github Repo zu Katapult
https://github.com/Arksine/katapult

YouTube Video #66


Warum Katapult?

Hardware erkennen

Man sollte im Vorfeld zwei wichtige Informationen ermitteln. Welcher Controller wird verwendet (und welche Einstellungen brauche ich dafür) und ob es ein Board mit oder ohne DFU Möglichkeit ist (DFU betrifft nur STM32 Boards).

Controller

DFU Möglichkeit

Katapult einrichten

Hinweis
Kompiliert man für CAN Bus sollte man vorher die CAN Bus Geschwindigkeit auslesen:
cat /etc/network/interfaces.d/can0

Katapult flashen

Im Folgenden wird beschrieben, wie der Bootloader Katapult auf den Controller geflasht wird.
Das Flashen von Klipper erfolgt im nächsten Schritt!

Hinweise
1. Man sollte nach dem Flashen von Katapult das Board 1x resetten.
2. Katapult wird immer über einen der folgenden Wege geflasht (USB, SD, ST-Link). Nur die eigentliche Firmware (z.B. Klipper) kann später über den CAN Bus geflsht werden!

STM32

Bei den STM32 Controllern gibt es drei brauchbare Wege, um Katapult zu flashen. Der einfachste Weg wäre über den DFU Modus, der aber leider nicht bei allen Boards genutzt werden kann (siehe dazu Hauch Hardware erkennen → DFU Möglichkeit). Installation mittels SD-Karte wäre die zweite Option die (bis auf die SD-Karte) ohne extra Hardware auskommt. Die letzte Option wäre über einen ST-Link Programmieradapter.

DFU-Mode

Hinweis
Funktioniert nur über USB !

Wie schon erwähnt muss das Board dafür über einen extra Jumper (selten auch ein Taster) verfügen. Hier ein Beispiel vom Spider Board:

Dieser Jumper legt 3,3V auf den BT0 Pin. Das Board geht damit nach einem Reset in einen speziellen DFU Modus und mittels dfu-util kann dann Katapult geflasht werden.
Überprüfen kann man das mit dfu-util -l. Wenn das Board per USB z.B. an eurem Pi hängt, kriegt ihr dann folgende Ausgabe:

pi@Pi3Test:~/katapult $ dfu-util -l
dfu-util 0.9
 
Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2016 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/
 
Found DFU: [0483:df11] ver=2200, devnum=29, cfg=1, intf=0, path="1-1.4", alt=3, name="@Device Feature/0xFFFF0000/01*004 e", serial="STM32FxSTM32"
Found DFU: [0483:df11] ver=2200, devnum=29, cfg=1, intf=0, path="1-1.4", alt=2, name="@OTP Memory /0x1FFF7800/01*512 e,01*016 e", serial="STM32FxSTM32"
Found DFU: [0483:df11] ver=2200, devnum=29, cfg=1, intf=0, path="1-1.4", alt=1, name="@Option Bytes  /0x1FFFC000/01*016 e", serial="STM32FxSTM32"
Found DFU: [0483:df11] ver=2200, devnum=29, cfg=1, intf=0, path="1-1.4", alt=0, name="@Internal Flash  /0x08000000/04*016Kg,01*064Kg,03*128Kg", serial="STM32FxSTM32"

Anschließend könnt ihr Katapult flashen:
dfu-util -R -a 0 -s 0x08000000:mass-erase:force -D ~/katapult/out/katapult.bin
Jetzt wird erst der Speicher gelöscht und anschließend Katapult geflasht.

Nicht vergessen, den Boot0 Jumper wieder zu entfernen!

SD-Karte

Wenn euer Board keinen DFU Jumper hat, dann könnt ihr Katapult auch über die SD-Karte flashen. Aber um es gleich vorwegzunehmen … Manchmal braucht man bei der Methode Geduld und innere Ruhe ;-) Denn es wäre nicht das erste Mal, dass diese Methode mehr schlecht als recht funktioniert …

Man merkt schon an der Länge der Anleitung, dass Flashen über SD-Karte ein Graus ist, den man - wenn Katapult einmal läuft - nie wieder braucht :-)

Für diese Variante wird ein ST-Link benötigt. Das ist ein Programmieradapter für STM32 Controller. Man bekommt ihn als China Clone bei eBay oder Amazon und die Teile sehen so aus:

Wenn gar nichts mehr funktioniert, bekommt man mit so einem Adapter fast jeden STM32 wieder flott :-)

Nicht vergessen, die ST-Link Verkabelung wieder zu entfernen!

RP2040

Bei einem RP2040 Board ist die Welt deutlich einfacher :-)

Katapult checken

Ihr könnt relativ einfach überprüfen, ob das Flashen von Katapult geklappt hat.

USB

CAN

Hinweis
Die folgenden Schrotte setzen natürlich voraus, das der CAN Bus korrekt im Vorfeld eingerichtet wurde!

Wenn das Board über CAN verbunden ist, dann kann man mit den folgenden Schritten prüfen, ob Katapult geflasht wurde:

Klipper flashen

Klipper kann jetzt über USB bzw. über CAN auf das Druckerboard geflasht werden.

USB

Hinweis
In der Original Anleitung soll das Klipper flashen so funktionieren:
/usr/bin/python3 ~/katapult/scripts/flashtool.py -d /dev/ttyACM0
Das klappt aber nicht, weil der Bootloader nicht aktiviert wird. Also muss man entweder den Katapult Bootloader über 2x schnelles Reset drücken manuell aktivieren oder über dieses Kommando:
cd ~/klipper/scripts && /usr/bin/python3 -c 'import flash_usb as u; u.enter_bootloader("/dev/ttyACM1")'
Deshalb lieber gleich die make flash … Variante verwenden ;-)

CAN

Die folgenden Kommandos dienen nur als Referenz