跳到主要内容

CAN 固件编译

烧录前须知

确认当前模式与操作路径

  • 重要说明:如果工具板当前已是 Klipper-CAN 模式,则可在编译固件后,直接通过指令烧录。指令将自动将其重置进入 Katapult 并完成烧录。
  • 出厂状态:板子预刷 CAN模式Katapult 固件,速率为 1M
  • 状态判断(看LED):若板载 LED 闪烁(如下图),表明正处于 Katapult 模式,可进行烧录。
    Loading...
  • 模式异常:若 LED 不闪烁,说明固件非 Katapult。您必须先按下方链接指引重刷: 点此烧录 Katapult 固件

设置拨码与物理连接

  1. 拨码设置:无论当前状态如何,请先将板载拨码开关设置为 CAN 模式,并且将120Ω开关打开(如下图所示)。

    Loading...
  2. 设备连接:使用CAN线,将工具板连接到 UTOC 或已刷好桥接固件的 主板 上。接线请参考下图:

    Loading...
  3. 关键检查(终端电阻):在 完全断电 情况下,使用万用表测量 CAN_HCAN_L 引脚间的电阻。

    设备操作说明
    工具板找到并插上标有 120Ω 的跳线帽。
    主板如连接主板,请同样插上其 120Ω 跳线帽。
    UTOC模块自带电阻。

    如何检查:

    1. 保持完全断电
    2. 使用万用表测量工具板CAN口的 CAN-H与CAN-L 之间的电阻。
    3. 结果判断:
      • 约60Ω:正常,两端电阻已正确连接。
      • 约140Ω:可能CAN-H与CAN-L接反了。
      • 约120Ω:没有安装120Ω 或者断线。
      • 约40Ω:可能有多余的电阻,请检查中间节点。

开始编译

固件编译简明指南

注意事项

  • 网络: 确保上位机(树莓派等)已联网
  • 登录方式: 必须使用 SSH 通过网络登录,禁用串口
  • 输入法: 保持键盘为英文半角模式

SSH登录与用户切换

使用 MobaXterm、PuTTY 等工具 SSH 登录上位机。

切换用户:

  • 普通系统(树莓派官方系统等)
    禁止使用 root,需切换到普通用户:
    su <用户名>
  • FLY上位机(FlyOS-FAST系统)
    仅支持 root 用户登录(密码: mellow)

固件编译操作指南

在 Klipper 固件配置界面中仅支持键盘操作,无法使用鼠标。

按键功能
↑ / ↓上下移动光标,选择菜单项
Enter / 空格确认选择、勾选选项或进入子菜单
ESC返回上一级菜单
Q退出配置界面
Y退出时,如有提示则按 Y 保存配置

开始固件编译

