跳到主要内容

RP2040 固件不启动修复

适用于使用 RP2040 主控的 FLY 工具板(FLY-SHT36、FLY-SB2040、FLY-MMU 等)在自行编译 Katapult / Klipper 固件后出现不启动、启动不稳定问题时的修复方法。出厂固件由厂家提供,仅在自行编译固件遇到问题时才需要参考本页。

注意事项
  • 本页为进阶操作,修改源码前建议先备份原固件。
  • Katapult 就是 BL 引导固件。已安装 Katapult 且由它引导 Klipper 时,建议两个固件都修改;未使用 Katapult 时只需修改 Klipper。

故障现象

  • 刷写自行编译的固件后工具板无反应,USB 无法识别或 CAN 无法连接。
  • 上电后偶发不启动,反复断电重启后偶尔能恢复正常。
  • Katapult 无法启动或无法被主机查询。
  • klippy.log 中提示对应 MCU 无法连接或启动异常。

常见原因

RP2040 启动代码通过 XOSC_STARTUP_DELAY 寄存器设置外部晶振的稳定等待时间。RP2040 参考设计按 1ms 配置,Klipper 与 Katapult 上游默认均为 1ms

xosc_hw->startup = DIV_ROUND_UP(FREQ_XOSC, 1000 * 256); // 1ms

等待计数过短时,可能因此启动失败或运行不稳定。

将稳定等待时间提高到 6ms(与 Raspberry Pi 官方 pico-sdk 默认一致,用于适配慢启动晶振):

xosc_hw->startup = DIV_ROUND_UP(FREQ_XOSC, 1000 * 256) * 6; // 6ms

修改 Katapult 源码

  1. 使用一条命令修改 ~/katapult/src/rp2040/main.c(同时替换数值与注释):
sed -i 's/1000 \* 256);/1000 * 256) * 6;/; s|// 1ms|// 6ms|' ~/katapult/src/rp2040/main.c
  1. 重新编译(menuconfig 按原通信方式选择 RP2040 及对应接口):
cd ~/katapult
make menuconfig
make

编译产物在 ~/katapult/out/ 目录下,重新刷写引导固件即可。

修改 Klipper 源码

  1. 使用一条命令修改 ~/klipper/src/rp2040/main.c(同时替换数值与注释):
sed -i 's/1000 \* 256);/1000 * 256) * 6;/; s|// 1ms|// 6ms|' ~/klipper/src/rp2040/main.c
  1. 重新编译:
cd ~/klipper
make menuconfig
make

编译产物在 ~/klipper/out/ 目录下(klipper.binklipper.uf2),重新刷写固件。

检查修改是否生效

  1. 检查源码是否已修改:
grep -n "xosc_hw->startup" ~/katapult/src/rp2040/main.c ~/klipper/src/rp2040/main.c

输出中应包含 1000 * 256) * 6,注释为 // 6ms

  1. 刷写后验证:上电后工具板应能正常启动,Klipper 能正常连接 MCU;使用 Katapult 时,进入烧录模式后应能被主机正常识别。

相关配置参考

固件烧录FLY-SHT36 v3 Katapult 引导固件烧录 固件编译FLY-SHT36 v3 Klipper 固件编译

其他 RP2040 产品(FLY-SB2040、FLY-MMU 等)请参考对应产品的烧录章节。

Loading...