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

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

Arduinoを使った電子工作を普段楽しんでいますが、ArduinoボードがPCに認識されなくなったり正常に動作しなくなるなどのトラブルは稀に起こります。

電源供給の電圧やI/O端子の間違った接続によりボードのマイコンチップや電源ラインの物理的な破損、またブートローダーやUSB-シリアル変換チップ内のファームウェアなどソフトウェアが原因となるものなどいろいろと考えられます。

Arduinoが正常に動作しなくなった場合、その修理・修復方法として以前いくつかの記事をご紹介しました。

【壊れた?Arduinoボードの修理方法まとめ】ATmega328Pチップの交換、ブートローダーやATmega16U2ファームウェアの書き換えにより復活できる場合があります!

ブートローダーなどソフトウェア的な原因であれば、新たに書き込むことで修復することが出来る場合もあります。
また、Arduinoのマイコンチップの交換(ATmega328Pなど)の際にもブートローダーの書き込み作業は必要となってきます。

ブートローダーの書き込みにはライタと呼ばれる書き込み装置が必要となってきます。
ArduinoはAVRマイコンなのでAVRライタ(プログラマ)と呼ばれるものが必要になるということですね。

上記記事ではもう1台Arduinoを用意してこれを書き込み装置として使いブートローダーの書き込みを行いました。
書き込むためのライタとして機能するもう1台のArduinoが必要となり、その接続も少し面倒なものとなります。

そんな事で『USBasp』という安価なAVRプログラマを購入したのですが、Arduinoのブートローダーの書き込みに便利に使うことが出来ました。
またATTiny85など他のAVRマイコンの書き込みにも使うことが出来ます。

USBaspを使ってArduinoにブートローダーを書き込む!

Arduinoにブートローダーを書き込む用途でUSBaspを使ってみます。

Arduinoにブートローダーを書き込む方法は以前こちらの記事でご紹介しました。
ブートローダーを書き込むArduinoボードとは別にもう1台書き込むための装置(ライタ)として使うArduinoを用意する必要があり、またその接続は少し面倒なものでした。

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

そこで今回はUSBaspというAVRライタを使ってみたいと思います。
やっていることは同じですが、接続が簡単となりブートローダーの書き込みに便利に使うことが出来ます!

AVRプログラマ『USBasp』

こちらが『USBasp』です。
互換品となりますが動作は問題なく、Amazonなどでも安価で入手する事が出来ます。

Arduinoで使うならケーブルと10ピン→6ピン変換ボードもセットで購入しておくと便利です。

プログラマボードには3つのジャンパー接続端子(JP1/JP2/JP3)が付いています。
用途によりジャンパーピンで短絡させて使用します。
私が購入したものはJP1とJP2にピンヘッダーが取り付けられていました。

MEMO
互換ボードによってはJP1/JP2/JP3の表記が異なるものもあるようですが、取り付け位置で判断して下さい!

まずJP2は電圧の設定ピンとなっています。
5V or 3.3Vのどちらかに設定する事が出来ます。
Arduinoで使う場合は5V側にジャンパーピンを挿し込み短絡させておきます。(基板裏に電圧表記が書かれています)

次にJP1はUSBaspのファームウェアを書き換える際に短絡させる端子となっているようです。
またJP3にはピンヘッダーが取り付けられていませんでしたが、こちらはISPのスピードをソフトウェアで制御する時に使うものとなるようです。

今回はArduinoボードにブートローダーを書き込む用途で使用するので、JP2を5V側に設定するのみです。

USBasp側のピンアウトはこのようになっています。
互換ボードによってはNC(未接続)部分にGNDやTX/RXラインが接続されたものもあるようですが、基本的には同じでSPIでの接続端子が取れるようになっています。

そして6ピン変換ボード側のピンアウトはこのようになっています。

ArduinoのICSP端子と同じ並びになっているのでそのまま挿し込むだけで接続が出来るようになっています。

Arduinoとの接続

USBaspと6ピン変換ボードをセットで使うとArduinoとの接続はICSP端子に挿し込むだけなので簡単です!

ICSP端子が付いたArduinoボードは、Arduino UnoやNano、Megaなどがあります。
Arduino UnoやMegaではICSP端子のピン配置はこのようになっています。

6ピン変換ボードを対応する端子に合う向きで接続するだけです。

またArduino NanoのICSP端子の並びはこのようになっています。
Unoなどと接続端子の向きが反転しているので、Unoとは6ピン変換ボード接続の向きが180°変わってくるので接続の際は注意して下さい!

大抵のArduinoボードはシールド接続のこともあるのでUnoベースでICSP端子の並びに作られていると思いますが、使用するボードを確認して接続して下さい!

MEMO
ICSP端子はArduinoボードのSPI端子に直結しています。
ICSP端子が付いていないArduinoボードでは対応するSPI端子に直接接続する必要があります!

ドライバのインストール

普段ArduinoはMac環境で使う事が多いのですが、USBaspの使用にはMacの純正ドライバではどうも上手く認識されないようです

MEMO
[追記] Macの場合、ドライバのインストール不要で使用することが出来ました!
以下ドライバのインストール作業はWindowsの場合必要となってきます!

PCにさえ認識されればUSBaspの使用は非常に簡単なんですが、ドライバのインストールで結構ハマってしまいました。
AmazonレビューにZadigを使ってWinusbとして認識させたという書き込みをいくつか見かけたので、Windows環境でドライバをインストールして行っていきます。

