USBaspでArduinoにブートローダーを書き込む

Spread the love

USBaspでArduinoにブートローダーを書き込みます。これまでは、Arduino(互換機)にArduinoISPスケッチを書き込んで書き込み機として使っていました。しかし、USBaspを導入すれば、面倒な結線作業はなくなります。さらに、ArduinoISPスケッチを書き込む作業もなくなります。ISCPコネクタに書き込み機を差し込めば、迅速にブートローダーを書き込めるはずです。

しかし、汎用の書き込み機は結構高価で、なかなか手がでませんでした。しかし、Arduinoに特化したUSBaspが200円台で販売されていました。この程度なら、なんとか工面できそうです。しかし、安いものには裏があるのは必定です。USBaspを動かすのがこんなに大変だとは思いませんでした。使用するための手順を、備忘録として残しておきます。

USBaspは安価なボードマイコンでした

いつものようにアリエクで、AVRプログラマを探していたら、USBaspという激安品を見つけました。

USBaspなら200円台で販売されている
USBaspなら200円台で販売されている

この時は、買ったらすぐに使えて、迅速にブートローダーを書き込めると思い込んでいました。しかし、この期待は、この後打ち砕かれてしまいます。

購入したUSBaspとArduino用アダプタ
購入したUSBaspとArduino用アダプタ

今回は、ArduinoのISCP端子に接続するためのアダプタが付属するものを購入しました。しかし、アダプタが無くても、ジャンパー線で代用可能です。しかし、迅速にブートローダーを書き込みたかったので、アダプタ付きを選びました。

USBaspにはATmega8AUというMCUが搭載されていました。つまり、書き込み機といっても、Arduinoのようなボードマイコンの親戚です。しかし、ボードマイコンの親戚ということは・・・。ちょっと嫌な予感がしてきました。

USBaspはそのままでは使えなかった

PCのUSBポートに差し込むと、”USBasp”として認識されます。認識されているので、早速Arduino IDEを立ち上げ、ブートローダーの書き込みをしてみたのですが、全くできません。デバイスマネージャーでよく見てみると、USBaspのアイコンに黄色い三角マークが表示されています。つまり、デバイスドライバーが無いということです。

ネット検索を繰り返し、デバイスドライバーを探しました。

PCにデバイスドライバをインストールする

デバイスドライバーは以下のサイトで配布されています。

Zadig – USB driver installation made easy

DownloadにあるZadig 2.9をダウンロード
DownloadにあるZadig 2.9をダウンロード

表示されたWebページの、Downloadのセクションにある、Zadig 2.9をダウンロードします。ダウンロードしたファイルは実行形式です。実行する前に、USBaspをPCのUSBポートに接続しておいてください。

USBaspを接続したら、ダウンロードしたZadigを起動します。

USBaspドライバーインストール手順1
USBaspドライバーインストール手順1

Zadigが起動したら、メニューの「Options」をクリックし、表示されたプルダウンメニューの「List All Devices」にチェックを入れます。

次に、表示されたUSBデバイスの中からUSBaspを選択し、インストールボタンをクリックします。

USBaspドライバーをインストールする
USBaspドライバーをインストールする

USBaspのファームウェアをダウンロード

PCにデバイスドライバーを入れれば、迅速にブートローダーを書き込めると思っていました。しかし、そんなに甘くありませんでした。デバイスドライバーを入れて、Arduino IDEからブートローダを書き込んでみました。しかし、残念なことにUSBaspのファームウェアが古い旨のエラーが表示され、書き込みできませんでした。

ファームウェア書き込み方法は、このウェブサイトに詳しく説明されていました。

まずは、書き込むファームウェアを用意します。ファームウェアはこのサイトにありました

USBaspのファームウエア
USBaspのファームウエア

とりあえず、一番新しいファームウエア「usbasp.2011-05-28.tar.gz」をダウンロードしました。

ダウンロードしたファームウェアの展開と配置

ファイルはUNIX系のOSで使用される、tar.gz形式でした。しかし、Windowsのファイルエクスプローラで展開することができました。今回購入したUSBaspに使用されているMCUはATmega8AUでした。ATmega8AUに対応したファイルは、ダウンロードしたファイルの以下のパスに入っていました。

