どうも、Reveです。
最近使っていたデバイス(Seeeduino XIAO)が急に動かなくなって困ったので、対処法を記事(備忘録)にしてみました。
今日のお題目
数か月前に購入したSeeeduino XIAOというマイコンボードを、重い腰を上げてようやく使い始めたですが、なんと1日でうんともすんとも言わなくなりました!?
電源を入れても全く動作せず、PCとUSBケーブルでつないでも認識されないと八方塞がりでした…orz
最終的にはまた動かせたものの少しクセが強めだったので、「ブートローダー再書き込み 」を備忘録として書くことにしました。
壊れた原因(?)
今も完全な特定には至っていないのですが、どうやら電源を消すタイミングでブートローダーが壊れる可能性があるようです。使っていたUSB電源アダプタが古い製品でコイル鳴きもしまくってたので、電源が不安定なせいもありそう…。
ブートローダー再書き込み
書き込み前の確認
では、ブートローダーの再書き込みに取り掛かる…前に一つ確認しておきましょう。
実は、公式で紹介しているXIAOのCOMポート復活の手段に「リセット」というものがあります。
これは「RSTピンとGNDを素早く2回ショート(導通)させる」というもので、チップのブートローダーモードを起動することでポートを再認識できるようになると説明しています。やだー、簡単じゃないですか。早速試してみましょう!
~ (n回目のトライ) ~
残念ながら、うんともすんとも言いません。ここで諦めの悪い我々は、ネットサーフィンでさまよった挙句、とうとう「ふっかつのじゅもん(ブートローダー再書き込み)」という最終手段に至ったのです。
なお、リセットで復活したら、この後は全く必要ありませんwお疲れさまでした。
用意するもの
何をするにも道具は必要です。今回使ったものは以下の通りです。
- ハードウェア
- Atmel-ICE または ST-LINK
- (はんだごて:SWDパッドと導線のはんだ付け)
- ソフトウェア
- Arduino IDE + Seeed SAMD Boards(ボードマネージャ)
- Microchip Studio (旧Atmel Studio)
ハードウェア
ブートローダーの書き直しは基板裏面のSWDパッド経由で行われるため、SAMDシリーズのマイコンとのデバッグプローブを備えるAtmel-ICE、またはST-LINKが必要になります。家にたまたまAtmel-ICEがあったので、自分たちはそちらを使いました。
Atmel-ICEはこちらから購入できます。大体3万円。
また、ST-Linkはこちら。こちらは1500円くらいで買えます。
値段が20倍くらい違うので、とりあえずXIAOを復元したいだけという方は後者がお勧め。ただ、この記事ではAtmel-ICEを使います(やり方はほぼ一緒)。
ソフトウェア
一方のソフトウェアはどれも無料です。
まずはArduino IDEのインストールが必須ですが、これを読んでる人は大体インストール済だと思うので飛ばします。続いてArduino IDEにXIAO(Seeed SAMDボード関連)のボードマネージャを追加しますが、こちらは前回の記事をご覧ください。
そして、Microchip StudioでSAMDマイコンの開発・デバッグ環境をインストールします。詳しい方法については、以下のURLをご参照ください。ただ、最初に選択するアーキテクチャ(マイコンの種類)をAVRからSAMに変える必要があります(よく分からなければ全てインストールでもOK)。
ハードウェアの接続
ソフトウェアをすべてインストールしたら、デバイス同士を接続しましょう。
まず、XIAOとAtmel-ICEをそれぞれUSBケーブルでPCと接続します。XIAOはType-Cコネクタなので注意。
XIAOのブートローダー書き込み用ピン(SWDパッド)は、実はUSBコネクタの裏側にあります。そのままではAtmel-ICEと接続できないので、はんだ付けで導線をくっつけるか、書き込み時にジャンパーピンなどを接触させます(ジャンパーピンでは不安定なので、はんだ付けがおすすめ)。
次に、Atmel-ICEのSAM側コネクタに付属のケーブルをつなぎます。10ピンの小さなコネクタの方をデバイスに挿します。ケーブルは両端でそれぞれコネクタの種類が違いますが、ピン数も形も異なるので一目瞭然です。
ケーブルをつないだら、SAMコネクタとXIAOを接続します。
Atmel-ICEのコネクタが実は曲者で、公式のデータシートなんかを見てもどのピンが何番かとても難解なのですが、オス(ヘッダ)側のコネクタ穴を正面から見た配置と理解すれば良いかもしれません。まあ、赤線が1番と覚えたほうが断然わかりやすいですが。
Seeeduino XIAO | Atmel-ICE |
3V3 | Vcc(1) |
GND | GND(3, 5, 9) |
SWDIO | SWDIO(2) |
SWCLK | SWDCLK(4) |
ピンが正しく配線されたら、Atmel-ICEのランプが2つ光るはずです。なお、6ピン側のコネクタはバラバラに配線されているので、一つ一つ配線を確認しながらつないでください。
ファームウェア書き込み
デバイス同士をつないだら、いよいよ最終段階に入ります。
初めにArduino IDEを開いて、ツールメニューからSeeduino XIAOを選択します。ほかの項目はそのままでOK。
ボードを切り替えたら、書込装置を「Atmel-ICE over OpenOCD」にして、そのまま「ブートローダを書き込む」をクリック。
正常にブートローダーが書き込めたら、シリアルポートが復活しているはずです。
おめでとうございます。これでプログラムの書き込みも実行も正常にできるようになりました!
おまけ
そういえば、Seeeduino XIAO Expansion boardというSWDパッドも含めたすべてのピンにアクセスできるようにする拡張ボードがあるみたいです。
便利そうですね。こちらから購入できます。
ちなみに、SWDパッドと接触しているピンは、スプリングプローブとかポゴピンとか言われたりします。Amazonでも購入できるようですが…。
参考
Atmel-ICEによるSeeeduino XIAO Bootloaderのリカバリ
How to unbrick a dead XIAO using ST-LINK and OpenOCD (Seeed公式フォーラムより)