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)
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 restart1.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 menuconfigmenuconfig-Einstellung:
- 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 flashDer 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.
Anzeige · Affiliate-Link – kaufst du darüber, erhalte ich ggf. eine Provision. Für dich ändert sich am Preis nichts.
2.1 menuconfig konfigurieren
cd ~/klipper
make menuconfigmenuconfig-Einstellungen im Detail:
- 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)
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 && makeDie 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.bin umbenennen – 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.
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 kannst du direkt per USB flashen, wenn du die serial-ID kennst:
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.
Anzeige · Affiliate-Link – kaufst du darüber, erhalte ich ggf. eine Provision. Für dich ändert sich am Preis nichts.
3.1 menuconfig konfigurieren
cd ~/klipper
make menuconfigmenuconfig-Einstellungen im Detail:
- Micro-controller Architecture: Raspberry Pi RP2040 – der Chip im Eddy (und vielen anderen Boards wie 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
- Communication interface: USB – der Eddy hängt dauerhaft per USB am Pi
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 && makeBoot-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:0003Die 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 menuconfigmenuconfig-Einstellungen im Detail:
- Micro-controller Architecture: STMicroelectronics STM32
- Processor model: STM32G0B1 – der Chip auf dem Toolboard. Ältere Versionen ggf. STM32F072
- Bootloader offset: No 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 – muss auf allen CAN-Teilnehmern identisch sein! Übliche Werte: 250000, 500000, 1000000
CAN-Pins häufiger Boards: BTT EBB36/42 v1.2 & SB2209 = PB0/PB1; Mellow FLY-SB2040 nutzt RP2040 mit eigener CAN-Konfiguration. Immer die Pin-Belegung der konkreten Board-Revision prüfen. Alle Geräte am CAN-Bus müssen dieselbe Bitrate verwenden (Toolboard, can0 am Pi, ggf. CAN-Bridge). Typisch 500000 oder 1000000.
4.2 Kompilieren und flashen
make clean && makeEmpfohlen: 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-if00Flashen, dann USB trennen und CAN-Kabel wieder anschließen:
make flash FLASH_DEVICE=/dev/serial/by-id/usb-Klipper_stm32g0b1xx_DEINE_IDAlternativ: 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.binDie CAN-UUID findest du mit:
~/klippy-env/bin/python ~/klipper/scripts/canbus_query.py can0Zusammenfassung: 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 start2. 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-xxxWeicht eine Version ab, wurde diese MCU nicht korrekt geflasht.
3. CAN-Interface prüfen
ip -details link show can0Erwartete Ausgabe (gekürzt):
can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UP
... bitrate 1000000 sample-point 0.750Falls can0 nicht aktiv ist, prüfe /etc/network/interfaces.d/can0:
allow-hotplug can0
iface can0 can static
bitrate 1000000
up ifconfig $IFACE txqueuelen 1024Passe die bitrate an dein Setup an und starte das Interface neu:
sudo ifdown can0 && sudo ifup can04. 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_CALIBRATEFehlerbehebung
| 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, 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 |
| Toolboard via USB: „No device found” | Falscher Device-Pfad | ls /dev/serial/by-id/* prüfen, USB-Kabel testen |
| Eddy liefert falsche Werte | Kalibrierung fehlt | PROBE_CALIBRATE und Eddy-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: 1000000Wenn alle Firmware-Versionen in Mainsail/Fluidd grün und identisch sind, läuft dein Drucker wieder synchron. Viel Erfolg beim Update!
Anzeige · Affiliate-Link – kaufst du darüber, erhalte ich ggf. eine Provision. Für dich ändert sich am Preis nichts.