CAN Firmware Compilation
Start Compilation
Firmware Compilation Quick Guide
Important Notes
- 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 (Raspberry Pi official system, etc.)
Do not useroot. Switch to a regular user:su <username> - FLY Host Machine (FlyOS-FAST system)
Only supports logging in as therootuser (password:mellow).
Firmware Compilation Operation Guide
In the Klipper firmware configuration interface, only keyboard operations are supported; mouse cannot be used.
| Key | Function |
|---|---|
| ↑ / ↓ | Move cursor up/down to select menu items |
| Enter / Space | Confirm selection, check options, or enter submenus |
| ESC | Return to the previous menu |
| Q | Exit the configuration interface |
| Y | When exiting, press Y to save 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 -
Among these,
rm -rf ~/klipper/.config && rm -rf ~/klipper/outdeletes previous compilation data and firmware. -
make menuconfigis 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 menu Micro-controller Architecture, 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 GPIO pins to set at micro-controller startup, input: gpio17
Loading...
- Press the
Qkey, then Save configuration appears. At this point, press theYkey.Loading... - The configuration should now be saved, and you should have exited to the command line interface.
- Enter the following command to start compilation. This will take some time.
make -j4
- Finally, if the output shows the following content, the compilation is successful.
- Due to Klipper version differences, as long as
out/klipper.binappears, it indicates success.Linking out/klipper.elf
Creating bin file out/klipper.bin
Wiring
- Before flashing the firmware, connect the tool board to the UTOC or a mainboard with bridge firmware using an XT30 data cable. The reference wiring diagram is shown below.
Loading...
- Ensure that the resistance between CAN H and CAN L measures around
60Ωwhen powered off using a multimeter. If it is120Ω, connect the120Ωjumper. If it is around40Ω, remove the jumper.Loading... - After connecting the tool board to the UTOR or a mainboard with USB-to-CAN bridge firmware using an XT30 data cable, the LED on the mainboard will flash.
- If the LED does not flash, please reflash the katapult firmware: Flash katapult firmware
- If the LED does not flash, after reflashing the katapult firmware, proceed to the next step.
Search ID and Flash
Query CANBus UUID
- It is recommended to perform ID query and firmware flashing operations when not printing to avoid interfering with the printing process.
- The Katapult (CANBoot) firmware and Klipper firmware on the same mainboard/toolboard use the same CAN ID.
Please ensure the following conditions are met; otherwise, the CAN ID may not be found correctly:
- The host's CAN network is correctly configured.
- The toolboard's CAN baud rate is exactly the same as the host's. (Communication will fail if rates differ.)
- The
lsusbcommand shows a device with ID1d50:606f(USB-CAN adapter).
Search Commands (Choose based on your 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
Scenario 1: Mainboard/Toolboard with Klipper Firmware Already Flashed
- Display: Shows a CAN ID and prompts
Application: Klipper. - Explanation: The device is running Klipper firmware and is ready to use. This ID could belong to either the mainboard or a toolboard.
- How to Distinguish: Disconnect the CAN cable from the toolboard and search again. If the ID disappears, it belongs to the toolboard; if it remains, it belongs to the mainboard.
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.
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.
Scenario 4: No ID Displayed
- Display: No IDs are shown.
- Possible Causes:
- CAN bus is occupied by Klipper.
- Incorrect CAN0 baud rate configuration on the host.
- Physical wiring issues.
- Device is not in CanBoot mode.
- Awaiting Flashing State: When a toolboard is in CanBoot mode, it will show
Application: CanBootand its firmware LED will blink. It is then ready for firmware flashing. - Handling Occupied IDs: If a device is already running Klipper firmware and its ID is 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.
If you cannot query the UUID, please refer to: CAN Troubleshooting Guide
Firmware Flashing
Flashing Command
- Replace
241696050c56in the command below with the UUID you actually queried. - Note: There must be a space after the
-uparameter.
python3 ~/klipper/lib/canboot/flash_can.py -u 241696050c56
Confirming Successful Flash
The appearance of the CAN Flash Success prompt indicates a successful flash:
Firmware Update
Update Method
When you need to update the firmware, simply:
- Recompile the firmware.
- Ensure the device's CAN ID can be queried (or that Klipper is connected to the device).
- Execute the same flashing command.
python3 ~/klipper/lib/canboot/flash_can.py -u <MCU ID>
Successful Update Example
Confirm Firmware Startup
- If the firmware starts normally, the LED will light up.
Loading...