USBaspのファームをUSBaspで書き込む

USBaspのファームウェアをUSBaspで書き込んでみました。以前、USBaspを購入したときには、USBaspへのファームウェア書き込みに苦労しました。しかし、今回は違います。すでに、ファームウェア書き込みに特化したUSBaspを持っています。簡単にいくだろうと思っていました。しかし、今回も苦労しました。
今回は、買い増したUSBaspに、どうやってファームウェアを書き込むか、その方法を備忘録として残します。
なぜUSBaspを買い増したのか?
USBaspを買い増ししたのは、以前購入したUSBaspに、不安を感じたからです。基板むき出しのUSBaspは、機械的に弱そうで、取り扱いに気を使います。また、SMART PLAYERの様に、USB/UART経由でのスケッチ書き込みができないことが増えたので、追加しました。。お値段が、安かったこともあり、思い切って購入しました。
しかし、今回も、まともに使えるようになるまで、結構な苦労がありました。最終的に、ファームウェアの修正を行うことになるとは、思ってもいませんでした。
購入したUSBaspはArduinoIDEでは使えなかった



前回購入した基板むき出しのUSBaspには、ファームウェアが入っていました。しかし、ファームウエアのバージョンが古かったため、ファームウェアの更新が必要でした。
今回購入したUSBaspも、Arduino IDE(正確にはavrdude)では使用できませんでした。しかし、avrispというアプリでは使用できます。



しかし、avrispを使用するには、arduino IDEでスケッチを一旦エクスポートする必要があります。そのため、使い勝手は悪くなります。やはり、ファームウェアの入れ替えは必要です。
幸い、USBaspを使用する環境は整っていますので、簡単に終わると思っていました。
ちなみに、PC用ドライバの入手方法および、ファームウェアの入手方法は、以前の記事に残してあります。
使用されているMCUを調べる
ファームウェアを書き込むには、USBaspに使用されているMCUの型番を調べなければなりません。購入したUSBaspは中国製です。当然as isです。説明書はついていません。分解して、調べるしかありません。



しかし、分解は簡単で、キャップを外して、スリーブを引き抜くだけです。接着はされておらず、工具無しで分解できます。



基板中央にあるMCUの型番を調べます。



MCU表面の型番が不鮮明で、読み取りに苦労しました。ATMEL MEGA 86Vと書いてあるように見えました。しかし、そんな型番はありませんので、おそらくMEGA88Vだと思います。
ファームウェアの編集
今回購入したUSBasp(MX-USBISP-V5.00)では、Thomas Fischl氏作成のファームウェアは動作しません。その理由はここで詳しく説明されています。簡単に言ってしまうと、port Dが出力モードに設定されると、USB入出力(port B)に干渉してしまいます。これにより、USBaspが、PCで認識されなくなるという不具合が出ます。
これを修正するために、ファームウェアの一部を書き換え、port Dのbit0~3を入力モードに設定します。幸い、port Dは、USBaspでは使用されていませんので、副作用はありません。
対象のファームウェア「usbasp.atmega88.2011-05-28.hex」を書き換えます。ファームウェアをメモ帳等で開き、185行目を以下のように変更します。
変更前
:100B8000D9F77A9589F708951BB815B88BEF8AB90C
変更後
:100B8000D9F77A9589F708951BB815B880EF8AB917
変更したら、ファイルを保存し、ファームウェアの修正は完了です。
USBaspのファームウェア書き換え:結線
先ず、書き込まれる側のUSBaspで、回路の一か所、「UP」と書かれた部分をショートさせます。これにより、コネクタのリセットピンとMCUのリセットピンを接続します。これは、ファームウェアを書き換え可能にするために行います。もちろん、書き換えが終わったら、この配線は撤去しなければいけません。



該当箇所のスルーホールが小さく、手持ちのジャンパー線は入りませんでした。そのため、はんだ付けしました。
今回は、すでに持っているUSBaspを使って、ファームウエア書き換えを行います。しかし、Arduinoで書き換えを行うこともできます。その際の結線は、以前の記事を参照してください。
USBaspを使用して、USBaspのファームウエア書き換えを行う場合、結線は簡単です。付属の10芯フラットケーブルで、双方をつなぐだけです。



結線が終わったら、書き込む側のUSBaspをPCのUSB端子に挿入します。なお、書き込まれる側への電力供給は、書き込む側のUSBaspから行われます。したがって、書き込まれる側のUSB端子には何も接続しません。
ファームウエア書き込み
ファームウェアの書き込みには、avrdudeというソフトウェアを使用します。avrdudeはarduino IEDと一緒にインストールされます。OSとインストール方法によってインストール先が異なる可能性が有ります。
私の場合は、「%LOCALAPPDATA%\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17\bin」にインストールされていました。
ここから先は、CUIでの操作となりますので、コマンドプロンプト上で操作します。
まず、avrdudeのあるフォルダにカレントを移します。
cd %LOCALAPPDATA%\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17\bin
次に書き込みを行います。なお、事前に書き込む側のUSBaspがアタッチされているポート番号を調べておいてください。ポート番号は、デバイスマネージャー等で確認できます。私の場合は、com4でした。また、書き込むファームウェアは、事前にavrdude.exeと同じフォルダーにコピーしておくと作業がしやすくなります。
以下のコマンドで書き換えを開始します。
avrdude.exe -C ..\etc\avrdude.conf -p m88 -c avrisp -P com4 -b 19200 -U flash:w:usbasp.atmega88.2011-05-28.hex:i
書き換え中、画面には進行状況が表示されます。
avrdude.exe: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.09s
avrdude.exe: Device signature = 0x1e930a (probably m88)
avrdude.exe: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude.exe: erasing chip
avrdude.exe: reading input file "usbasp.atmega88.2011-05-28.hex"
avrdude.exe: writing flash (4716 bytes):
Writing | ################################################## | 100% 3.74s
avrdude.exe: 4716 bytes of flash written
avrdude.exe: verifying flash memory against usbasp.atmega88.2011-05-28.hex:
avrdude.exe: load data flash data from input file usbasp.atmega88.2011-05-28.hex:
avrdude.exe: input file usbasp.atmega88.2011-05-28.hex contains 4716 bytes
avrdude.exe: reading on-chip flash data:
Reading | ################################################## | 100% 3.83s
avrdude.exe: verifying ...
avrdude.exe: 4716 bytes of flash verified
avrdude.exe: safemode: Fuses OK (E:F9, H:DD, L:FF)
avrdude.exe done. Thank you.
エラーが表示されなければ、書き換えは終了です。なお、ファームウエア書き込み時のボーレートは、19200bpsに設定しておいてください。これ以外のボーレートでは、書き込みできません。
ファームウェアの書き込みが終わったら
書き込みが終わったら、「UP」と記された部分に取り付けたジャンパー線を取り外してください。そして、書き込みが終わったUSBaspをPCに接続し、デバイスマネージャーでUSBデバイスを開きましょう。USBaspというデバイスが表示されたら、作業は終了です。


