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 源码
- 使用一条命令修改
~/katapult/src/rp2040/main.c(同时替换数值与注释):
sed -i 's/1000 \* 256);/1000 * 256) * 6;/; s|// 1ms|// 6ms|' ~/katapult/src/rp2040/main.c
- 重新编译(menuconfig 按原通信方式选择 RP2040 及对应接口):
cd ~/katapult
make menuconfig
make
编译产物在 ~/katapult/out/ 目录下,重新刷写引导固件即可。
修改 Klipper 源码
- 使用一条命令修改
~/klipper/src/rp2040/main.c(同时替换数值与注释):
sed -i 's/1000 \* 256);/1000 * 256) * 6;/; s|// 1ms|// 6ms|' ~/klipper/src/rp2040/main.c
- 重新编译:
cd ~/klipper
make menuconfig
make
编译产物在 ~/klipper/out/ 目录下(klipper.bin 或 klipper.uf2),重新刷写固件。
检查修改是否生效
- 检查源码是否已修改:
grep -n "xosc_hw->startup" ~/katapult/src/rp2040/main.c ~/klipper/src/rp2040/main.c
输出中应包含 1000 * 256) * 6,注释为 // 6ms。
- 刷写后验证:上电后工具板应能正常启动,Klipper 能正常连接 MCU;使用 Katapult 时,进入烧录模式后应能被主机正常识别。
相关配置参考
固件烧录:FLY-SHT36 v3 Katapult 引导固件烧录 固件编译:FLY-SHT36 v3 Klipper 固件编译
其他 RP2040 产品(FLY-SB2040、FLY-MMU 等)请参考对应产品的烧录章节。
Loading...