コントローラーのフラッシュ¶
ファームウェア (firmware) はマイクロコントローラーのフラッシュメモリに書き込まれたプログラムです。ファームウェアがないと、ボードはピン、センサー、ファン、インターフェースについて何をするべきか分かりません。
重要: ファームウェアと設定を混同しないこと。ファームウェアはコントローラーに書き込まれます。Klipper設定は通常ホストの printer.cfg にあり、すでにフラッシュされたMCUにどのピンとパラメータを使用するかを指示します。
ファームウェア、ブートローダー、設定¶
3つの異なる概念:
- ファームウェア - マイクロコントローラーのメインプログラム;
- ブートローダー - メインファームウェアを書き込むのを助ける小さなプログラム;
- 設定 - デバイス設定、例えば Klipper の
printer.cfg。
ブートローダーが最初に実行され、USB、UART、DFU、SDカード、CAN、またはその他のメカニズムで新しいファームウェアを受け入れることができます。ブートローダーが誤って削除された場合、ボードのフラッシュは難しくなることがあります: ST-LINK/SWD、USB-UART、またはその他のプログラマが必要になることがあります。
一般的な手順¶
フラッシュする前に、通常の手順は:
- 正確なボードモデルを知る。
- 正確なマイクロコントローラーを知る。
- ピンアウト、回路図、製造業者の指示を見つける。
- スタンドアロンファームウェアまたは Klipper MCU ファームウェアが必要かどうかを理解する。
- このボード用の準備できた設定または例を見つける。
- 正しいフラッシング方法を選択する。
- 正しいファイルをビルドまたはダウンロードする。
- ボードをフラッシング モードにする。
- ファームウェアを書き込む。
- ボードがシステムに表示されることを確認する。
- ホストとの通信およびロードなしの基本ピンを確認する。
ファームウェア設定を推測することはできません。Klipper の場合、マイクロコントローラータイプ、ブートローダーオフセット、クロック参照、通信インターフェースが特に重要です。
典型的なフラッシング方法¶
異なるボードは異なる方法でフラッシュされます:
一般的なバリエーション:
- USB マスストレージ / UF2 - ボードはディスクとして表示され、
.uf2がそこにコピーされます; - USB DFU - ボードは DFU モードに入り、ファームウェアは USB で書き込まれます;
- USB シリアル / UART ブートローダー - シリアルポート経由のファームウェア;
- ST-LINK / SWD - プログラマーが SWD ピンに接続されます;
- SD カード - 一部の 3D プリンターボードはカード上のファイルでフラッシュします;
- CAN/Katapult/CanBoot - CAN ブートローダー経由のファームウェア;
- Arduino ブートローダー - Arduino IDE または avrdude 経由のスケッチフラッシング。
すべてのボードに対して1つの汎用方法はありません。方法は特定のボード、ブートローダー、ファームウェアによって決定されます。
RP2040 と UF2¶
Raspberry Pi Pico および多くの RP2040 ボードの場合、最も簡単な方法は BOOTSEL と UF2 です。
通常:
BOOTSELを押します。- USB を接続します。
- ボードが
RPI-RP2ディスクとして表示されます。 .uf2ファイルをコピーします。- ディスクが消えてボードが再起動します。
Pico の BOOTSEL はマイクロコントローラー ROM にあるため、通常のフラッシングで誤って削除されることはできません。これは初心者にとって RP2040 を便利にします。
STM32: DFU、ST-LINK、SD カード¶
STM32 ボードは異なる方法でフラッシュされます。
可能なオプション:
- 組み込み USB DFU ブートローダー;
- UART ブートローダー;
- ST-LINK/SWD;
- プリンターボード上の SD カード;
- ボード製造業者のブートローダー;
- CAN ブートローダー。
STM32 の場合、ブートローダーオフセットはしばしば重要です。例えば、ブートローダーが最初の 8 KiB を占める場合、Klipper は正しいオフセットで構築される必要があります。間違って選択した場合、フラッシュ後にボードが起動しない場合があります。
ST-LINK/SWD はより低いレベルのオプションとして有用です: 通常のブートローダーが機能しない場合、ボードを回復できることがあります。しかし、これには SWD ピン、プログラマー、接続の理解が必要です。
Klipper: make menuconfig¶
Klipper ファームウェアの場合、通常は次のようにします:
make menuconfig では、次を選択します:
- マイクロコントローラーのアーキテクチャ;
- プロセッサーモデル;
- ブートローダーオフセット;
- クロック参照;
- 通信インターフェース: USB、シリアル、CAN など;
- 特定のボード用の追加パラメータがある場合もあります。
正しい値は、ボード用の準備できた設定ファイルの上部のコメントに書かれていることがよくあります。そのような設定が存在する場合、最初にそのトップコメントを読んでください。
ビルド後、ファームウェアファイルは通常 ~/klipper/out/ に表示されます。次に、それは特定のボードに適した方法を使用して書き込まれます。
フラッシュ後の検証¶
フラッシュ後、「フラッシャーが成功した」以上のものを確認する必要があります。
確認:
- デバイスはシステムに表示されますか;
- USB/シリアルを使用している場合、
/dev/serial/by-id/...が存在しますか; - CAN を使用している場合、
canbus_uuidが見えますか; - パスは
printer.cfgと一致しますか; - Klipper に通信エラーはありませんか;
- ピンはこのボード固有のピンアウトと一致していますか;
- 電力ロードなしで基本的な入出力が機能しますか;
- ファン/MOSFET/SSR は安全な状態でオフですか。
最初のチェックでは、ヒーターを最終ロードとして接続しないでください。最初に通信、センサー、安全な条件下でのロジックを確認してください。
フラッシュ前に保存するもの¶
ファームウェアを変更する前に、以下を保存すると便利です:
- 現在の
printer.cfg; - 古いファームウェアバージョン(入手可能な場合);
- ボードモデルとマイクロコントローラー;
- 見つけたシリアルパスまたは CAN UUID;
- 接続の写真;
- ピンアウト;
make menuconfig設定;- 製造業者の指示へのリンク。
問題が発生した場合、このデータは迅速に復旧するのに役立ちます。
何が悪くなるか¶
一般的な問題:
- USB ケーブルは充電のみです;
- ボードはブートローダーに入りませんでした;
- 間違ったマイクロコントローラーが選択されました;
- 間違ったブートローダーオフセットが選択されました;
- 間違った通信インターフェースが選択されました;
- ファームウェアが書き込まれましたが、ボードは間違った場所で探されています;
- 再接続後にシリアルパスが変更されました;
- SD カードはボードで読み取られません;
- ボードブートローダーのために正しく命名されていないファームウェアファイル;
- DFU/USB-UART ドライバーがインストールされていません;
- ボードが2つの側面から電源供給されています;
- フラッシュ後、設定が古いピンを参照しています。
最初のエラーに応じてすべてを変更しないでください。ケーブル、ブートローダーモード、MCU モデル、ビルド設定、書き込み方法、システムデバイスの外観、設定を段階的に進めた方がよいです。
フラッシングと安全性¶
ファームウェアは出力のオン/オフを切り替えることができますが、ハードウェア安全を置き換えることはできません。
ヒーターには以下が必要です:
- 正しい電力スイッチ;
- ヒューズ;
- 独立した熱保護;
- 正しい温度センサー;
- 安全なエンクロージャー;
- ファームウェアエラー、MCU ハング、または通信喪失時の動作をチェックしてください。
コントローラーをフラッシュした後、ピンが正しく選択されていること、オンロジックが反転していないこと、安全制限が機能することを確認せずにヒーターを接続しないでください。
典型的な間違い¶
- ファームウェアと
printer.cfgを混同する; - 似ているが異なるボードのファイルをフラッシュする;
- 準備できた Klipper 設定の上部のコメントを読まない;
- 間違ったブートローダーオフセットを選択する;
- 結果を理解せずにブートローダーを削除する;
- 充電のみの USB ケーブルを使用する;
- ボードをフラッシングモードにしない;
- CAN ボードを
/dev/serial/by-idで探す; - USB-serial ボードを
canbus_uuid経由で探す; - ピンを確認する前に電力ロードを接続する;
- 古い設定を保存しない。
重要なポイント¶
ファームウェアはコントローラーの内部プログラムであり、設定はその動作設定です。各ボード用に、正確なモデル、マイクロコントローラー、ブートローダー、フラッシング方法、ビルドパラメータを知る必要があります。
RP2040 の場合、UF2/BOOTSEL が通常最も簡単です。STM32 の場合、特定のボード (DFU、ST-LINK、SD カード、UART、または CAN ブートローダー) を確認してください。Klipper の場合、最初に準備できた設定と make menuconfig のコメントを見つけてください。
関連資料¶
- Klipper: Installation - Building and flashing the micro-controller -
make menuconfig、make、およびシリアルパス検証の公式ルート。 - Klipper: Bootloaders - ブートローダーがボード間で異なる理由、ブートローダーオフセットが必要な理由、および異なる MCU がフラッシュされる方法。
- Raspberry Pi Documentation: Pico-series microcontrollers - BOOTSEL、UF2、および Pico/RP2040/RP2350 の仕様。
- Raspberry Pi Documentation: C/C++ SDK - Your First Binaries - BOOTSEL、USB マスストレージ
RPI-RP2、および Pico のフラッシング UF2 の公式例。 - STMicroelectronics: STM32CubeProgrammer - ST-LINK/SWD、UART、USB DFU、SPI、I2C、および CAN ブートローダーでのフラッシング用の公式 STM32 ツール。