USBasp

ICSP 端子でブートローダーを書き込むのに使います。



購入

Amazon で買えます。コピー品ですが、250円で購入できました。

Arduino で使うのなら 10ピン <-> 6ピン変換も一緒に買っておくと便利です (購入時価格: ¥105)。

10ピンケーブルだけも売ってあります...割高ですが。


各部詳細

JP2 と JP3 にはピンヘッダをハンダしておきました (ピンヘッダは付属しません)。また、JP1 については 3.3V / 5V 以外 (オープン) に設定する事がないので、スライドスイッチに付け替えました。

JP2 は USBasp 自体のファームウェアを書き換える時に使います (Self-Programming)。 JP3 は ISP のスピードをソフトウェアでコントロールする (ATTiny を焼く) 時に使うものです (Slow Clock)。

USBasp のピンアウトはこのようになっています。この製品は4番ピンと6番ピンに TXD / RXD が結線されています (USBasp を名乗っている製品すべてが結線されているわけではありません)。

10ピン <-> 6ピン変換コネクタのピンアウト (ICSP メス) はこのようになっています。

ちなみに、Arduino UNO を書込装置にした場合 (Arduino as ISP) のピンアウトは以下の通りです (5V の場合)。

色は 共立エレショップの AVRWRT 用ブレッドボード ISP ケーブルに準拠しています。

See Also:


セットアップ

普通に USB に挿すと、ドライバがなくてデバイスマネージャに <!> マークが付くと思います。

かと言って、本家サイトのドライバを入れようとすると、署名がないので Windows 8 以降の Windows では素直にドライバをインストールできません

ドライバの問題は Zadig を使えば回避できます。Zadig は汎用 USB ドライバの派生ドライバを、汎用 USB ドライバで置き換えるものです。

コンボボックスで USBasp を選択し、ドライバを libusbk にして [Install Driver] ボタンを押すと、USBasp のドライバとして libusbk が使われるようになります。

デバイスマネージャで <!> マークが消えれば OK です。Arduino IDE のバージョンによってはドライバを winusblibUSB-win32 にしないといけないかもしれません。

いずれか動作する方を使ってください。

See Also:


使い方

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

  1. USBasp と 10ピン <-> 6ピン変換コネクタ を付属の 10 ピンリボンケーブルで接続します。
  2. 6ピンコネクタを ICSP 端子を持つ Arduino へ接続します (MISO が1番ピンです)。

    Pro MiniPro Micro のように独立した ICSP 端子を持たないものは、ジャンパーワイヤーを使って結線する必要があります。

    ICSP 端子やピンヘッダをハンダ付けしたくないのであれば、スルーホール用テストワイヤを使うといいでしょう。
  3. USBasp を PC へ接続します。
  4. Arduino IDE を起動します。
  5. [ツール | ボード] で書き込みたいボードのブートローダーを指定します。
  6. [ツール | 書き込み装置] で USBasp を指定します。
  7. [ツール | ブートローダーを書き込み] でブートローダーを書き込みます。

これでブートローダーを書き込めます。イチイチ Arduino UNO を書込装置 (Arduino as ISP) にしなくていいので便利です。

avrdude が "cannot set sck period. please check for usbasp firmware update" というワーニングを出していますが動作に影響はありません。どうしても気になるのでしたら USBasp のファームウェアを更新してください。

注: USBasp のファームウェアが最新 (ver 1.04: usbasp.atmega8.2011-05-28.hex) でないと、フラッシュメモリが 128KB を超える AVR マイコン (ATMega2560 等) へ書き込めないようなので、ファームウェアのアップデート (後述) を推奨します。

See Also:

スケッチの書き込み

USBasp を外部プログラマとして使う事により、スケッチを書き込む事もできます。なお、このスケッチの書き込み方だとブートローダーが消えますので、再度 Arduino ボードの USB を使って書き込みたい (ブートローダーを使う) 場合には、ブートローダーを書き込む必要があります。

  1. USBasp と 10ピン <-> 6ピン変換コネクタ を付属の 10 ピンリボンケーブルで接続します。
  2. 6ピンコネクタを ICSP 端子を持つ Arduino へ接続します。
  3. USBasp を PC へ接続します。
  4. Arduino IDE を起動します。
  5. (任意のスケッチを開きます)
  6. [ツール | ボード] で書き込みたいボードを指定します。
  7. [ツール | 書き込み装置] で USBasp を指定します。
  8. [スケッチ | 書き込み装置を使って書き込む] でスケッチを転送します。

もうお気付きかもしれませんが、USBasp を持っていれば Arduino を一つも持っていなくても ATMEGA328P を Arduino 化できます。

See Also:


