Arduinoのブートローダの修復方法

ArduinoがPCに認識されない!
Arduino LeonardoをUSBケーブルでPCにつなげたとき、COMポートとして認識された後、すぐに「不明なデバイス」となってしまう場合には、次の可能性が考えられます。
(1) ハードウェア的な問題が発生している[…]

ArduinoがPCに認識されない!

Arduino LeonardoをUSBケーブルでPCにつなげたとき、COMポートとして認識された後、すぐに「不明なデバイス」となってしまう場合には、次の可能性が考えられます。

(1) ハードウェア的な問題が発生している

(2) 書き込まれているブートローダ(ソフトウェア)が壊れている

(3) Arduinoがハードウェア的に壊れている

問題の切り分け

(1)のケースは、さらに2通りの可能性が考えられます。

1つは、Arduinoにつなげているシールドや部品の影響で電力消費が激しく、電源供給が不安定になっている可能性です。

これを調べるためには、Arduinoにつなげている全てのシールドやジャンパーケーブルを外し、USBだけを接続してPCにつなげてみてください。

改善しなければ、USBケーブルやPCのUSBコネクタの接触が悪くて、電源供給や通信が不安定というケースが考えられます。

この場合には、別のUSBケーブルを試したり、PCの別の場所のUSBコネクタに接続する、あるいは他のArduinoでは問題がないかを確認することで切り分けることができます。

いずれも該当しない場合には、(2)のケースと考え、ブートローダの修復を試みてください。

この方法は本稿の主題ですので、後半で詳しく説明します。

ブートローダを修復しても問題が解消しない場合や、修復ができない場合は、(3)のArduinoが壊れている可能性が高いです。この場合、残念ながら使えるように戻すことは不可能です。

そもそもArduino Leonardoのブートローダの役割は?

Arduinoは、PCとUSB接続するとCOMポートとして認識されます。COMポートを通じてPCと通信を行うことで、プログラムのダウンロード(Arduinoへのインストール)などを行うことができます。

これらの、

  • COMポートとして振舞う動作
  • PCからの指示によりプログラムのダウンロード等を行う動作

は、Arduino Leonardoではソフトウェアで実現されています。そのソフトウェアがArduino Leonardoに書き込まれているブートローダです。

もし書き込まれているブートローダが何らかの理由で壊れた場合、COMポートとして振る舞う動作がおかしくなるため、PCと接続できないという問題が発生するのです。

Arduinoのブートローダを修復しよう!

ブートローダもArduinoに書き込まれているソフトウェアですので、それが壊れた場合には書き直すことで修復可能です。

ただし、プログラムを書き込むために必要なブートローダが壊れているわけですから、通常の方法では書き直すことはできません。

ブートローダの修復方法を、順を追って説明します。

必要なもの

ブートローダを修復するには次のものが必要となります。

  • Arduinoボード(UNOなど)
  • ジャンパーワイヤー
  • 抵抗 (100~200Ω)

ブートローダはUSB経由では書き込みできませんので、PCから直接書き込むことはできず、別のArduinoを仲介役として使う必要があります。

Arduinoが2つ登場すると紛らわしいので、以降では、仲介役となるArduinoを「書き込み側のArduino」と呼び、ブートローダを書き込みたいArduinoを「ターゲットのArduino」と呼ぶことにします。

書き込み側のArduinoを設定する

書き込み側のArduinoに、そのためのソフト(ArduinoISP)をダウンロード(インストール)します。

Arduinoをプログラミングするときの要領で、PCとつなぎArduinoIDEを立ち上げてください。

IDEのメニューから、「ファイル」→「スケッチの例」とたどり、「ArduinoISP」を選択してください。ブートローダを書き込むためのスケッチが開きます。このスケッチをコンパイルし、書き込み側のArduinoにダウンロードすることで、ブートローダ書き込み機として動作するようになります。

図1

図1:ArduinoISPのスケッチを開く

書き込み側のArduinoとターゲットのArduinoとを接続する

Arduinoには、左右に並んでるピンソケットとは別に、「ICSP端子」と呼ばれている3×2のピンヘッダー端子が出ています。ブートローダの書き込みは、このICSP端子を使って行います。

図2のように、ジャンパーワイヤーを用いて、書き込み側のArduinoのD10~12および5VとGNDを、ターゲットのArduinoのICSP端子に接続して下さい。

また、書き込み側のArduinoのリセット端子と5Vとを抵抗でつなぎます。

図2

  書き込み側                                                           ターゲット

図2:Arduinoの接続

以上の接続をしたうえで、書き込み側のArduinoを、USBケーブルでPCとつなぎます。

ブートローダの書き込み

PC上でArduinoIDEを立ち上げてください。

ブートローダの書き込みは、開いているスケッチには依存しませんので、立ち上げたままのウィンドウで(任意のスケッチが開いている状態で)以降の操作を行います。

IDEのメニューから「ツール」→「ボードの設定」とたどり、ボードの種類の候補の中から、ターゲットのArduinoのものを選択します。PCと直接つながっている書き込み側のArduinoの種類を選択するのではないことに注意してください。(書き込み側のArduinoは、もはやArduinoではなく、書き込み機だと思ってください)

図3

図3:ターゲットのArduinoの種類を指定

また、「ツール」→「書込装置」とたどり、候補の中から ”Arduino as ISP” を選択します。これは、Arduinoを書き込み機として使っているということを指定しています。

選択肢の中には、”ArduinoISP”のような紛らわしいものがあります。間違えずに”as”の付いているものを選択して下さい。

図4

図4:書込装置の指定

準備ができたら、「ツール」→「ブートローダを書き込む」を実行します。

図5

図5:ブートローダを書き込む

ブートローダの書き込みには少し時間がかかります(数分程度)。図のように、「ブートローダの書き込みが完了しました」と表示されるまで待ってください。

図6

図6:ブートローダ書き込み完了

最後に動作確認

動作確認のため、ターゲットのArduinoを、USBケーブルでPCに接続してみてください。COMポートとして認識され、その状態が変わらなければ、うまく修復できたはずです。

念のため、Arduino IDEを立ち上げ、サンプルスケッチからblinkingを選んでダウンロードしてみてください。LEDが点滅するのが確認できれば、ブートローダの修復は完了です。

「Arduinoのブートローダの修復方法」への4件のフィードバック

  1. ほぼあきらめていましたが、復活しました!!
    ありがとうございました!

  2. 私もできました!

    いい加減な知識でやっていたので、時間が掛かりました。
    最初からこのページを見ていれば良かったです。

    ありがとうございました。

  3. スゴッ!
    おかげで私のケースでも復活できました!
    また、やってしまった〜と、慣れた手順で新しく発注済なのですが。
    手持ち無沙汰で、こちらの情報にたどり着き試してみたところ復活です。
    おそらく外部電源系の保護でしくじってると考えていたので、これまではブートローダー説は試すこと無くお釈迦扱いしてきましたが、おかげ様でICSPピンの有り難さを学ぶことができました。
    ほんとうにありがとうございました!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です