Klipper Firmware Update – Schritt-für-Schritt-Anleitung (2026)
Alle MCUs synchron flashen: Octopus Pro, Eddy, CAN-Toolboard und Raspberry Pi
Vollständige Anleitung zum Aktualisieren der Klipper-Firmware auf allen Komponenten – am Beispiel eines BTT Octopus Pro, BTT Eddy USB, STM32G0B1-Toolboard via CAN-Bus und Raspberry Pi als Host.
Bild generiert mit KI
Warum ein vollständiges Firmware-Update nötig ist
Klipper besteht aus mehreren Komponenten: der Host-Software auf dem Raspberry Pi und der Firmware auf jeder angeschlossenen MCU. Bei einem Update müssen alle MCUs exakt die gleiche Firmware-Version erhalten. Stimmen die Versionen nicht überein, quittiert Klipper den Dienst mit einem gefürchteten „Protocol Error”.
Diese Anleitung zeigt den kompletten Ablauf am Beispiel eines typischen Setups:
- Mainboard: BTT Octopus Pro (STM32F429) via USB
- Probe: BTT Eddy USB (RP2040) via USB
- Toolboard: EBB / SB2209 o. ä. (STM32G0B1) via CAN-Bus
- Host-MCU: Raspberry Pi (Linux process)
Tipp: Falls dein Setup andere Hardware nutzt, passe die Prozessor- und Interface-Einstellungen entsprechend an – die Grundstruktur bleibt identisch.
Schritt 1: Host-System (Raspberry Pi) aktualisieren
Bevor die Hardware geflasht wird, muss die Klipper-Software auf dem Pi aktuell sein. Immer zuerst den Host, dann die MCUs.
1.1 Klipper-Update einspielen
cd ~/klipper
git pull
sudo service klipper restart
1.2 Linux-MCU ([mcu rpi]) flashen
Viele Setups nutzen den Pi selbst als MCU – z. B. für ADXL345-Beschleunigungssensoren oder GPIO-Steuerung. Diese MCU muss ebenfalls neu kompiliert werden, sonst kommt es zum Protocol-Error.
cd ~/klipper
make menuconfig
menuconfig-Einstellungen:
| Einstellung | Wert |
|---|---|
| Micro-controller Architecture | Linux process |
Das ist die einzige Option – es gibt hier keine weiteren Untermenüs. Bestätigen und speichern.
make clean && make
make flash
Der Pi flasht sich damit selbst. Kein Neustart nötig, Klipper wird automatisch die neue Version laden.
Schritt 2: Mainboard flashen (BTT Octopus Pro – STM32F429)
Das Octopus Pro ist per USB mit dem Pi verbunden. Es nutzt einen STM32F429-Chip mit 32 KiB Bootloader.
2.1 menuconfig konfigurieren
cd ~/klipper
make menuconfig
menuconfig-Einstellungen im Detail:
| Einstellung | Wert | Erklärung |
|---|---|---|
| Micro-controller Architecture | STMicroelectronics STM32 | Die STM32-Familie von ST |
| Processor model | STM32F429 | Der Chip auf dem Octopus Pro. Beim Octopus V1.1 wäre es z. B. STM32F446 |
| Bootloader offset | 32KiB bootloader | Der Octopus Pro hat einen 32 KiB Bootloader. Falscher Offset = Board bootet nicht! |
| Clock Reference | 8 MHz crystal | Externer Quarz auf dem Board. Manche Boards nutzen 12 MHz – Board-Dokumentation prüfen |
| Communication interface | USB (on PA11/PA12) | Die USB-Pins des Octopus Pro. Andere Boards können andere Pins nutzen (z. B. PA9/PA10) |
Warum ist der Bootloader-Offset wichtig? Der Bootloader belegt die ersten Bytes des Flash-Speichers. Klipper muss wissen, ab welcher Adresse die eigentliche Firmware beginnt. Ein falscher Offset überschreibt den Bootloader und das Board startet nicht mehr (Rettung dann nur per DFU oder ST-Link).
2.2 Kompilieren und flashen (SD-Karten-Methode)
make clean && make
Die fertige Firmware liegt unter out/klipper.bin.
Flash-Vorgang:
out/klipper.binvom Pi auf deinen PC kopieren (z. B. per SCP/SFTP).- Die Datei in
firmware.binumbenennen – der Name ist wichtig! - Auf eine FAT32-formatierte SD-Karte kopieren (max. 32 GB empfohlen).
- SD-Karte in den Slot am Octopus stecken.
- Reset-Knopf am Board drücken (oder Stromversorgung kurz trennen).
- Ca. 5 Sekunden warten, dann SD-Karte prüfen.
Erfolgskontrolle: Die Datei auf der SD-Karte heißt jetzt FIRMWARE.CUR statt firmware.bin. Das bestätigt, dass der Bootloader die Firmware geflasht hat.
Alternativ: Du kannst auch direkt per USB flashen, wenn du die serial-ID kennst:
bash make flash FLASH_DEVICE=/dev/serial/by-id/usb-Klipper_stm32f429xx_...Die SD-Methode ist aber am zuverlässigsten und funktioniert auch bei korrupter Firmware.
Schritt 3: Probe flashen (BTT Eddy USB – RP2040)
Der BTT Eddy ist ein induktiver Probe mit eigenem RP2040-Chip und permanenter USB-Verbindung. Auch er braucht die passende Klipper-Firmware.
3.1 menuconfig konfigurieren
cd ~/klipper
make menuconfig
menuconfig-Einstellungen im Detail:
| Einstellung | Wert | Erklärung |
|---|---|---|
| Micro-controller Architecture | Raspberry Pi RP2040 | Der Chip im Eddy (und vielen anderen Boards wie z. B. dem Pi Pico) |
| Bootloader | No bootloader | Der RP2040 hat keinen permanenten Bootloader im klassischen Sinne – er wird im UF2-Boot-Modus geflasht |
| Flash chip | W25Q080 with generic 03h SPI | Standard-Flash-Chip auf dem Eddy. Bei den meisten RP2040-Boards korrekt |
| Communication interface | USB | Der Eddy hängt dauerhaft per USB am Pi |
Warum „No bootloader”? Beim RP2040 wird die Firmware direkt in den Flash geschrieben. Der Boot-ROM des Chips übernimmt die Bootloader-Funktion – du musst nur den Boot-Modus manuell aktivieren.
3.2 Kompilieren und flashen
make clean && make
Boot-Modus aktivieren:
- USB-Kabel vom Eddy trennen (oder am Pi abziehen).
- Boot-Knopf am Eddy gedrückt halten.
- USB-Kabel wieder einstecken (Knopf weiter halten).
- Knopf loslassen – der Eddy meldet sich jetzt als USB-Bootloader-Device.
make flash FLASH_DEVICE=2e8a:0003
Die ID 2e8a:0003 ist die USB-ID des RP2040 im Boot-Modus. Falls unsicher:
lsusb | grep -i "2e8a"
Nach dem Flash startet der Eddy automatisch mit der neuen Firmware.
Schritt 4: Toolboard flashen (STM32G0B1 via CAN-Bus)
Das Toolboard (z. B. BTT EBB36/42, SB2209, Mellow FLY-SB2040) hängt am CAN-Bus. Hier muss die CAN-Bitrate exakt stimmen.
4.1 menuconfig konfigurieren
cd ~/klipper
make menuconfig
menuconfig-Einstellungen im Detail:
| Einstellung | Wert | Erklärung |
|---|---|---|
| Micro-controller Architecture | STMicroelectronics STM32 | STM32-Familie |
| Processor model | STM32G0B1 | Der Chip auf dem Toolboard. Beim EBB36 v1.2 z. B. auch STM32G0B1, ältere Versionen ggf. STM32F072 |
| Bootloader offset | No bootloader | Kein separater Bootloader – Klipper wird direkt geflasht. Falls Katapult installiert ist: 8KiB bootloader |
| Clock Reference | 8 MHz crystal | Standard bei den meisten STM32-Toolboards |
| Communication interface | CAN bus (on PB0/PB1) | Die CAN-Pins des Toolboards. Unbedingt im Schaltplan prüfen – falsche Pins = keine Kommunikation |
| CAN bus speed | 1000000 | Deine CAN-Bitrate. Muss auf allen CAN-Teilnehmern identisch sein! Übliche Werte: 250000, 500000, 1000000 |
CAN-Pins – häufige Boards: - BTT EBB36/42 v1.2: PB0/PB1 - BTT SB2209: PB0/PB1 - Mellow FLY-SB2040: Nutzt RP2040 mit eigener CAN-Konfiguration
Falsche Pins sind der häufigste Fehler beim CAN-Setup! Immer die Pin-Belegung des konkreten Board-Revisions prüfen.
Zur CAN-Bitrate: Alle Geräte am CAN-Bus müssen dieselbe Bitrate verwenden – das Toolboard, das Host-Interface (
can0am Pi) und ggf. ein CAN-Bridge-Board. Typische Werte sind 500000 (500k) oder 1000000 (1M). Höhere Bitraten erlauben mehr Durchsatz, erfordern aber kurze, sauber terminierte Leitungen.
4.2 Kompilieren und flashen
make clean && make
Empfohlen: Flash über USB (Rettungsweg)
Das Flashen über CAN funktioniert nicht immer zuverlässig – insbesondere ohne Katapult-Bootloader. Schließe das Toolboard daher einmalig per USB direkt an den Pi an:
- CAN-Kabel vom Toolboard trennen.
- USB-Kabel zwischen Toolboard und Pi anschließen.
- Serial-ID ermitteln:
ls /dev/serial/by-id/*
Beispielausgabe:
/dev/serial/by-id/usb-Klipper_stm32g0b1xx_12345678-if00
- Flashen:
make flash FLASH_DEVICE=/dev/serial/by-id/usb-Klipper_stm32g0b1xx_DEINE_ID
- USB-Kabel trennen, CAN-Kabel wieder anschließen.
Alternativ: Flash über CAN (mit Katapult/CanBoot-Bootloader)
Falls Katapult auf dem Toolboard installiert ist, kannst du direkt über den CAN-Bus flashen:
python3 ~/katapult/scripts/flash_can.py -i can0 -u DEINE_CAN_UUID -f ~/klipper/out/klipper.bin
Die CAN-UUID findest du mit:
~/klippy-env/bin/python ~/klipper/scripts/canbus_query.py can0
Zusammenfassung: Beispiel-Setup
| Komponente | Chip | Verbindung | Identifikation |
|---|---|---|---|
| BTT Octopus Pro | STM32F429 | USB | /dev/serial/by-id/usb-Klipper_stm32f429xx_... |
| BTT Eddy USB | RP2040 | USB | /dev/serial/by-id/usb-Klipper_rp2040_... |
| Toolboard (EBB/SB) | STM32G0B1 | CAN (1M) | UUID (z. B. 5e654f097xxx) |
| Raspberry Pi | Linux | Intern | n/a |
Checkliste nach dem Flashen
1. Klipper-Dienst starten
sudo service klipper start
2. Firmware-Versionen prüfen
Öffne Mainsail oder Fluidd → Machine → System Information. Alle MCUs müssen die identische Versionskennung anzeigen, z. B.:
mcu: Klipper v0.13.0-xxx
mcu rpi: Klipper v0.13.0-xxx
mcu EBBCan: Klipper v0.13.0-xxx
mcu eddy: Klipper v0.13.0-xxx
Weicht eine Version ab, wurde diese MCU nicht korrekt geflasht.
3. CAN-Interface prüfen
ip -details link show can0
Erwartete Ausgabe:
can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UP ...
bitrate 1000000 sample-point 0.750
Falls can0 nicht aktiv ist, prüfe /etc/network/interfaces.d/can0:
allow-hotplug can0
iface can0 can static
bitrate 1000000
up ifconfig $IFACE txqueuelen 1024
Passe die bitrate an dein Setup an und starte das Interface neu:
sudo ifdown can0 && sudo ifup can0
4. Homing-Test
Führe G28 (Home All) aus – Finger am Not-Aus! So prüfst du, ob Endstops und Probe korrekt arbeiten.
5. Probe-Kalibrierung
Nach einem Firmware-Update können sich Offsets minimal ändern. Führe die Kalibrierung erneut durch:
PROBE_CALIBRATE
BED_MESH_CALIBRATE
Fehlerbehebung
| Problem | Ursache | Lösung |
|---|---|---|
| „Protocol Error” nach Update | Firmware-Versionen stimmen nicht überein | Alle MCUs auf identische Version flashen |
| CAN-Toolboard antwortet nicht | Bitrate stimmt nicht oder Interface ist down | ip link show can0 prüfen, Bitrate vergleichen |
SD-Karte: Datei bleibt firmware.bin |
Board hat nicht geflasht | Andere SD-Karte probieren, FAT32 formatieren, Reset erneut drücken |
make flash am RP2040 schlägt fehl |
Boot-Modus nicht aktiv | Knopf beim Einstecken gedrückt halten, lsusb prüfen |
make flash am Toolboard via USB: „No device found” |
Falscher Device-Pfad | ls /dev/serial/by-id/* erneut prüfen, USB-Kabel testen |
| Eddy liefert nach Update falsche Werte | Kalibrierung fehlt | PROBE_CALIBRATE und ggf. Eddy-spezifische Kalibrierung neu durchführen |
menuconfig Kurzreferenz
Zur schnellen Übersicht – alle vier Konfigurationen auf einen Blick:
Pi (Linux-MCU):
[*] Linux process
Octopus Pro (STM32F429):
[*] STMicroelectronics STM32
Processor: STM32F429
Bootloader: 32KiB bootloader
Clock: 8 MHz crystal
Interface: USB (on PA11/PA12)
Eddy USB (RP2040):
[*] Raspberry Pi RP2040
Bootloader: No bootloader
Interface: USB
Toolboard CAN (STM32G0B1):
[*] STMicroelectronics STM32
Processor: STM32G0B1
Bootloader: No bootloader
Interface: CAN bus (on PB0/PB1)
CAN speed: 1000000
Wenn alle Firmware-Versionen in Mainsail/Fluidd grün und identisch sind, läuft dein Drucker wieder synchron. Viel Erfolg beim Update!