USBasp のファームウェアを更新する (Arduino Uno を使ったやり方)

ここでは Arduino Uno を使ったファームウェア更新方法をご紹介します。

  1. Arduino UNO を PC と USB 接続し、ボードを Arduino UNO、ポートを認識されている COM 番号に合わせます。
  2. Arduino UNO を書込装置にするために [ファイル | スケッチの例 | ArduinoISP] を開きます。
  3. Arduino UNO にスケッチを書き込みます。
  4. C:\USBASP フォルダを作ります。
  5. ファームウェアを DL します (usbasp.2011-05-28.tar.gz)。
  6. tar.gz を解凍し、usbasp.atmega8.2011-05-28.hex を C:\USBASP へコピーします。
  7. C:\USBASP に以下のファイル (firmupdate.cmd) を作成します。
    @echo off
    SET AVRDUDE_PATH=C:\Arduino\arduino-1.6.9\hardware\tools\avr
    SET COM_PORT=COM4
    
    "%AVRDUDE_PATH%\bin\avrdude.exe" -C "%AVRDUDE_PATH%\etc\avrdude.conf" -P %COM_PORT% -b19200 -c arduino -p atmega8 -u -U hfuse:w:0xc9:m -U lfuse:w:0xef:m
    IF %ERRORLEVEL%==0 (
      "%AVRDUDE_PATH%\bin\avrdude.exe" -C "%AVRDUDE_PATH%\etc\avrdude.conf" -P %COM_PORT% -b19200 -c arduino -p atmega8 -U flash:w:usbasp.atmega8.2011-05-28.hex
    )
    pause
    
    赤字の所は環境に応じて書き換えてください。
  8. USBasp の JP2 をショートします。JP1 は 5V 側JP3 はオープンにしておきます。
  9. Arduino Uno と USBasp を結線します。
    UNO USBasp
    GND GND
    13 SCK
    12 MISO
    11 MOSI
    10 RST
    5V VCC
    各部詳細の通りに同じ色を結線するといいです。
  10. C:\USBASP の firmupdate.cmd を実行します。
    C:\USBASP>firmupdate.cmd
    
    avrdude.exe: AVR device initialized and ready to accept instructions
    
    Reading | ################################################## | 100% 0.01s
    
    avrdude.exe: Device signature = 0x1e9307
    avrdude.exe: reading input file "0xC9"
    avrdude.exe: writing hfuse (1 bytes):
    
    Writing | ################################################## | 100% 0.03s
    
    avrdude.exe: 1 bytes of hfuse written
    avrdude.exe: verifying hfuse memory against 0xC9:
    avrdude.exe: load data hfuse data from input file 0xC9:
    avrdude.exe: input file 0xC9 contains 1 bytes
    avrdude.exe: reading on-chip hfuse data:
    
    Reading | ################################################## | 100% 0.02s
    
    avrdude.exe: verifying ...
    avrdude.exe: 1 bytes of hfuse verified
    avrdude.exe: reading input file "0xef"
    avrdude.exe: writing lfuse (1 bytes):
    
    Writing | ################################################## | 100% 0.03s
    
    avrdude.exe: 1 bytes of lfuse written
    avrdude.exe: verifying lfuse memory against 0xef:
    avrdude.exe: load data lfuse data from input file 0xef:
    avrdude.exe: input file 0xef contains 1 bytes
    avrdude.exe: reading on-chip lfuse data:
    
    Reading | ################################################## | 100% 0.01s
    
    avrdude.exe: verifying ...
    avrdude.exe: 1 bytes of lfuse verified
    
    avrdude.exe done.  Thank you.
    
    avrdude.exe: AVR device initialized and ready to accept instructions
    
    Reading | ################################################## | 100% 0.01s
    
    avrdude.exe: Device signature = 0x1e9307
    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.atmega8.2011-05-28.hex"
    avrdude.exe: input file usbasp.atmega8.2011-05-28.hex auto detected as Intel Hex
    avrdude.exe: writing flash (4700 bytes):
    
    Writing | ################################################## | 100% 7.12s
    
    avrdude.exe: 4700 bytes of flash written
    avrdude.exe: verifying flash memory against usbasp.atmega8.2011-05-28.hex:
    avrdude.exe: load data flash data from input file usbasp.atmega8.2011-05-28.hex:
    avrdude.exe: input file usbasp.atmega8.2011-05-28.hex auto detected as Intel Hex
    avrdude.exe: input file usbasp.atmega8.2011-05-28.hex contains 4700 bytes
    avrdude.exe: reading on-chip flash data:
    
    Reading | ################################################## | 100% 3.76s
    
    avrdude.exe: verifying ...
    avrdude.exe: 4700 bytes of flash verified
    
    avrdude.exe: safemode: Fuses OK (H:FF, E:C9, L:EF)
    
    avrdude.exe done.  Thank you.
    
    続行するには何かキーを押してください . . .
    上のようなログが出ていれば OK です。
    C:\USBASP>firmupdate.cmd
    
    avrdude.exe: AVR device initialized and ready to accept instructions
    
    Reading | ################################################## | 100% 0.01s
    
    avrdude.exe: Device signature = 0x000000 (retrying)
    
    Reading | ################################################## | 100% 0.01s
    
    avrdude.exe: Device signature = 0x000000 (retrying)
    
    Reading | ################################################## | 100% 0.01s
    
    avrdude.exe: Device signature = 0x000000
    avrdude.exe: Yikes!  Invalid device signature.
                 Double check connections and try again, or use -F to override
                 this check.
    
    
    avrdude.exe done.  Thank you.
    
    続行するには何かキーを押してください . . .
    このようなログが出ているのなら、接続が間違っているか、JP2 がショートになっていません。
  11. USBasp の JP2 をオープンにします
  12. Arduino Uno と USBasp の結線を解除します。