USBaspをPCに挿すと認識はしてくれますがドライバがないのでデバイスマネージャで確認すると[ほかのデバイス]となっています。

USBaspを使うために、Zadigを使い汎用USBドライバをインストールしておきます。(Macには対応していないようです)

参考 Zadig DownloadZadig

上記サイトからZadigをダンロードして立ち上げます。
[libusbK]または[winUSB]を選択し[Install Driver]をクリックしてドライバのインストールを行います。(私の環境ではwinUSBで認識してくれました)

再度デバイスマネージャで確認すると上手く認識されました。
これでUSBaspを使うことが出来ます。

ブートローダーの書き込み

ドライバのインストールが完了したら、Arduino IDEを使いブートローダーの書き込みを行います。
Arduino Unoを使い書き込みテストを行ってみます。

ICSP端子の並びを確認し6ピン変換ボードを接続します。

Arduino IDEの[ツール]→[ボード]から書き込みたいArduinoボードを選択します。
今回Arduino Unoにブートローダーの書き込みを行うので[Arduino Uno]を選択します。

次に[ツール]→[書込装置]から[USBasp]を選択します。
これでUSBasp経由で書き込みを行うことができます。

この設定で[ツール]→[ブートローダーを書き込む]を選択すればブートローダの書き込みが行われます。

以上で完了です!

MEMO
上記動画ではブートローダーを書き込み後、USBasp経由でスケッチの書き込みも行っています。
USBaspを使い直接スケッチの書き込みを行うことも出来ますが、この場合書き込んでいるブートローダーが上書きされ消えてしまいます。(次の項目で説明します)

書き込み装置(ライタ)としてもう1台Arduinoボードがあれば同様にブートローダーの書き込みを行うことが出来ますが、USBaspを使うと接続の手間がなくArduino IDEからの操作も簡単ですね!

USBaspから直接スケッチを書き込む

USBaspを使い直接スケッチを書き込むことも出来ます。
ATmega328Pを単体で動かしたり、他のAVRマイコンにスケッチを書き込む際などに使えます。

試しにLチカのスケッチを使いオンボードLEDを点灯させてみます。
[ファイル]→[スケッチ例]→[Basics]から[Blink]を選択します。
このスケッチをUSBasp経由で書き込んで動かしてみます。

手順は先程と同じです。
USBaspをPC/Arduinoと接続します。
Arduino IDEの[ツール]→[ボード]から書き込みたいボードを選択します。
[ツール]→[書込装置]でUSBaspを選択します。
ここまでは先程と同じです。

USBaspを使ったスケッチの書き込みは、[スケッチ]から[書込装置を使って書き込む]を選択することで行います。
USBaspを経由してスケッチの書き込みが行われます。

上記動画のようにオンボードLEDが点灯すれば成功です!

このUSBaspを使ったスケッチの書き込み方法だと、既に書き込まれているブートローダーが上書きされてしまい消えてしまいます。

通常使用のようなArduinoボードに付いているUSB端子からのスケッチの書き込みを行いたい場合はこの方法は使えませんが、AVRマイコンを単体で動かしたい場合やATTiny85など他のAVRマイコンにスケッチを書き込みたい場合に使えますね。

【Arduino】ATmega328P単体でスケッチを動かしてみる!その① ブレッドボードでの接続&ブートローダーの書き込みなど

同様に再度ブートローダーを書き込めばArduinoボードのUSB端子からスケッチの書き込みが行えるようになるので、USBasp経由でのスケッチ書き込みもテストしてみると面白いと思います。

【追記】ファームウェアを最新のものにアップデートしてみました!

USBaspに書き込まれているファームウェアが古いものだとIDEにファームウェアをアップデートするように警告メッセージが表示されることがあります。

特定の用途?で使用しない限り書き込みは正常に行われているようなので特に問題はないのですが、ファームウェアを最新のものにアップデートしてみました。

【電子工作 / Arduino】USBaspのファームウェアを最新のものにアップデートする!

【追記】自作USBaspを製作してみました!

USBaspを使っていて使いにくかった部分をカスタムし自作のUSBaspを製作してみました。

【電子工作 / PCB】AVRプログラマ USBaspを自分仕様にアレンジして自作ボードを製作してみました!

最後に!

Arduinoのブートローダーの書き込み作業は頻繁に行うものではありませんが、安価なモジュールとなり他のAVRマイコンへの書き込みなどでも使えるので1台持っていると便利だと思います。

以前上手く動作しなくなったArduinoボードのブートローダーの書き込み作業を何度もやっていましたが、接続やArduino IDEでの操作も簡単になるので便利ですね!

もちろんArduinoをもう1台用意してライタとして機能させれば同様なことは出来るのですが、SPIでの接続が何気に面倒となります。

マクロパッドの試作を行うためにキーボード用ファームウェア(QMK Firmware)を入れたArduino Leonardoがあり、上記のように接続が面倒なことからArduinoに戻す作業を後回しにしていたのですが・・・

USBaspを使って一瞬で戻すことが出来ました。
これは便利ですね!

Arduinoブートローダー書き込みに関しては、こちらの記事も合わせて読んで頂ければ理解も深まると思います。

【壊れた?Arduinoボードの修理方法まとめ】ATmega328Pチップの交換、ブートローダーやATmega16U2ファームウェアの書き換えにより復活できる場合があります!

コメントを残す