USB-CAN bridge mode ยท 1Mbit ยท No separate CAN adapter required ยท Katapult bootloader
The BOOT pin is pulled HIGH during DFU mode. This pin is shared with the heater โ your heater will activate while in DFU mode. Remove 24V power before entering DFU mode on the EBB36 v1.1.
This applies to the v1.1 board only. The v1.2 does not have this issue. All other instructions are identical for both versions.
This guide covers setting up the MKS Monster8 v2 as a USB-CAN bridge โ it connects to the host computer via USB and acts as the CAN interface for toolhead boards like the EBB36. No separate USB-CAN adapter is required.
~/katapult/ wherever a guide says ~/CanBoot/. The output file is still named canboot.bin for legacy compatibility.sudo apt install git dfu-util
cd ~
git clone https://github.com/Arksine/katapult ~/katapult
pip3 install pyserial --break-system-packages
| Jumper | Action | Reason |
|---|---|---|
| USB Power (VUSB) | INSTALL | Powers the board from USB 5V for initial flashing โ no main power needed |
| CAN SELECT (ร2) | INSTALL in CAN position | Routes PB8/PB9 to the RJ12 CAN port. Must be in CAN position, not I2C position |
Connect via USB-C. Then: hold BOOT0, tap RESET, release BOOT0.
lsusb | grep "0483:df11"
# Expected: STMicroelectronics STM Device in DFU Mode
cd ~/katapult
make menuconfig
| Setting | Value |
|---|---|
| Micro-controller Architecture | STMicroelectronics STM32 |
| Processor model | STM32F407 |
| Bootloader offset | 32KiB bootloader |
| Clock Reference | 8 MHz crystal |
| Communication interface | CAN bus (on PB8/PB9) |
| CAN bus speed | 1000000 |
make clean && make
sudo dfu-util -a 0 -D ~/katapult/out/canboot.bin \
--dfuse-address 0x08000000:force:mass-erase:leave -d 0483:df11
dfu-util: Error during download get_status after "File Downloaded Successfully" is normal. The firmware flashed successfully.Double-tap the RESET button, then check:
lsusb
# Expected: ID 1d50:6177 OpenMoko, Inc. stm32f407xx
ls /dev/serial/by-id/
# Expected: usb-katapult_stm32f407xx_XXXX-if00
cd ~/klipper
make menuconfig
| Setting | Value |
|---|---|
| Enable extra low-level configuration options | Yes [*] |
| Micro-controller Architecture | STMicroelectronics STM32 |
| Processor model | STM32F407 |
| Bootloader offset | 32KiB bootloader |
| Clock Reference | 8 MHz crystal |
| Communication interface | USB to CAN bus bridge (USB on PA11/PA12) |
| CAN bus interface | CAN bus (on PB8/PB9) |
| CAN bus speed | 1000000 |
can0 interface on the host. It must be "USB to CAN bus bridge (USB on PA11/PA12)".make clean && make
Double-tap RESET to enter Katapult mode, then flash:
python3 ~/katapult/scripts/flash_can.py -d \
/dev/serial/by-id/usb-katapult_stm32f407xx_<YOURID>-if00
The host kernel must have gs_usb support. Verify:
sudo modprobe gs_usb && echo "gs_usb available"
# If this fails, enable CONFIG_CAN_GS_USB=y and rebuild kernel
sudo nano /etc/network/interfaces.d/can0
allow-hotplug can0
iface can0 can static
bitrate 1000000
up ifconfig $IFACE txqueuelen 256
pre-up ip link set can0 type can bitrate 1000000
pre-up ip link set can0 txqueuelen 256
| Jumper | Action | Reason |
|---|---|---|
| USB Power (VUSB) | REMOVE | Prevents back-feeding 5V through USB when 24V main power is connected. Failure to remove can damage the board. |
| 120R termination | INSTALL | Terminates the Monster8 end of the CAN bus. Required when the Monster8 is at one physical end of the bus. |
Reboot, then connect the Monster8 via USB and apply 24V power.
lsusb | grep "1d50:606f"
# Expected: OpenMoko, Inc. Geschwister Schneider CAN adapter
ip link show can0
# Expected: can0: <NOARP,UP,LOWER_UP,ECHO> ... state UP
~/katapult/scripts/flash_can.py -i can0 -q
# Expected:
# Detected UUID: XXXXXXXXXXXX, Application: Klipper
printer.cfg.| Jumper | Action | Applies To | Reason |
|---|---|---|---|
| USB Power | INSTALL | v1.1 + v1.2 | Powers the EBB36 from USB for DFU flashing |
v1.1 Disconnect 24V power first. Then connect via USB.
v1.2 Connect via USB. 24V power state does not matter.
Hold BOOT, tap RESET, release BOOT.
lsusb | grep "0483:df11"
# Expected: STMicroelectronics STM Device in DFU Mode
cd ~/katapult
make menuconfig
| Setting | Value |
|---|---|
| Micro-controller Architecture | STMicroelectronics STM32 |
| Processor model | STM32G0B1 |
| Bootloader offset | 8KiB offset |
| Clock Reference | 8 MHz crystal |
| Communication interface | CAN bus (on PB0/PB1) |
| CAN bus speed | 1000000 |
| Support bootloader entry on rapid double click | Yes [*] |
canboot.bin for STM32G0B1 is approximately 4304 bytes. This is correct โ the bootloader is genuinely that small for this MCU.make clean && make
sudo dfu-util -a 0 -D ~/katapult/out/canboot.bin \
--dfuse-address 0x08000000:force:mass-erase:leave -d 0483:df11
The EBB36 will disappear from USB after flashing โ this is expected. Katapult runs in CAN-only mode with no USB presence.
| Jumper | Action | Applies To | Reason |
|---|---|---|---|
| USB Power | REMOVE | v1.1 + v1.2 | Board will now be powered by 24V via the CAN cable |
| 120R termination | INSTALL | v1.1 + v1.2 | Critical. The EBB36 is at the end of the CAN bus. Without this jumper the EBB36 will not communicate on the CAN bus at all. Jumper is near the CAN connector, labeled 120R. |
Connect the EBB36 to the CAN bus. Apply 24V power via the CAN cable.
~/katapult/scripts/flash_can.py -i can0 -q
# Expected:
# Detected UUID: XXXXXXXXXXXX, Application: Klipper โ Monster8
# Detected UUID: YYYYYYYYYYYY, Application: Katapult โ EBB36
printer.cfg.cd ~/klipper
make menuconfig
| Setting | Value |
|---|---|
| Enable extra low-level configuration options | Yes [*] |
| Micro-controller Architecture | STMicroelectronics STM32 |
| Processor model | STM32G0B1 |
| Bootloader offset | 8KiB bootloader |
| Clock Reference | 8 MHz crystal |
| Communication interface | CAN bus (on PB0/PB1) |
| CAN bus speed | 1000000 |
| Optimize stepper code for step on both edges | Yes [*] (recommended) |
make clean && make
Ensure the EBB36 shows Application: Katapult in the CAN query, then:
python3 ~/katapult/scripts/flash_can.py -i can0 \
-f ~/klipper/out/klipper.bin -u <EBB36_UUID>
~/katapult/scripts/flash_can.py -i can0 -q
# Expected:
# Detected UUID: XXXXXXXXXXXX, Application: Klipper โ Monster8
# Detected UUID: YYYYYYYYYYYY, Application: Klipper โ EBB36
[mcu]
canbus_uuid: XXXXXXXXXXXX # Monster8 UUID
[mcu EBB36]
canbus_uuid: YYYYYYYYYYYY # EBB36 UUID
Once Klipper is running, future updates require no USB connection:
# Put EBB36 into Katapult mode
python3 ~/katapult/scripts/flash_can.py -i can0 -u <EBB36_UUID> -r
# Rebuild and flash
cd ~/klipper && make
python3 ~/katapult/scripts/flash_can.py -i can0 \
-f ~/klipper/out/klipper.bin -u <EBB36_UUID>
| Symptom | Likely Cause | Fix |
|---|---|---|
can0: No such device | gs_usb not loaded | sudo modprobe gs_usb โ if fails, rebuild kernel with CONFIG_CAN_GS_USB=y |
Unable to bind socket to can0 | Interface not up | sudo ifup can0 |
Monster8 shows as 0483:df11 after flash | Katapult not running | Double-tap RESET button |
| EBB36 not in CAN query | Missing 120R termination jumper | Install 120R jumper on EBB36 near CAN connector |
| EBB36 not in CAN query | No 24V power | Verify 24V wiring to EBB36 power input |
| EBB36 not in CAN query | Katapult jumped to app | Double-tap RESET โ timing is finicky, try several times |
| Heater activating during DFU v1.1 | BOOT pin shared with heater | Remove 24V power before entering DFU mode |
No CAN traffic (candump can0 empty) | CANH/CANL swapped | Swap the two CAN signal wires |
| No CAN traffic | Wrong CAN pins in firmware | Rebuild Monster8 with PB8/PB9, not PA8/PA9 |
| WiFi lost after kernel rebuild (Surface RT) | mwifiex was a kernel module | Rebuild with CONFIG_MWIFIEX=y and CONFIG_MWIFIEX_SDIO=y |