以上で USBasp のファームウェアアップデートは完了です。IDE もワーニングを吐かなくなります。

See Also:



USBasp のファームウェアを更新する (USBasp 2個を使ったやり方)

ここでは USBasp 2個を使ったファームウェア更新方法をご紹介します。

  1. USBasp 2個をリボンケーブルで繋ぎます。
  2. 書き込まれる側 (PC に接続しない方) の USBasp の JP2 をショートします。JP1 は 5V 側JP3 はオープンにしておきます。
  3. PC に接続します。
  4. Zadig を使って USBasp のドライバを libusbk に変更します。もし、リストに USBasp が出ていない場合には、[Options | List All Devices] にチェックを入れます。
  5. C:\USBASP フォルダを作ります。
  6. ファームウェアを DL します (usbasp.2011-05-28.tar.gz)。
  7. tar.gz を解凍し、usbasp.atmega8.2011-05-28.hex を C:\USBASP へコピーします。
  8. C:\USBASP に以下のファイル (firmupdate2.cmd) を作成します。
    @echo off
    SET AVRDUDE_PATH=C:\Arduino\arduino-1.6.9\hardware\tools\avr
    
    "%AVRDUDE_PATH%\bin\avrdude.exe" -C "%AVRDUDE_PATH%\etc\avrdude.conf" -P usb -c usbasp -p m8 -u -U hfuse:w:0xc9:m -U lfuse:w:0xef:m
    IF %ERRORLEVEL%==0 (
      "%AVRDUDE_PATH%\bin\avrdude.exe" -C "%AVRDUDE_PATH%\etc\avrdude.conf" -P usb -c usbasp -p m8 -U flash:w:usbasp.atmega8.2011-05-28.hex
    )
    pause
    赤字の所は環境に応じて書き換えてください。
  9. C:\USBASP の firmupdate2.cmd を実行します。
    C:\USBASP>firmupdate2.cmd
    
    avrdude.exe: AVR device initialized and ready to accept instructions
    
    Reading | ################################################## | 100% 0.01s
    
    avrdude.exe: Device signature = 0x1e9307
    avrdude.exe: reading input file "0xC9"
    avrdude.exe: writing hfuse (1 bytes):
    
    Writing | ################################################## | 100% 0.03s
    
    avrdude.exe: 1 bytes of hfuse written
    avrdude.exe: verifying hfuse memory against 0xC9:
    avrdude.exe: load data hfuse data from input file 0xC9:
    avrdude.exe: input file 0xC9 contains 1 bytes
    avrdude.exe: reading on-chip hfuse data:
    
    Reading | ################################################## | 100% 0.02s
    
    avrdude.exe: verifying ...
    avrdude.exe: 1 bytes of hfuse verified
    avrdude.exe: reading input file "0xef"
    avrdude.exe: writing lfuse (1 bytes):
    
    Writing | ################################################## | 100% 0.03s
    
    avrdude.exe: 1 bytes of lfuse written
    avrdude.exe: verifying lfuse memory against 0xef:
    avrdude.exe: load data lfuse data from input file 0xef:
    avrdude.exe: input file 0xef contains 1 bytes
    avrdude.exe: reading on-chip lfuse data:
    
    Reading | ################################################## | 100% 0.01s
    
    avrdude.exe: verifying ...
    avrdude.exe: 1 bytes of lfuse verified
    
    avrdude.exe done.  Thank you.
    
    avrdude.exe: AVR device initialized and ready to accept instructions
    
    Reading | ################################################## | 100% 0.01s
    
    avrdude.exe: Device signature = 0x1e9307
    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.atmega8.2011-05-28.hex"
    avrdude.exe: input file usbasp.atmega8.2011-05-28.hex auto detected as Intel Hex
    avrdude.exe: writing flash (4700 bytes):
    
    Writing | ################################################## | 100% 7.12s
    
    avrdude.exe: 4700 bytes of flash written
    avrdude.exe: verifying flash memory against usbasp.atmega8.2011-05-28.hex:
    avrdude.exe: load data flash data from input file usbasp.atmega8.2011-05-28.hex:
    avrdude.exe: input file usbasp.atmega8.2011-05-28.hex auto detected as Intel Hex
    avrdude.exe: input file usbasp.atmega8.2011-05-28.hex contains 4700 bytes
    avrdude.exe: reading on-chip flash data:
    
    Reading | ################################################## | 100% 3.76s
    
    avrdude.exe: verifying ...
    avrdude.exe: 4700 bytes of flash verified
    
    avrdude.exe: safemode: Fuses OK (H:FF, E:C9, L:EF)
    
    avrdude.exe done.  Thank you.
    
    続行するには何かキーを押してください . . .
    上のようなログが出ていれば OK です。
    C:\USBASP>firmupdate2.cmd
    
    avrdude.exe: AVR device initialized and ready to accept instructions
    
    Reading | ################################################## | 100% 0.01s
    
    avrdude.exe: Device signature = 0x000000 (retrying)
    
    Reading | ################################################## | 100% 0.01s
    
    avrdude.exe: Device signature = 0x000000 (retrying)
    
    Reading | ################################################## | 100% 0.01s
    
    avrdude.exe: Device signature = 0x000000
    avrdude.exe: Yikes!  Invalid device signature.
                 Double check connections and try again, or use -F to override
                 this check.
    
    
    avrdude.exe done.  Thank you.
    
    続行するには何かキーを押してください . . .
    このようなログが出ているのなら、接続が間違っているか、JP2 がショートになっていません。
  10. 書き込まれる側の USBasp の JP2 をオープンにします
  11. USBasp の結線を解除します。

