11月25日発売 書籍『Arduinoと3Dプリンタでロボットを作ろう』を出させて頂きました!

【Arduino】ブートローダーの修復(書き換え)でArduinoボードが復活する場合があります!【壊れたArduinoの修復 その①】

電子工作という趣味をはじめて1年ほどが経ちました。
Arduinoをメインとしていろいろと楽しんでいますが、ごくまれにArduinoボードの調子が悪くなる時があります。

その多くはUSBケーブルでPCに接続した際にうまく認識されず、そのためArduino IDEからスケッチの書き込みなどが全く行えなくなるというものです。

何らかの原因でボード内のチップが破損しているなどハード的な問題であればどうしようもないのですが、ブードローダ(ソフトウェア)が壊れている(消えた?)場合はその修復によりArduinoボードが復活する場合があるようです。

Arduinoボードは正規品のほか、格安で販売されている互換品が多数出回っています。
正規ボードではこのようなブートローダーの破損はあまりないのかな?
詳しくは分かりませんが、使っていた互換ボードのいくつかの調子が悪くなりブートローダの修復により復活させることが出来ました。

また、Arduinoの互換ボードにはブートローダが書き込まれていない状態で販売されているものもあるようです。
このような場合にもブートローダーを書き込むことにより使えるようになります。

今回はArduinoボードへのブートローダの書き込み(修復)方法をご紹介したいと思います。

ArduinoボードがPCに認識されない場合のブートローダー修復方法!

ブートローダとは?

Arduinoボードはいろいろとありますが、Arduino Unoの場合ATmega328Pというマイコンが使われています。
そしてブートローダとはArduinoのフラッシュメモリにあらかじめ書き込まれている小さなプログラムとなります。

PCのUSBポートから送られてきたスケッチをシリアルインターフェースで読み取り、それをブートローダがメモリに転送してからマイコンが実行しています。

本来Arduino製造時にブートローダの書き込みは行われるので、追加でハード(ライタなど)を用意する必要がなくスケッチ(プログラム)の書き込みが行えるようになっています。

このブートローダが何らかの原因で破損(消えた?)した可能性があるので、今回このブートローダを新たに書き込む作業をやってみようということです。

Arduinoボードに電源を投入時(リセット時など)、ブートローダが最初に動きます。
ブートローダはまずデジタルピン13番(オンボードLEDと繋がっています)にパルスを送りこのLEDを点滅させ正常に動作していることを知らせる仕組みになっています。

そしてブートローダをボードのチップに書き込むには専用のハードウェア(ライタ)が必要となります。
今回、正常に動作するもう1台のArduinoを用意しこれを修復したいArduinoボードへのブートローダ書き込み用のライタとして使って作業をしていきます。

Arduinoボードの状態を確認

まずArduinoボードの状態から原因がブートローダーによるものなのかを確認します。

USBケーブルを差し電源を供給した際にArduinoボードのLEDが点灯するかを確認。
全く通電が確認できない場合はハードウェア的な問題だと考えられるため、諦めるしかなさそうです!(マイコンチップの交換方法を追記しました)

【Arduino Uno】壊れたArduinoを修理する!マイコンチップATmega328Pの交換方法【壊れたArduinoの修復 その②】

通電が確認できたら次にオンボードLEDの確認です。
Arduinoボードには(Arduino Unoで進めていきます)、【L】と書かれたオンボードLEDが付いています。
Arduinoに通電した直後やリセットスイッチを押した際にブートローダが正常に作動していればこのオンボードLEDが通常早く点滅します。

しかし通電直後から点滅せずに点灯状態(消灯)が続くようならブートローダがうまく機能していない可能性があり、今回のブートローダ修復により復活できる場合があります。

ハードウェア側の問題ではなく、何らかの原因でブートローダのデータが消えた、もしくは破損している場合は書き換えることで正常な状態に戻せる場合があるのでやっていきましょう!

ブートローダの破損

ArduinoとPCとのデータのやり取りやスケッチの書き込みなどは、Arduinoに搭載されているUSBシリアル変換器を介して行われています。
Arduino Unoのボードを見るとUSB端子の横にあるATmega16U2というチップがこれにあたります。

このUSB-シリアル変換を行うATmega16U2チップ内に書き込まれているファームウェアの破損が原因の場合は、ATmega16U2のファームウェア更新(書き換え)の必要があります。(今回はブートローダの更新なので別記事でご紹介します)

今回はマイコンチップATmega328Pチップ内に書き込まれているブートローダの書き換え作業の話となります。
これを修復(書き換え)する事により復活する可能性があります。

ブートローダはこのチップに格納されていてPCから直接書き換えることが出来ません。
今回もう1台の正常に動くArduinoを用意し、これを使って書き換えてみたいと思います。

Arduino公式のこちらのページを参考にやってみました。

参考 Arduino as ISP and Arduino BootloadersArduino

正常なArduinoをブートローダのライタ(書き込み機)として使う

Arduinoのブートローダが根本的な原因なら正常なものに書き換える事で復活が出来ます。
ブートローダ(ソフトウェア)を書き換えるためには先述のように専用のハードウェアが必要となってきます。
ライタ(書き込み機)としてもう1台Arduinoを使ってやってみたいと思います。

大まかな流れはこのようになります。

ブートローダ修復の流れ
  1. ライタ(書き込み機)として機能するArduinoの準備
  2. 2台のArduinoを接続
  3. ブートローダの書き換え

それではやっていきましょう!

①ライタ(書き込み機)として機能するArduinoの準備

まずライタ(書き込み機)として機能するArduinoの準備です。
正常に動作するArduino(今回はUnoを使用)を用意しブートローダ書き換え用のスケッチをダウンロードします。

