Skip to main content

CAN Firmware Compilation

Start Compilation

Firmware Compilation Quick Guide

Precautions

  • Network: Ensure the host machine (Raspberry Pi, etc.) is connected to the network.
  • Login Method: Must log in via SSH over the network; serial port login is disabled.
  • Input Method: Keep the keyboard in English half-width mode.

SSH Login and User Switching

Use tools like MobaXterm, PuTTY, etc., to SSH into the host machine.

Switching Users:

  • Standard Systems (Official Raspberry Pi OS, etc.)
    Do not use root. Switch to a regular user:
    su <username>
  • FLY Host Machine (FlyOS-FAST System)
    Only supports logging in as the root user (password: mellow).

Firmware Compilation Operation Guide

In the Klipper firmware configuration interface, only keyboard operations are supported; mouse usage is not possible.

KeyFunction
↑ / ↓Move cursor up/down to select menu items
Enter / SpaceConfirm selection, toggle options, or enter submenus
ESCReturn to the previous menu level
QExit the configuration interface
YWhen exiting, press Y to save the configuration if prompted

Start Firmware Compilation

The following describes how to compile the firmware:

  • After connecting via SSH, enter the following command and press Enter:

    cd ~/klipper && rm -rf ~/klipper/.config && rm -rf ~/klipper/out && make menuconfig
  • The command rm -rf ~/klipper/.config && rm -rf ~/klipper/out deletes previous compilation data and firmware.

  • make menuconfig is for compiling the firmware. After execution, the interface below should appear.

    Loading...
  • Select Enable extra low-level configuration options and press Enter.

    Loading...
  • Enter the Micro-controller Architecture menu, then select Raspberry Pi RP2040/RP235x and press Enter.

    Loading...
  • Select Bootloader offset, choose: 16KiB bootloader.

    Loading...
  • Select Communication interface, choose: CAN bus.

    Loading...
  • Select (4) CAN RX gpio number, delete 4 and enter 1.

  • Select (5) CAN TX gpio number, delete 5 and enter 0.

    Loading...
  • Select GPIO pins to set at micro-controller startup, input: gpio17
    Loading...
  • Press the Q key. When Save configuration appears, press the Y key.
Loading...
  • The configuration should now be saved, and you will exit to the command line interface.
  • Enter the command below to start compilation. This process may take some time.
make -j4
Loading...
  • The compilation is successful if the following content is output at the end.
  • Due to Klipper version differences, the appearance of out/klipper.bin indicates success.
    Linking out/klipper.elf
    Creating bin file out/klipper.bin
  • Before flashing the firmware, connect the tool board to the UTOC or a motherboard flashed with bridge firmware using an XT30 data cable. The reference wiring diagram is below.

  • Please check if the DIP switch is set to the correct position.

    Loading...
  • Ensure that the resistance between CAN H and CAN L, measured with a multimeter while powered off, is around 60Ω. If it is 120Ω, connect the 120Ω jumper. If it is around 40Ω, remove the jumper.

    Loading...
  • After connecting the tool board to the UTOR or a motherboard flashed with USB-to-CAN bridge firmware using an XT30 data cable, the LED on the motherboard will flash.

Warning
  • If the LED does not flash, please re-flash the katapult firmware: Flash katapult firmware
  • If the LED does not flash, after flashing the katapult firmware, proceed to the next step.

Search ID and Flash

Query CANBus UUID

Before Operation
  • It is recommended to perform ID queries and firmware flashing operations when not printing to avoid interfering with the printing process.
  • The Katapult (CANBoot) firmware and Klipper firmware for the same mainboard/toolboard use the same CAN ID.
Prerequisites

Please ensure the following conditions are met, otherwise the CAN ID may not be found normally:

  1. Host CAN network is correctly configured
  2. Toolboard CAN rate is exactly the same as the host (communication will fail if rates differ)
  3. The 1d50:606f device (USB-CAN adapter) is visible after executing the lsusb command.

Search Commands (Choose based on system)

  • Standard Host Search Command
    ~/klippy-env/bin/python ~/klipper/scripts/canbus_query.py can0
  • FLY Host Search Command
    python3 ~/klipper/scripts/canbus_query.py can0

Search Result Explanation

Case 1: Mainboard/Toolboard with Klipper Firmware Flashed

  • Display: Shows one CAN ID and prompts Application: Klipper
  • Explanation: The device is running Klipper firmware and can be used directly. This ID could belong to either the mainboard or a toolboard.
  • How to Distinguish: Disconnect the toolboard's CAN cable and search again. If the ID disappears, it belongs to the toolboard; if it remains, it belongs to the mainboard.
Loading...

Case 2: Mainboard + Toolboard Awaiting Flashing

  • Display: Shows two CAN IDs
  • Explanation: The mainboard is running Klipper firmware, and the toolboard is running CanBoot firmware, awaiting flashing.
Loading...

Case 3: UTOC + Toolboard Awaiting Flashing

  • Display: The UTOC itself does not show an ID, only the toolboard's ID is displayed.
  • Explanation: The UTOC acts only as a bridge; ensure the toolboard is in CanBoot mode.
Loading...

Case 4: No ID Displayed

  • Display: No IDs are shown.
  • Possible Reasons:
    1. CAN bus is occupied by Klipper.
    2. Host CAN0 rate configuration is incorrect.
    3. Physical wiring is faulty.
    4. Device is not in CanBoot mode.
Loading...

Important Notes
  • Awaiting Flashing State: When a toolboard is in CanBoot mode, it will show Application: CanBoot and the firmware LED will blink, indicating it is ready for firmware flashing.
  • Handling Occupied IDs: If a device is running Klipper firmware and its ID is already entered in the configuration file, the ID will not be displayed (occupied by Klipper). To make it reappear, you need to comment out that ID in the configuration and perform a complete power cycle.
Troubleshooting

If you cannot query the UUID, please refer to: CAN Troubleshooting Guide

Firmware Flashing

Flashing Command

  1. Replace 241696050c56 in the command below with the UUID you actually queried.
  2. Note: There must be a space after the -u parameter.
python3 ~/klipper/lib/canboot/flash_can.py -u 241696050c56

Confirmation of Successful Flashing

The appearance of the CAN Flash Success prompt indicates successful flashing:

Loading...

Firmware Update

Update Method

When a firmware update is needed, simply:

  1. Recompile the firmware.
  2. Ensure the device CAN ID can be queried (or Klipper is connected to the device).
  3. Execute the same flashing command.
python3 ~/klipper/lib/canboot/flash_can.py -u <MCU ID>

Successful Update Example

Loading...

Confirm Firmware Startup

  • If the firmware starts normally, the LED will light up.
    Loading...
Loading...