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
- 再コンパイル(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など)については、対応する製品の書き込み章を参照してください。