usbasp.2011-05-28.tar\usbasp.2011-05-28\bin\firmware\usbasp.atmega8.2011-05-28.hex

もし、使用されていたMCUがATmega48なら、

usbasp.2011-05-28.tar\usbasp.2011-05-28\bin\firmware\usbasp.atmega48.2011-05-28.hex

ATmega88なら、

usbasp.2011-05-28.tar\usbasp.2011-05-28\bin\firmware\usbasp.atmega88.2011-05-28.hex

となります。

このファイルをavrdude.exeと同じフォルダーにコピーしておくと作業がやりやすくなります。コピー先のフォルダーは、

C:\Users\ユーザー名\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17\bin

です。

ファームウェア書き込み装置の準備

書き込み装置を使うのに、書き込み装置が必要になるとは思いませんでした。しかし、ここで用意する書き込み装置はArduino(互換機)です。今回はUNOの互換機を使用しました。

まずは、配線をしなければなりません。配線は以下の6本です。

書き込み側(UNOまたはNANO)書き込まれ側(USBasp)
5VVCC
GNDGND
D10RST
D11MOSI
D12MISO
D13SCK

以上の他に、USBaspのピンヘッダJP1をショートさせておく必要があります。(JP1でRESET信号がMCUに入らないように分断されています。JP1をショートすることで、リセット信号がMCUに送り込まれるようになります。)

USBaspのピンアサインは基板裏側のシルクで確認しておきましょう
USBaspのピンアサインは基板裏側のシルクで確認しておきましょう
USBaspのJP1はショートさせておきます
USBaspのJP1はショートさせておきます
UNOとUSBaspの結線状態
UNOとUSBaspの結線状態

ファームウェアの書き込み準備:書き込み機にArduinoISPを入れる

ようやくファームウエアの書き込みにこぎつけました。まず、書き込み機となるUNO(NANOでも互換機でもOK)にArduinoISPスケッチを書き込みます。

ArduinoISPスケッチはArduino IDEの「ファイル→スケッチ例→11.ArduinoISP→ArduinoISP」にあります
ArduinoISPスケッチはArduino IDEの「ファイル→スケッチ例→11.ArduinoISP→ArduinoISP」にあります

avrdudeでファームウェアを書き込む

ArduinoISPを書き込んだら、Windowsのコマンドプロンプトを立ち上げます。コマンドプロンプトで、cdコマンドを使い、以下のフォルダーにカレントを移します。

C:\Users\ユーザー名\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17\bin

次にavrdude.exeでファームウェアを書き込みます。コマンドラインは以下の通りです。

avrdude.exe -C ..\etc\avrdude.conf -p m8 -c avrisp -P com4 -b 9600 -U flash:w:usbasp.atmega8.2011-05-28.hex:i

なお、上記コマンドラインは、書き込み機がcom4に接続されている場合です。接続されているポートは、Arduino IDEまたはデバイスマネージャーで調べることができます。

デバイスマネージャーでArduinoが接続されているCOMポート番号を知ることができる
デバイスマネージャーでArduinoが接続されているCOMポート番号を知ることができる

avrdudeを実行すると、ファームウェアの書き込みが実行されます。

USBaspファームウェア書き込み実行結果
USBaspファームウェア書き込み実行結果

書き込みと、ベリファイが行われ、ファームウエア書き込みは完了です。

迅速なブートローダー書き込み

USBaspは安く手に入れることができました。しかし、こんなに苦労するとは思いませんでした。

では、早速ブートローダーを書き込んでみましょう。しかし、これまでの様に、ジャンパー線でちまちま結線する必要はありません。

まずは、UNO(互換機)のブートローダーをMiniCoreプロジェクトのブートローダに書き換えてみます。設定はこんな感じです。

UNO互換機にMiniCoreブートローダーを書き込む
UNO互換機にUSBaspを使ってMiniCoreブートローダーを書き込む

MiniCoreのブートローダーは小さく、380バイトほどしかありません。そのため、ブートローダーの書き込みは一瞬で終わりました。苦労しましたが、迅速なブートローダーの書き込みが可能になりました。

コメントを残す

This site uses Akismet to reduce spam. Learn how your comment data is processed.