文鎮化したSKR mini E3 V3.0をとりあえず起動するようにする

Posted: 2022/04/06
Category: 知性

Ender 3 V2のコントローラ基板をSKR mini E3 V3.0に交換した。一般的には静音化目的で導入されることが多いようだが、活線挿抜の鬼である私は普通にモータードライバを燃やしてしまい修理のため交換する羽目になった。 基本的にはBIGTREETECHのGithubで公開されているピン配PDFに従って接続するだけなのだが、FAN0/1/2だけ明確な説明がなくて困った。

いろいろ試した結果、たぶん下記の通りに配線すれば上手く動くと思う。ダメならファームウェア弄ったらどうにかなる気がするが試してない。 なお、ホットエンド冷却ファンの配線だけはEnder 3 V2純正状態ではコネクタが付いていないので、別途JST XHコネクタの2pinハウジングとコンタクトを用意して適当に圧着する必要がある。

基板上シルク表示 接続するファン
FAN0 造形物冷却ファン(黄/青線のやつ)
FAN1 ホットエンド冷却ファン(24Vのマーカーが付いてるやつ、要圧着)
FAN2 コントロール基板冷却用ファン(ケース蓋についてるファン)

死ぬほど見づらい配線写真

文鎮化

そんなこんなで配線後テストプリントをしようとすると、ヒートベッドとホットエンドが設定温度に到達した直後のテーブルを動かそうとした瞬間コントローラーにリセットが掛かってしまい動かない現象が発生した。

どうせ出荷時のファームウェアがタコなのだろうと思ってファームウェアアップデートを行ったが、致命的な間違いとしてSKR mini E3 V3.0 ではなく V2.0 のファームウェアをSDに放り込んで電源を投入してしまった。 誤ってV2.0のファームウェアを投入してしまうと特段のバージョンチェックとかなしに書き込みが行われるらしく、さらに悪いことにどうやらV3.0のファームウェアアップデート機能が実装されている1ブートローダーも破壊する形で適切でないファームウェアが書き込まれてしまうようで完全に起動不可能になる。

普通であればここでお手上げとなるのだが、幸いSKR mini E3シリーズで採用されているマイコンがSTM32シリーズであり、私の手元にはSTM32に書き込みを行うための機材が揃っているため楽勝で復旧可能である…と思っていたのだが、どこを探してもV3.0のブートローダーが転がっておらず、サポートにブートローダーくれとメールしても返答がないので間に合わせ的にブートローダーなしでファームウェアを動かす方針で復旧させた。

2022/07/12追記

サポートにメール送って1ヶ月ぐらい経ったある日、突然hexファイル入りのメールが送られてきた。

添付されていたhexファイルを書き込んだところ無事にSDカードからのファームウェアインストール機能が復活した。めでたい。

というわけでサポートからの返答が待てない人のための手順が下に続きます。

文鎮化したSKR mini E3 V3.0を修復する方法

  1. SKR mini E3 V3.0向けにMarlinをビルド出来る環境を整える。PlatformIOの開発環境を構築したらMarlinリポジトリをcloneしてきて、platformio.iniに default_envs = STM32G0B1RE_btt みたいなことを書いておけばだいたい大丈夫なはず。
  2. Marlinリポジトリ内 ini/stm32g0.ini を開き、以下の通り置き換える

置き換え前

board_build.offset          = 0x2000
board_upload.offset_address = 0x08002000

置き換え後

board_build.offset          = 0x0000
board_upload.offset_address = 0x08000000
  1. Marlinファームウェアをビルドし、ST-Linkで書き込む

STM32を弄ったことがあれば難しいことはない手順だが、注意しなければならないポイントとして SKR mini E3 V3.0の5ピンSWDピン配列はST-Link/V2-1スタイルの6ピンSWDピン配列と概ね共通なものの、 SWDIOとSWDCLKが逆 という嫌がらせとしか思えない差分があるため、Nucleoを用いてサクッと書き込もうと思った際には注意が必要である。

SKR mini E3 V3.0 SWDピン配置

ST-Link/V2-1 SWDピン配置 UM1724より

また、STM32G0シリーズが比較的新しいMCUのためか、ST-Link自体のファームウェアを最新にしないとまともに書き込みができない。手元の環境ではST-Link Utilityから呼び出せるファームアップユーティリティでは十分に新しくならず、STM32CubeProgrammerとかいうただの書き込みツールなのに妙に仰々しい何かからアップデートを行ったらドラッグ&ドロップ書き込みやST-Link Utilityでのアタッチが上手く動くようになった。

本復旧手順の問題点

手順を見ればわかるとおり、オフセットアドレスを書き換えたファームウェアを書くことでブートローダー抜きでファームウェアが起動するようにしているだけなので正直何の解決にもなっていない。 最もわかりやすい問題として おそらくSDカード経由でのファームウェアアップデートができなくなる が、まあファームウェアビルド出来てST-Link持ってる人ならこの手順を繰り返すことでファームアップにも追従できるはずなので文鎮復旧の代償としては安い方だろう。

0x2000 == 8KBあればSDカードからファームウェア読んでSTM32内蔵フラッシュに書き込む+ファイルがなければファームウェアのエントリーポイントにぶっ飛ぶコードぐらい書けるはずだと思うのだけど面倒でやってない…というかブートローダーのバイナリもらえればこんな面倒なことにならなかったはずだが、そもそも間違えたファームウェア書き込んでんじゃねえよという点で全面的に自分がアホなだけなので何も言えない。アップデートの度にコントローラー蓋を開け閉めする罰は受け入れますので細かいことは勘弁してください


  1. と思われる ↩︎