CAN 固件编译
开始编译
固件编译简明指南
注意事项
- 网络: 确保上位机(树莓派等)已联网
- 登录方式: 必须使用 SSH 通过网络登录,禁用串口
- 输入法: 保持键盘为英文半角模式
SSH登录与用户切换
使用 MobaXterm、PuTTY 等工具 SSH 登录上位机。
切换用户:
- 普通系统(树莓派官方系统等)
禁止使用root,需切换到普通用户:su <用户名> - FLY上位机(FlyOS-FAST系统)
仅支持root用户登录(密码:mellow)
固件编译操作指南
在 Klipper 固件配置界面中仅支持键盘操作,无法使用鼠标。
| 按键 | 功能 |
|---|---|
| ↑ / ↓ | 上下移动光标,选择菜单项 |
| Enter / 空格 | 确认选择、勾选选项或进入子菜单 |
| ESC | 返回上一级菜单 |
| Q | 退出配置界面 |
| Y | 退出时,如有提示则按 Y 保存配置 |
开始固件编译
下面介绍如何编译固件:
-
连接到 SSH,输入下面的命令并按
Enter:cd ~/klipper && rm -rf ~/klipper/.config && rm -rf ~/klipper/out && make menuconfig其中,
rm -rf ~/klipper/.config && rm -rf ~/klipper/out用于清除之前的编译配置与固件;make menuconfig用于打开 Klipper 固件配置界面。 -
按照下方顺序逐项设置,每完成一项再继续下一项。
1启用 Enable extra low-level configuration options(Top)Klipper Firmware Configuration2Micro-controller Architecture 选择 STMicroelectronics STM32(Top)Klipper Firmware Configuration3Processor model 选择 STM32H723(Top)Klipper Firmware Configuration4Bootloader offset 选择 128KiB bootloader(Top)Klipper Firmware Configuration5Clock Reference 选择 25 MHz crystal(Top)Klipper Firmware Configuration6Communication interface 选择 CAN bus (on PB8/PB9)(Top)Klipper Firmware Configuration7CAN bus speed 设置为 1000000(Top)Klipper Firmware Configuration8GPIO pins to set at micro-controller startup 设置为 !PA15(Top)Klipper Firmware Configuration9GPIO state at micro-controller startup 选择 Not set此项是 FLYOS-Klipper 功能。通常保持
Not set;如需设置全部 GPIO 的启动状态,请先阅读 GPIO 启动状态使用说明。(Top)Klipper Firmware Configuration10按 Q 键退出配置界面(Top)Klipper Firmware Configuration11出现 Save configuration 时按 Y 保存配置QuitSave configuration?(Y)es(N)o(C)ancel -
完成上方最后两个步骤,按
Q退出配置界面,再按Y保存配置。 -
返回命令行后输入下面的命令并按
Enter开始编译:make -j4root@flyos-11e5f8 ~/klipper # make -j4Compiling out/src/stm32/stm32f0_i2c.oCompiling out/src/generic/canserial.oCompiling out/src/../lib/fast-hash/fasthash.oCompiling out/src/stm32/fdcan.oCompiling out/src/generic/canbus.oCompiling out/src/stm32/chipid.oCompiling out/src/stm32/hard_pwm.oPreprocessing out/src/generic/armcm_link.ldBuilding out/compile_time_request.oVersion: XXXXLinking out/klipper.elfCreating bin file out/klipper.bin终端末尾出现
Linking out/klipper.elf和Creating bin file out/klipper.bin,即表示编译成功。 实际编译时,部分 Compiling 行和 Version 会随 Klipper 与系统版本变化。
接线
- 烧录固件前使用XT30数据线将工具板连接到UTOC或者刷了桥接固件的主板,下方是参考接线图
- 请注意拨码是否拨到对应地方
Loading...
- 连接UTOC参考
Loading...
- 请确保CAN H与CAN L在断电情况下使用万用表测量阻值在
60Ω左右,如果是120Ω则需要接上120Ω跳线,如果是40Ω左右需要将跳线移除Loading... - 使用XT30数据线将工具板连接到UTOC或者刷了桥接固件的主板后,此时主板上会有LED灯闪烁。
- 如果没有LED灯闪烁,请重新烧录Katapult固件:烧录Katapult固件
- 如果没有LED灯闪烁,请在烧录完Katapult固件后,再执行下一步
搜索ID并烧录
查询CANBus UUID
- 建议在非打印状态下执行ID查询和固件刷写操作,避免干扰打印过程。
- 同一主板/工具板的Katapult(CANBoot)固件与Klipper固件使用相同的CAN ID。
请确保满足以下条件,否则可能无法正常搜索到CAN ID:
- 上位机CAN网络已正确配置
- 工具板CAN速率与上位机完全一致(速率不一致将无法通信)
- 执行
lsusb命令后能看到1d50:606f设备(USB-CAN适配器)
搜索命令(根据系统选择)
- 普通上位机搜索指令
~/klippy-env/bin/python ~/klipper/scripts/canbus_query.py can0
- FLY上位机搜索指令
python3 ~/klipper/scripts/canbus_query.py can0
搜索结果说明
情况一:已刷Klipper固件的主板/工具板
- 显示效果:显示一个CAN ID,并提示
Application: Klipper - 说明:设备已运行Klipper固件,可以直接使用。此ID可能是主板ID也有可能是工具板ID.
- 区分方法:断开工具板的CAN连接线后重新搜索。如果该ID消失,则属于工具板;如果该ID仍在,则属于主板。
情况二:主板 + 待烧录工具板
- 显示效果:显示两个CAN ID
- 说明:主板运行Klipper固件,工具板运行CanBoot固件,等待烧录。
情况三:UTOC + 待烧录工具板
- 显示效果:UTOC本身不显示ID,只显示工具板的ID
- 说明:UTOC仅作为桥接器,需确保工具板处于CanBoot模式。
情况四:无ID显示
- 显示效果:无任何ID显示
- 可能原因:
- CAN总线被Klipper占用
- 上位机CAN0速率配置错误
- 物理接线异常
- 设备未进入CanBoot模式
- 待烧录状态:工具板处于CanBoot模式时会显示
Application: CanBoot且固件灯闪烁,此时可进行固件烧录。 - ID占用处理:如果设备已运行Klipper固件且ID已填入配置文件,ID将不会显示(被Klipper占用)。如需重新显示,需在配置中屏蔽该ID并彻底断电重启。
如果无法查询到UUID,请参考: CAN问题排查指南
固件烧录
烧录命令
- 将下方命令中的
241696050c56替换为您实际查询到的UUID - 注意:
-u参数后需有空格
-
FlyOS-FAST 1.3.8 及以上版本 或 2026年4月9日后更新过Klipper的系统,请使用新指令:
python3 ~/klipper/lib/katapult/flashtool.py -u 241696050c56 -
旧版本系统(FAST 1.3.8之前 或 2026年4月9日前未更新Klipper),请使用旧指令:
python3 ~/klipper/lib/canboot/flash_can.py -u 241696050c56
烧录成功确认
出现 CAN Flash Success 提示即表示烧录成功:
固件更新
更新方法
当需要更新固件时,只需:
- 重新编译固件
- 确保能查询到设备CAN ID(或Klipper已连接设备)
- 执行相同的烧录命令
-
FlyOS-FAST 1.3.8 及以上版本 或 2026年4月9日后更新过Klipper的系统:
python3 ~/klipper/lib/katapult/flashtool.py -u <MCU ID> -
旧版本系统(FAST 1.3.8之前 或 2026年4月9日前未更新Klipper):
python3 ~/klipper/lib/canboot/flash_can.py -u <MCU ID>
更新成功示例
确认固件是否启动
- 如果固件正常启动LED会亮起来
Loading...