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

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

AVRマイコンにブートローダーやプログラムを書き込む際に使われるAVRライタ(プログラマ)はいろいろと販売されています。
その中でも安価ですがそこそこ高機能で使えるものにUSBaspがあります。
数百円ほどで入手する事が出来る安価なタイプのAVRプログラマです。

ArduinoはATmegaのAVRマイコンが使われていますが、ブートローダーの破損等によりPCにデバイスとして認識されなくなったといったことが稀に起こりますが、そのような際にArduinoに再度ブートローダーを書き込む用途などでも使えます。

ArduinoISPを書き込みAVRライタ化したArduinoを経由して書き込む方法もありますが、USBaspを使えば接続や操作も簡単に行うことが出来るので便利となります。

またATtinyといった他のAVRマイコンを扱う際にも使うことが出来るので、ArduinoやAVRマイコンを使った電子工作をやられている方は1台持っておくと便利だと思います。

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

USBaspは互換ボードが多数販売されているようで、また古いファームウェアが書き込まれているボードも多いようです。
書き込まれているファームウェアが古いものだと書き込み時に「cannot set sck period.please check for usbasp firmware update.」といった警告メッセージが出ることがあります。
ファームウェアを最新のものにアップデートしろということですね!

この警告メッセージが出ても書き込み自体は問題なく完了しているようなので特に気にせずこれまで使っていましたが、最新のファームウェアでないとArduino Mega(ATmega2560)といったフラッシュメモリが128KBを超えるAVRマイコンに書き込むことが出来ないようですね。

という事で、便利なので使うことも多いUSBaspのファームウェアをアップデートしてみました。

USBaspのファームウェアを最新のものにアップデートする

冒頭で説明したようにUSBaspはAVRマイコンにブートローダーやプログラム(スケッチ)を書き込むためのAVRライタ(プログラマ)です。
安価で入手でき便利に使えるのですが、古いファームウェアが書き込まれた状態で販売されているものも多いようです。
古いファームウェアが使われているUSBaspではIDEに上記写真のような警告メッセージが表示されます。

これは単なる警告のようで、これまでArduino UnoやNano、LeonardといったArduinoボードへのブートローダーの書き込みやATtiny45/ATtiny85などのATtinyチップへのスケッチ書き込み等で使ってきましたが正常にアップロードは出来ているようです。

気になったので少し調べてみると、フラッシュメモリが128KBを超えるAVRマイコンへの書き込みやATtiny10といった小型のAVRマイコンへの書き込みに支障が出るようです。

という事でIDEで警告メッセージが出ていた古いファームウェアが書き込まれているUSBaspを最新のファームウェアにアップデートしてみました。

①ArduinoをAVRライタとしてセットアップする

USBaspのファームウェアのアップデートには書き込むためのAVRライタが必要となってきます。
AVRライタの書き込みにAVRライタが必要と・・・ちょっと面倒ではあるのですが!

USBasp同士を接続してファームウェアのアップデートを行う方法もあるようですが、こちらではArduinoを使って書き込みを行ってみます。
ArduinoではおなじみのArduinoISPを書き込みArduinoボードをAVRライタとして機能させ書き込み装置として使うというものです。

まず書き込み装置として機能するArduinoを作ります。
Arduino IDEの[ファイル]→[スケッチ例]→[11.ArduinoISP]にある【ArduinoISP】というスケッチを開きこれをArduinoに書き込みます。

今回Arduino Unoを使いました。
これでUSBaspに書き込むためのAVRライタの用意ができました。

②USBaspとArduinoの接続

次に接続です。
ISPでの書き込みなので使われる端子は、MOSI/MISO/SCK/RESETと電源となるVCC/GNDの計6本です。
上記写真では6ピン変換ボードを使って接続していますが、10ピンのピンアウトはこのようになっています。

UnoのSPI端子はこのようになっています。

あとはArduinoの対応する端子にUSBaspを接続するだけです。

USBaspArduino Uno
MOSID11
MISOD12
SCKD13
RESETD10
VCC5V
GNDGND

接続が出来たらUSBasp側のジャンパー接続です。
電圧切替のJP2(ボードによって表記が異なる場合があります)を5V側、そしてファームウェアを書き込む際に使用するJP1をジャンパーピンで短絡させておきます。
接続は以上です。

MEMO
ジャンパー端子(JP1/JP2/JP3)はボードによって表記が異なる場合があります!

ファームウェアを書き込む準備

USBaspのファームウェアはThomas Fischl公式サイトからダウンロードできます。

参考 USBasp - USB programmer for Atmel AVR controllersThomas Fischl

古いですが、[usbasp.2011-05-28.tar.gz]が最新のものになります。

ダウンロードしたファイルを解凍して、bin>firmware>フォルダ内にある[usbasp.atmega8.2011-05-28.hex]というファイルが必要なファームウェア本体となります。

usbasp.atmega8.2011-05-28.hex

avrdudeを使用してこのファームウェアの書き込みを行いますが、手間を最小限にするために必要なファイルをavrdudeが入った1つのフォルダに一旦まとめておきます。

ここから先はArduino IDEがインストール済みなのが前提となります。
まず[avrdude]ですが以下フォルダ内にあります。(Mac環境で行っています)

Arduino/Contents/Java/hardware/tools/avr/bin/avrdude

この実行ファイルとなる[avrdude]を別フォルダにコピーしておきます。

次に[avrdude.conf]ファイルです。
以下フォルダ内にあります。

Arduino/Contents/Java/hardware/tools/avr/etc/avrdude.conf

同様にこのファイルも別フォルダ内にコピーしておきます。

先程ダウンロードしたファームウェア本体(hexファイル)と合わせて3つ揃いました。(USBaspというフォルダを作成してファイルをまとめていますが、適当なフォルダ名で問題ありません)

これでファームウェアを書き込むための準備が出来ました!

③ファームウェアの書き込み

最後にファームウェアの書き込みです。
PCとArduinoを接続します。

その際にArduino IDEを使って使用するポートを確認しておきます。
私の環境では[/dev/cu.usbmodem144301]となっていました。
表示されるポートは各自異なるので、ご自身の環境で表示されるポートをメモしておきます。

次にターミナルを開き、先程1つのフォルダにまとめた3つのファイルが入ったフォルダーに移動します。

ターミナルでのコマンド入力が苦手な場合、[cd(スペース) ]と入力し先程のフォルダをドラッグ&ドロップしてリターンを押すと移動することが出来ます。

目的のフォルダに移動できたら次のコマンドを入力してファームウェアを書き込みます。
コピペでOKですが、ポート設定部分はご自分の環境のものに変更して下さい。(/dev/cu.usbmodem144301部分)

ファームウェアの書き込みが成功するとこのような表示になるかと思います。
書き込みに問題がある場合は、接続&USBaspのジャンパーを確認して下さい。

書き込みが成功したらファームウェア書き換え用のジャンパー(JP1)を抜いて完了です!
ファームウェアが最新のものになったので、書き込みの際の警告メッセージも表示されなくなりました!

最後に!

USBaspは安価で入手出来るAVRライタですが、ArduinoやAVRマイコンを使った電子工作では1つ持っておくと便利に使える場面は多いと思います。

形状が似た互換ボードなどが多数販売されていますが、中には私のように古いファームウェアが入っているものもあるようです。
特定の用途?以外では警告メッセージが表示されても書き込み自体は正常に行われているので問題ないのですが、毎回警告が表示されるのは少し気持ちが悪いので今回ファームウェアのアップデートを行ってみました。
参考になればと思います。

コメントを残す