Arduino IDEを起動して[ファイル]→[スケッチ例]→[11.ArduinoISP]→[ArduinoISP]を選択し開きます。

このスケッチを正常に動くArduino側に通常の手順で書き込みます。
これでこのArduinoはブートローダを書き込むためのライタとして動作するようになります。

②2台のArduinoを接続

次にArduino同士の接続です。
一旦PCからケーブルを外しておきます。

接続はSPIピンを繋げていきます。
通常ブートローダの書き込みにはICSPピンを使うようですがデジタルピン同士を繋げても問題ありません。

同じArduino同士なら各SPIピン同士を繋げた方が分かりやすいですが、例えばArduino Nanoではピンヘッダーが取り付けられていない場合もあるのでそのような場合はICSPピンを使って接続した方が楽ですね。
どちらでも問題ありません。

【修復対象がArduino Unoの場合】

修復対象がArduino Unoの場合、このように接続します。

書き込み用(正常なArduino)修復するArduino
D10RESET
D11D11
D12D12
D13D13
5V5V
GNDGND

【修復対象がArduino Nanoの場合】

修復対象がArduino Nanoの場合の接続です。
対応するデジタルピン同士を繋げても問題ありませが、Arduino Nanoの場合ICSPピンを使った方が楽だと思います。

ArduinoにはICSPピンというものがあります。
SPIとして機能するピンなので同様に使えます。

書き込み用(正常なArduino)修復するArduino
D10RESET(5)
D11MOSI(4)
D12MISO(1)
D13SCK(3)
5VVcc(2)
GNDGND(6)

 

③ブートローダの書き換え

以上の配線が完了したらブートローダの修復(書き換え)作業となります。
ライタ側(書き込み機)のArduinoをPCと接続します。

MEMO
修復側のArduinoは接続する必要はありません!
書き込み用Arduinoと5Vの電源ラインが繋がっているのでLEDランプが点灯し通電されています。

まず【ツール】から[ボード]を選択します。
これは修復側のArduinoを選択します。
今回ブートローダを修復するのはArduino Unoなのでこれを選択します。

MEMO
PCと繋がっているライタ側(書き込み機)ではなく、修復側のArduinoを選択します!

次に[書込装置]を選択し、【Arduino as ISP】を選択します。
[ArduinoISP]ではないので注意して下さい。

あとは[ブートローダを書き込む]をクリックすればブートローダの書き込みが開始されます。

書き込みには少し時間がかかります。
問題なくブートローダの書き込みが完了すれば、このように【ブートローダの書き込みが完了しました】と表示されます。

お疲れさまでした。
これで完了です!

PCに認識しない等の原因がブートローダならこれで問題解決となっているはずです。
修復したArduinoをPCと接続しシリアルポートに認識されていれば問題解決です。
念の為、Lチカなどのサンプルスケッチを書き込み動作確認が出来れば無事ブートローダの修復は完了となります!

【追記】マイコンチップ『ATmega328P』の交換でArduinoを修理!

ブートローダーの修復で回復しなかったArduino Unoのマイコンチップ『ATmega328P』を交換してボードを修理することが出来ました。

Arduinoボードのマイコンチップ破損が故障原因なら数百円程度のチップ交換で修理が出来ます!
あわせて読んで頂ければと思います!

【Arduino Uno】壊れたArduinoを修理する!マイコンチップATmega328Pの交換方法【壊れたArduinoの修復 その②】

【追記】ブートローダーの書き込みにUSBaspを使った方法も試してみました!

ブートローダーの書き込み方法としてUSBaspを使った方法も試してみました。

本記事でご紹介したようにライタとして機能させるもう1台のArduinoがあればブートローダーの書き込みは出来ますが、USBaspを使うと接続やArduino IDEの操作も簡単に出来るので便利です。

こちらの記事も参考にして頂ければと思います。

【電子工作】Arduino(AVRマイコン)のブートローダー書き込みにUSBaspを使ってみる!

最後に!

Arduinoボードを電子工作用途で使っているとまれに調子が悪くなる場合があります。

電源ラインの配線の間違いなどでハードウェア的に破損してしまった場合などはどうしようもないのですが、今回のように不具合の原因がブートローダ(ソフトウェア側)の破損の場合、書き換えることにより復活できる場合があります。

今回、ハードウェア的な破損ではないArduino UnoとNanoの2台を復活させることが出来ました。
ともに格安な互換ボードとなります。
不具合がまれに起こる、このあたりが正規ボードとの違いなのでしょうか?

正規ボードも使っていますが、製作物に組み込んだりする場合はその価格ゆえに互換ボードは非常に役立ちます。
通常の動作自体は正規ボードと遜色ありませんからね!

今回修復したArduinoは電子工作を始めたばかりの頃に中華サイトで購入したものでした。
1個数百円程度の格安互換ボードとなりますが、最近ではElegoo製のArduino互換ボードを使うことが多いです。
互換ボードの中では非常に質が高く正規品と比べても全く遜色なく使えています。

よく分からない互換ボードを買うなら少し高いですがElegoo製の互換ボードはオススメです!
こちらも参考にして頂ければと思います。

【ELEGOO Arduino Uno】Arduino完全互換ボードの中ではダントツのクオリティーですね!
【ELEGOO Arduino Nano】数多くあるチャイナブランドの中ではダントツのクオリティー!ELEGOO製Arduino Nano互換ボードを買ってみました!
ELEGOO Arduino Nano互換ボード V3.0 CH340/ATmega328P
ELEGOO

コメントを残す