Skip to main content

CAN Firmware Compilation

Before Flashing

Confirm Current Mode and Operation Path

  • Important Note: If the tool board is currently in Klipper-CAN mode, you can flash it directly via command after compiling the firmware. The command will automatically reset it into Katapult and complete the flashing.
  • Factory State: The board comes pre-flashed with Katapult firmware in CAN mode at a rate of 1M.
  • Status Check (Look at LED): If the onboard LED is blinking (as shown below), it indicates it is in Katapult mode and ready for flashing.
    Loading...
  • Mode Anomaly: If the LED is not blinking, it means the firmware is not Katapult. You must first re-flash it following the guide in the link below: Click here to flash Katapult firmware

Set DIP Switches and Physical Connection

  1. DIP Switch Setting: Regardless of the current state, please first set the onboard DIP switch to CAN mode, and turn the 120Ω switch ON (as shown below).

    Loading...
  2. Device Connection: Use a CAN cable to connect the tool board to a UTOC or a mainboard that already has the bridge firmware flashed. Please refer to the image below for wiring:

    Loading...
  3. Key Check (Termination Resistor): With the power completely off, use a multimeter to measure the resistance between the CAN_H and CAN_L pins.

    DeviceInstructions
    Tool BoardFind and plug in the jumper cap labeled 120Ω.
    MainboardIf connected to a mainboard, also plug in its 120Ω jumper cap.
    UTOC ModuleHas a built-in resistor.

    How to Check:

    1. Ensure the system is completely powered off.
    2. Use a multimeter to measure the resistance between CAN-H and CAN-L on the tool board's CAN port.
    3. Result Judgment:
      • Approx. 60Ω: Normal. Termination resistors are correctly connected at both ends.
      • Approx. 140Ω: Possible reversal of CAN-H and CAN-L connections.
      • Approx. 120Ω: The 120Ω resistor is not installed or there is a broken wire.
      • Approx. 90Ω: Only one 120Ω resistor is installed.
      • Approx. 40Ω: There may be extra resistors. Please check intermediate nodes.

Start Compilation

Firmware Compilation Notes and Operation Guide

Notes

📌 Important Prerequisites
  1. Network Connection: Ensure the host machine (Raspberry Pi, etc.) is connected to the network.
  2. Access Method: You must log in to the host machine via SSH over the network. Using serial port tools is prohibited.
  3. User Permissions: Use the correct user account for operations based on the host machine's system type.
  4. Input Method: Ensure the keyboard input method is set to Half-width mode (English mode).

SSH Login and User Switching

SSH Login to Host Machine

Use an SSH tool (such as MobaXterm, PuTTY, etc.) to log in to the host machine over the network: View Detailed SSH Connection Tutorial

Switching Users Based on System Type

Applicable Systems:

  • Official Raspberry Pi OS
  • FLY Pi Armbian System
  • Other systems with Klipper installed

User Permission Requirements:

  • Do not use the root user for any operations.
  • You must switch to a standard user for operations.

Switch Command:

  • Other systems (replace <username> with your username)

    su <username>
💡 Tip

Standard users typically have the necessary compilation permissions. Using the root user may cause permission issues.


Firmware Compilation Instructions

1. Keyboard Operation Guide

  • On the Klipper firmware configuration page, you can only use the following shortcut keys:
  • You cannot use the mouse directly!
KeyFunction Description
↑ ↓ Arrow KeysMove the cursor up/down to select menu items.
Enter or SpaceConfirm selection/check menu item or enter submenu.
ESCReturn to the previous menu level.
QExit the Klipper firmware configuration page.
YWhen prompted upon exit, press Y to save the configuration.

Show Hidden Options

⚠️ Show Hidden Options

If there are few options on the configuration page, first check:

[ ] Enable extra low-level configuration options

This option is used to display some hidden configuration options.

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
  • Among these, rm -rf ~/klipper/.config && rm -rf ~/klipper/out deletes previous compilation data and firmware.

  • make menuconfig is for compiling the firmware. After execution, the following interface 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...

123

  • Select GPIO pins to set at micro-controller startup, enter:
    !gpio5
warning

Please enter in English input mode

!gpio5
Loading...
  • Please compare with the image above to verify, ensure it matches the image above, then proceed to the next step
  • Press the Q key, Save configuration will appear, then press the Y key.
Loading...
  • The configuration should now be saved, and you will have exited to the command line interface.
  • Enter the following command to start compilation. It will take some time.
make -j4
Loading...
  • If the following content is output at the end, the compilation is successful.
  • Due to Klipper version differences, as long as out/klipper.bin appears, it indicates success.
    Linking out/klipper.elf
    Creating bin file out/klipper.bin

Search for ID and Flash

Search for Devices

  • Now that you have successfully logged into the host computer, you can enter lsusb to search for devices. You may encounter one of the following situations:
    • If entering lsusb prompts that the ls command is not found, you can install the required utility by entering the following command:
      sudo apt-get install usbutils
    • If there is no response after entering lsusb, this is a system issue and cannot be resolved here. You will need to change the system or use a known working system.
    • If information like that shown in the image below appears, please note that this is only a reference. You only need to confirm that 1d50:606f appears:
      Loading...
  • 1d50:606f is the device you will use in this instance.
  • If multiple 1d50:606f devices appear, one must be excluded, as multiple entries may affect subsequent flashing and firmware connection. For example, with FLY MINI PAD, it is recommended to use the onboard UTOC and avoid using other CAN bridges.
  • If the device does not appear, please check whether the data cable is properly connected and whether the correct firmware has been flashed.
Note

You can proceed to search for the CAN ID only when 1d50:606f appears.

Query CANBus UUID

Before You Begin
  • 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 the Klipper firmware on 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 correctly:

  1. The host computer's CAN network is correctly configured.
  2. The toolboard's CAN baud rate is exactly the same as the host computer's (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)

~/klippy-env/bin/python ~/klipper/scripts/canbus_query.py can0

Search Result Explanation

Scenario 1: Mainboard/Toolboard with Klipper Firmware Flashed

  • Display: Shows one CAN ID with the prompt 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...

Scenario 2: Mainboard + Toolboard Awaiting Flashing

  • Display: Shows two CAN IDs
  • Explanation: The mainboard is running Klipper firmware, and the toolboard is running CanBoot firmware, waiting to be flashed.
Loading...

Scenario 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...

Scenario 4: No ID Displayed

  • Display: No IDs are displayed.
  • Possible Reasons:
    1. CAN bus is occupied by Klipper.
    2. Host computer's CAN0 baud rate is configured incorrectly.
    3. Physical wiring issue.
    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. It is then 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 visible again, you need to disable 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

Confirming Successful Flash

The appearance of the CAN Flash Success prompt indicates a successful flash:

Loading...

Firmware Update

Update Method

When you need to update the firmware, simply:

  1. Recompile the firmware.
  2. Ensure the device's CAN ID can be queried (or that 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 Boot

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