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 のバージョンによってはドライバを winusb や libUSB-win32 にしないといけないかもしれません。
いずれか動作する方を使ってください。
See Also:
使い方
ブートローダーの書き込み
- USBasp と 10ピン <-> 6ピン変換コネクタ を付属の 10 ピンリボンケーブルで接続します。
- 6ピンコネクタを ICSP 端子を持つ Arduino へ接続します (MISO が1番ピンです)。
Pro Mini や Pro Micro のように独立した ICSP 端子を持たないものは、ジャンパーワイヤーを使って結線する必要があります。
ICSP 端子やピンヘッダをハンダ付けしたくないのであれば、スルーホール用テストワイヤを使うといいでしょう。
- USBasp を PC へ接続します。
- Arduino IDE を起動します。
- [ツール | ボード] で書き込みたいボードのブートローダーを指定します。
- [ツール | 書き込み装置] で USBasp を指定します。
- [ツール | ブートローダーを書き込み] でブートローダーを書き込みます。
これでブートローダーを書き込めます。イチイチ 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 等) へ書き込めないようなので、ファームウェアのアップデート (後述) を推奨します。
スケッチの書き込み
- USBasp と 10ピン <-> 6ピン変換コネクタ を付属の 10 ピンリボンケーブルで接続します。
- 6ピンコネクタを ICSP 端子を持つ Arduino へ接続します。
- USBasp を PC へ接続します。
- Arduino IDE を起動します。
- (任意のスケッチを開きます)
- [ツール | ボード] で書き込みたいボードを指定します。
- [ツール | 書き込み装置] で USBasp を指定します。
- [スケッチ | 書き込み装置を使って書き込む] でスケッチを転送します。
もうお気付きかもしれませんが、USBasp を持っていれば Arduino を一つも持っていなくても ATMEGA328P を Arduino 化できます。
See Also:
ファームウェアを更新する (Arduino Uno を使ったやり方)
ここでは Arduino Uno を使ったファームウェア更新方法をご紹介します。
- Arduino UNO を PC と USB 接続し、ボードを Arduino UNO、ポートを認識されている COM 番号に合わせます。
- Arduino UNO を書込装置にするために [ファイル | スケッチの例 | ArduinoISP] を開きます。
- Arduino UNO にスケッチを書き込みます。
- C:\USBASP フォルダを作ります。
- ファームウェアを DL します (usbasp.2011-05-28.tar.gz)。
- tar.gz を解凍し、usbasp.atmega8.2011-05-28.hex を C:\USBASP へコピーします。
- 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
|
赤字の所は環境に応じて書き換えてください。
- USBasp の JP2 をショートします。JP1 は 5V 側、JP3 はオープンにしておきます。
- Arduino Uno と USBasp を結線します。
GND |
GND |
13 |
SCK |
12 |
MISO |
11 |
MOSI |
10 |
RST |
5V |
VCC |
各部詳細の通りに同じ色を結線するといいです。
- 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 がショートになっていません。
- USBasp の JP2 をオープンにします
- Arduino Uno と USBasp の結線を解除します。
以上で USBasp のファームウェアアップデートは完了です。IDE もワーニングを吐かなくなります。
See Also:
ファームウェアを更新する (USBasp 2個を使ったやり方)
ここでは USBasp 2個を使ったファームウェア更新方法をご紹介します。
- USBasp 2個をリボンケーブルで繋ぎます。
- 書き込まれる側 (PC に接続しない方) の USBasp の JP2 をショートします。JP1 は 5V 側、JP3 はオープンにしておきます。
- PC に接続します。
- Zadig を使って USBasp のドライバを libusbk に変更します。もし、リストに USBasp が出ていない場合には、[Options | List All Devices] にチェックを入れます。
- C:\USBASP フォルダを作ります。
- ファームウェアを DL します (usbasp.2011-05-28.tar.gz)。
- tar.gz を解凍し、usbasp.atmega8.2011-05-28.hex を C:\USBASP へコピーします。
- 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
|
赤字の所は環境に応じて書き換えてください。
- 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 がショートになっていません。
- 書き込まれる側の USBasp の JP2 をオープンにします
- USBasp の結線を解除します。
逆に接続してもう一つの USBasp のファームも書き換えましょう。
USBasp を Arduino として使う
USBasp の MCU は Atmel ATMega8 です。ATMega8 を使った Arduino としては Arduino Serial / Extreme / NG (Nuova Generazione) があります...ならば USBasp だって Arduino として使えます。
- MCU: Atmel ATmega8
- FLASH: 8KB
- SRAM: 1KB
- EEPROM: 512B
- CLOCK: 16MHz (USBasp は 12MHz 動作)
- VOLTAGE: 2.7~5.5V
用意するものは USBasp 2個だけです。片方は Arduino Uno とかでもいいのですが、USBasp 2個の方が接続が簡単です。では USBasp で L チカしてみましょう。
Arduino NG 化
- USBasp 2個をリボンケーブルで繋ぎます。
- Arduino 化する側 (PC に接続しない方) の USBasp の JP2 をショートします。JP1 は 5V 側、JP3 はオープンにしておきます。
- Arduino IDE の [ツール] で以下のように設定します。
- ボード: Arduino NG or older
- プロセッサ: ATmega8
- 書込装置: USBasp
- [ツール | ブートローダーを書き込む] で ブートローダーを書き込みます。
これで USBasp が Ardunio NG モドキになりました。
スケッチの書き込み
- [ファイル | スケッチ例 | 01.Basics | Blink] を開きます
- 詳しくは後述しますが、USBasp の R と書いてある LED は A1 に接続されているので、LED_BUILTIN または 13 となっている所を A1 で書き換えます (3か所)。
- [スケッチ | 書き込み装置を使って書き込む] でコンパイル&転送します。
- スケッチを書き換えない場合には、書き込み側の USBasp を外し、LED をこのように接続します。抜き差ししなくてはいけないので少々面倒です。
ポート
ボード上のポートは以下の通りです。
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:
ここにある情報が役に立って、「調べる手間が省けたからオマイに飯でもおごってやるよ」 というハートウォーミングな方がいらっしゃいましたら、下のボタンからどうぞ。