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


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が点滅するのが確認できれば、ブートローダの修復は完了です。

 

 


Leave a comment

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

3 thoughts on “Arduinoのブートローダの修復方法