下面介绍如何编译固件:

  1. 连接到 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 固件配置界面。

  2. 按照下方顺序逐项设置,每完成一项再继续下一项。

    1启用 Enable extra low-level configuration options
    (Top)
    Klipper Firmware Configuration
    [*] Enable extra low-level configuration options
    Micro-controller Architecture (Raspberry Pi RP2040/RP235x) --->
    Processor model (rp2040) --->
    Bootloader offset (16KiB bootloader) --->
    Communication Interface (CAN bus) --->
    (1) CAN RX gpio number
    (0) CAN TX gpio number
    (1000000) CAN bus speed
    [*] Optimize stepper code for 'step on both edges'
    (!gpio5) GPIO pins to set at micro-controller startup
    GPIO state at micro-controller startup (Not set) --->
    2Micro-controller Architecture 选择 Raspberry Pi RP2040/RP235x
    (Top)
    Klipper Firmware Configuration
    [*] Enable extra low-level configuration options
    Micro-controller Architecture (Raspberry Pi RP2040/RP235x) --->
    Processor model (rp2040) --->
    Bootloader offset (16KiB bootloader) --->
    Communication Interface (CAN bus) --->
    (1) CAN RX gpio number
    (0) CAN TX gpio number
    (1000000) CAN bus speed
    [*] Optimize stepper code for 'step on both edges'
    (!gpio5) GPIO pins to set at micro-controller startup
    GPIO state at micro-controller startup (Not set) --->
    3Processor model 选择 rp2040
    (Top)
    Klipper Firmware Configuration
    [*] Enable extra low-level configuration options
    Micro-controller Architecture (Raspberry Pi RP2040/RP235x) --->
    Processor model (rp2040) --->
    Bootloader offset (16KiB bootloader) --->
    Communication Interface (CAN bus) --->
    (1) CAN RX gpio number
    (0) CAN TX gpio number
    (1000000) CAN bus speed
    [*] Optimize stepper code for 'step on both edges'
    (!gpio5) GPIO pins to set at micro-controller startup
    GPIO state at micro-controller startup (Not set) --->
    4Bootloader offset 选择 16KiB bootloader
    (Top)
    Klipper Firmware Configuration
    [*] Enable extra low-level configuration options
    Micro-controller Architecture (Raspberry Pi RP2040/RP235x) --->
    Processor model (rp2040) --->
    Bootloader offset (16KiB bootloader) --->
    Communication Interface (CAN bus) --->
    (1) CAN RX gpio number
    (0) CAN TX gpio number
    (1000000) CAN bus speed
    [*] Optimize stepper code for 'step on both edges'
    (!gpio5) GPIO pins to set at micro-controller startup
    GPIO state at micro-controller startup (Not set) --->
    5Communication Interface 选择 CAN bus
    (Top)
    Klipper Firmware Configuration
    [*] Enable extra low-level configuration options
    Micro-controller Architecture (Raspberry Pi RP2040/RP235x) --->
    Processor model (rp2040) --->
    Bootloader offset (16KiB bootloader) --->
    Communication Interface (CAN bus) --->
    (1) CAN RX gpio number
    (0) CAN TX gpio number
    (1000000) CAN bus speed
    [*] Optimize stepper code for 'step on both edges'
    (!gpio5) GPIO pins to set at micro-controller startup
    GPIO state at micro-controller startup (Not set) --->
    6CAN RX gpio number 设置为 1
    (Top)
    Klipper Firmware Configuration
    [*] Enable extra low-level configuration options
    Micro-controller Architecture (Raspberry Pi RP2040/RP235x) --->
    Processor model (rp2040) --->
    Bootloader offset (16KiB bootloader) --->
    Communication Interface (CAN bus) --->
    (1) CAN RX gpio number
    (0) CAN TX gpio number
    (1000000) CAN bus speed
    [*] Optimize stepper code for 'step on both edges'
    (!gpio5) GPIO pins to set at micro-controller startup
    GPIO state at micro-controller startup (Not set) --->
    7CAN TX gpio number 设置为 0
    (Top)
    Klipper Firmware Configuration
    [*] Enable extra low-level configuration options
    Micro-controller Architecture (Raspberry Pi RP2040/RP235x) --->
    Processor model (rp2040) --->
    Bootloader offset (16KiB bootloader) --->
    Communication Interface (CAN bus) --->
    (1) CAN RX gpio number
    (0) CAN TX gpio number
    (1000000) CAN bus speed
    [*] Optimize stepper code for 'step on both edges'
    (!gpio5) GPIO pins to set at micro-controller startup
    GPIO state at micro-controller startup (Not set) --->
    8CAN bus speed 设置为 1000000
    (Top)
    Klipper Firmware Configuration
    [*] Enable extra low-level configuration options
    Micro-controller Architecture (Raspberry Pi RP2040/RP235x) --->
    Processor model (rp2040) --->
    Bootloader offset (16KiB bootloader) --->
    Communication Interface (CAN bus) --->
    (1) CAN RX gpio number
    (0) CAN TX gpio number
    (1000000) CAN bus speed
    [*] Optimize stepper code for 'step on both edges'
    (!gpio5) GPIO pins to set at micro-controller startup
    GPIO state at micro-controller startup (Not set) --->
    9启用 Optimize stepper code for 'step on both edges'
    (Top)
    Klipper Firmware Configuration
    [*] Enable extra low-level configuration options
    Micro-controller Architecture (Raspberry Pi RP2040/RP235x) --->
    Processor model (rp2040) --->
    Bootloader offset (16KiB bootloader) --->
    Communication Interface (CAN bus) --->
    (1) CAN RX gpio number
    (0) CAN TX gpio number
    (1000000) CAN bus speed
    [*] Optimize stepper code for 'step on both edges'
    (!gpio5) GPIO pins to set at micro-controller startup
    GPIO state at micro-controller startup (Not set) --->
    10GPIO pins to set at micro-controller startup 设置为 !gpio5
    (Top)
    Klipper Firmware Configuration
    [*] Enable extra low-level configuration options
    Micro-controller Architecture (Raspberry Pi RP2040/RP235x) --->
    Processor model (rp2040) --->
    Bootloader offset (16KiB bootloader) --->
    Communication Interface (CAN bus) --->
    (1) CAN RX gpio number
    (0) CAN TX gpio number
    (1000000) CAN bus speed
    [*] Optimize stepper code for 'step on both edges'
    (!gpio5) GPIO pins to set at micro-controller startup
    GPIO state at micro-controller startup (Not set) --->
    11GPIO state at micro-controller startup 选择 Not set

    此项是 FLYOS-Klipper 功能。通常保持 Not set;如需设置全部 GPIO 的启动状态,请先阅读 GPIO 启动状态使用说明

    (Top)
    Klipper Firmware Configuration
    [*] Enable extra low-level configuration options
    Micro-controller Architecture (Raspberry Pi RP2040/RP235x) --->
    Processor model (rp2040) --->
    Bootloader offset (16KiB bootloader) --->
    Communication Interface (CAN bus) --->
    (1) CAN RX gpio number
    (0) CAN TX gpio number
    (1000000) CAN bus speed
    [*] Optimize stepper code for 'step on both edges'
    (!gpio5) GPIO pins to set at micro-controller startup
    GPIO state at micro-controller startup (Not set) --->
    12Q 键退出配置界面
    (Top)
    Klipper Firmware Configuration
    [*] Enable extra low-level configuration options
    Micro-controller Architecture (Raspberry Pi RP2040/RP235x) --->
    Processor model (rp2040) --->
    Bootloader offset (16KiB bootloader) --->
    Communication Interface (CAN bus) --->
    (1) CAN RX gpio number
    (0) CAN TX gpio number
    (1000000) CAN bus speed
    [*] Optimize stepper code for 'step on both edges'
    (!gpio5) GPIO pins to set at micro-controller startup
    GPIO state at micro-controller startup (Not set) --->
    13出现 Save configuration 时按 Y 保存配置
    Quit
    Save configuration?
    (Y)es(N)o(C)ancel
  3. 完成上方最后两个步骤,按 Q 退出配置界面,再按 Y 保存配置。

  4. 返回命令行后输入下面的命令并按 Enter 开始编译:

    make -j4
    root@flyos-11e5f8 ~/klipper # make -j4
    Compiling out/src/../lib/can2040/can2040.o
    Compiling out/src/generic/canserial.o
    Compiling out/src/generic/canbus.o
    Compiling out/src/../lib/fast-hash/fasthash.o
    Compiling out/src/rp2040/hard_pwm.o
    Compiling out/src/rp2040/spi.o
    Compiling out/src/rp2040/i2c.o
    Preprocessing out/src/rp2040/rpxxxx_link.ld
    Building out/compile_time_request.o
    Version: XXXX
    Linking out/klipper.elf
    Creating bin file out/klipper.bin

    终端末尾出现 Linking out/klipper.elf Creating bin file out/klipper.bin,即表示编译成功。 实际编译时,部分 Compiling 行和 Version 会随 Klipper 与系统版本变化。