逆に接続してもう一つの USBasp のファームも書き換えましょう。



USBasp を Arduino として使う

USBasp の MCU は Atmel ATMega8 です。ATMega8 を使った Arduino としては Arduino Serial / Extreme / NG (Nuova Generazione) があります...ならば USBasp だって Arduino として使えます

用意するものは USBasp 2個だけです。片方は Arduino Uno とかでもいいのですが、USBasp 2個の方が接続が簡単です。では USBasp で L チカしてみましょう。

Arduino NG 化

  1. USBasp 2個をリボンケーブルで繋ぎます。
  2. Arduino 化する側 (PC に接続しない方) の USBasp の JP2 をショートします。JP1 は 5V 側JP3 はオープンにしておきます。
  3. Arduino IDE の [ツール] で以下のように設定します。
  4. [ツール | ブートローダーを書き込む] で ブートローダーを書き込みます。

これで USBasp が Ardunio NG モドキになりました。

スケッチの書き込み

  1. [ファイル | スケッチ例 | 01.Basics | Blink] を開きます
  2. 詳しくは後述しますが、USBasp の R と書いてある LED は A1 に接続されているので、LED_BUILTIN または 13 となっている所を A1 で書き換えます (3か所)。
  3. [スケッチ | 書き込み装置を使って書き込む] でコンパイル&転送します。
  4. スケッチを書き換えない場合には、書き込み側の USBasp を外し、LED をこのように接続します。抜き差ししなくてはいけないので少々面倒です。

ポート

ボード上のポートは以下の通りです。


USBasp 名称 備考
LED (G) A0 LED には 1kΩ抵抗あり
LED (R) A1 LED には 1kΩ抵抗あり
JP3 (左) GND
JP3 (右) A2

コネクタ上のポートは以下の通りです。


ピン 名称 備考 ピン 名称 備考
1 D11 PWM 可。R5 に 270Ω抵抗...となっているが実際には1kΩ抵抗が載っている 2 VCC
3 4 D1 R7 に 270Ω抵抗...となっているが実際には1kΩ抵抗が載っている
5 6 D0
7 D13 R4 に 270Ω抵抗...となっているが実際には1kΩ抵抗が載っている 8 GND
9 D12 10 GND

簡単な事なら USBasp でもできますね。100均の USB 充電器と組み合わせるとイロイロやれそうです。なお、Arduino NG は 16MHz 動作ですが、USBasp は 12MHz で動作します。

See Also:


ここにある情報が役に立って、「調べる手間が省けたからオマイに飯でもおごってやるよ」 というハートウォーミングな方がいらっしゃいましたら、下のボタンからどうぞ。

メニュー: