ちょうどコロナ禍が始まったくらいに話題となったSeeed StudioのXIAOというArduino IDEで使える非常に小さいCortex-M0+ボードがあります。
ただ、頻繁に書き込みをしているとよくブートローダが応答しなくなります。
RSTパッドを2回素早くショートさせることで、ブートローダモードに移行し強制書き込みができるようになるのですが、それさえも動作しない=完全にブートローダが死ぬことがあります。
復旧させるにはブートローダを焼き直す必要があるのですが、AVR系のようにISPやFTDIで焼き込むことができず、Cortex-M用のデバッカ・ライタが必要なのです。
J-Linkなどのデバッカは純正品だと2・3万するようです。非商用ですが、J-link Edu Miniというものは2,000円で買えるみたいです。
1台購入するべきかと考えていた次第、Seeed Studioフォーラムで「XIAOとOpenOCDを使って文鎮化したXIAOを直す」という記事がありました。(文鎮にしては軽すぎますが意訳です)
How to unbrick a dead XIAO using a XIAO(DAPLink) and OpenOCD
つまり、別のXIAOをデバッカ化して壊れたXIAOにブートローダを焼き込むという方法ですね。
実際にやってみて壊れたXIAOを直すことができたので、そのやり方をまとめておきます。
How to unbrick a dead XIAO using a XIAO(DAPLink) and OpenOCD
に記載のある「XIAO_BootloaderRescueTool_DAPLink.ZIP (49.2 KB)」というリンクから必要なファイルをダウンロードし、解凍しておきます。
正常なXiaoのRSTパッドを2回素早くショートさせ、ブートローダモードに移行します。
リムーバブルメディアとして、「Arduino」というディスクがFinder/エクスプローラに現れるので、先ほどダウンロードしたファイルの中の「simple_daplink_xiao.uf2」をドラッグアンドドロップします。
書き込みが成功すると「Arduino」ディスクは自動的に取り出しされます。
ブートローダを焼き直すには、XIAO背面にあるSWDIO/SWCLKパッドを使用します。
ピンヘッダ などは出ていないので、ジャンパワイヤなどをハンダ付けしておきます。
「XIAO拡張ボード」をもっている人は、そちらのSWDIO/SWCLKヘッダを使います。
1.ターミナル.appを開きます。
2.作業するディレクトリに移動します
cd /(~~)/XIAO_BootloaderRescueTool_DAPLink
でXIAO_BootloaderRescueTool_DAPLinkフォルダに移動します。(「cd 」と打ってフォルダをドラッグすれば完了です。)
3.書き込みます
~/Library/Arduino15/packages/arduino/tools/openocd/0.10.0-arduino7/bin/openocd -f flash.cfg -s ~/Library/Arduino15/packages/arduino/tools/openocd/0.10.0-arduino7/share/openocd/scripts
をコピペして実行します。
** Verified OK **
と出たら成功です。
1.下準備します
「XIAO_BootloaderRescueTool_DAPLink」の中の「flash.bat」をエディタで開きます。※メモ帳などではなく、VSCodeなどのエディタで開いてください。
2.ファイルを編集します
XXXXXXXX
というところ(2箇所あります)を自分のユーザー(ルート)名に変更して、上書き保存します。
3.書き込みします
「flash.bat」をダブルクリックで実行します。
** Verified OK **
と出たら成功です。
書き込みはほんの数秒で終了します。
Arduino IDEから「Blink」などの簡単なプログラムを送り、ブートローダが復活したか確認しましょう。