搜索ID并烧录

查询CANBus UUID

操作前须知
  • 建议在非打印状态下执行ID查询和固件刷写操作,避免干扰打印过程。
  • 同一主板/工具板的Katapult(CANBoot)固件与Klipper固件使用相同的CAN ID
前提条件

请确保满足以下条件,否则可能无法正常搜索到CAN ID:

  1. 上位机CAN网络已正确配置
  2. 工具板CAN速率与上位机完全一致(速率不一致将无法通信)
  3. 执行 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仍在,则属于主板。
Loading...

情况二:主板 + 待烧录工具板

  • 显示效果:显示两个CAN ID
  • 说明:主板运行Klipper固件,工具板运行CanBoot固件,等待烧录。
Loading...

情况三:UTOC + 待烧录工具板

  • 显示效果:UTOC本身不显示ID,只显示工具板的ID
  • 说明:UTOC仅作为桥接器,需确保工具板处于CanBoot模式。
Loading...

情况四:无ID显示

  • 显示效果:无任何ID显示
  • 可能原因:
    1. CAN总线被Klipper占用
    2. 上位机CAN0速率配置错误
    3. 物理接线异常
    4. 设备未进入CanBoot模式
Loading...

重要提示
  • 待烧录状态:工具板处于CanBoot模式时会显示 Application: CanBoot 且固件灯闪烁,此时可进行固件烧录。
  • ID占用处理:如果设备已运行Klipper固件且ID已填入配置文件,ID将不会显示(被Klipper占用)。如需重新显示,需在配置中屏蔽该ID并彻底断电重启
故障排查

如果无法查询到UUID,请参考: CAN问题排查指南

固件烧录

烧录命令

  1. 将下方命令中的 241696050c56 替换为您实际查询到的UUID
  2. 注意:-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 提示即表示烧录成功:

Loading...

固件更新

更新方法

当需要更新固件时,只需:

  1. 重新编译固件
  2. 确保能查询到设备CAN ID(或Klipper已连接设备)
  3. 执行相同的烧录命令
版本说明
  • 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>

更新成功示例

Loading...

确认固件是否启动

  • 如果固件正常启动LED会亮起来
    Loading...
Loading...