最近、Seeeduino XIAOをよく使っています。小型(2cm角)で、CPUがArm Cortex-M0+ 32ビット 48 MHz(SAMD21G18)と高性能なのが魅力です。
しかし、ごくまれに、突然フラッシュメモリ内容(ブートローダー)が壊れて起動しなくなることがあります。
リセットパッドをダブルショートで、復旧する方法がメーカより紹介されていますが、この方法でも全く反応がなくなり、途方に暮れていました。
現象:
1)グリーンLEDが点灯するも、COMポートが認識されない。
2)リセットバッドをショートしても、反応しない。
こうなると、お手上げで、CPUボードを交換するしかないですね。
どうやら、ブートローダが壊れているのではないかといろいろと調べていると、Seeeduino XIAOには、裏面にSWDパッドがあり、ツールを使ってブートローダを書き込むことができそうなことに気が付きました。
はてなブログのSeeed K.K. エンジニアブログ内、「Seeeduino XIAO Expansion boardでデバッグ環境構築」によると、Seeeduino XIAO Expansion boardを使うとSWDパッドを簡単にヘッダーピンより使えることが分かりました。ここでは、SEGGER製J-Linkデバッグプローブを使う例となっていましたが、手持ちにAtmel-ICEがありましたので、こちらを使うこととしました。
準備、
Expansion board+Atmel-ice Basic, ArduinoIDE
接続
ICE側 ——————–Seeeduino XIAO拡張ボード
SWDCLK(4) <——–> SWCLK
SWDIO(2) <———-> SWIO
VCC(1) <————–> 3.3V
GND(3) <————-> GND
書込み方法:
1)XIAO拡張ボードにSeeeduinoXIAOをしっかり差し込み、 スプリングプローブがしっかり裏面のPADに接触しているか確認する。
2)Atmel-iceのSAM側のコネクタとXIAO拡張ボードのSWDピンを接続する。
3)Atmel-ice、SeeeduinoXIAOをPCのUSBポートに接続する。
4)ArduinoIDEを起動し、ボード”SeeeduinoXIAO”にセットする。
5) ツールメニューの「書き込み装置」メニュー より、Atmel-ICE over openODCを選択
6)ツールメニューの「ブートローダを書き込む」を選択
書込みが完了すると、IDE下部に「書き込みが完了しました」と表示されればOKです。同時に、Windowsデバイスマネージャに、COMポートが認識され現れます。
以上、Atmel-ICEによるブートローダの復旧でした。
感想:いままで、Arduinoボードのブートローダが壊れるという経験がなかったので、この方法で他のボードのブートローダも書き込みできますね。XIAOを使う場合、また、新規ボードを製作するときには何かESD対策が必要なのかも知れません。よい勉強になりました。