壊れたSeeed XIAOを復旧させる

ちょうどコロナ禍が始まったくらいに話題となった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を直すことができたので、そのやり方をまとめておきます。

必要なもの

  • 壊れたXIAO
  • 正常なXIAO
  • Arduino IDE (2.0でも可)
  • ジャンパワイヤなど

必要なファイルをダウンロードする

How to unbrick a dead XIAO using a XIAO(DAPLink) and OpenOCD

に記載のある「XIAO_BootloaderRescueTool_DAPLink.ZIP (49.2 KB)」というリンクから必要なファイルをダウンロードし、解凍しておきます。

DAPLinkを焼く

正常なXiaoのRSTパッドを2回素早くショートさせ、ブートローダモードに移行します。

リムーバブルメディアとして、「Arduino」というディスクがFinder/エクスプローラに現れるので、先ほどダウンロードしたファイルの中の「simple_daplink_xiao.uf2」をドラッグアンドドロップします。

書き込みが成功すると「Arduino」ディスクは自動的に取り出しされます。

接続の準備をする

ブートローダを焼き直すには、XIAO背面にあるSWDIO/SWCLKパッドを使用します。

ピンヘッダ などは出ていないので、ジャンパワイヤなどをハンダ付けしておきます。

「XIAO拡張ボード」をもっている人は、そちらのSWDIO/SWCLKヘッダを使います。

OpenOCDを動作させる

Macの場合

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 **
と出たら成功です。

Windowsの場合

1.下準備します

「XIAO_BootloaderRescueTool_DAPLink」の中の「flash.bat」をエディタで開きます。※メモ帳などではなく、VSCodeなどのエディタで開いてください。

2.ファイルを編集します

XXXXXXXX

というところ(2箇所あります)を自分のユーザー(ルート)に変更して、上書き保存します。

3.書き込みします

「flash.bat」をダブルクリックで実行します。

** Verified OK **
と出たら成功です。

書き込みはほんの数秒で終了します。

動作確認する

Arduino IDEから「Blink」などの簡単なプログラムを送り、ブートローダが復活したか確認しましょう。

🛠Makeの最新記事