現: 2024-12-24 (火) 13:45:51 yuji Deleted an attach file: usbasp.png at 2025-01-15 (水) 13:46:58 at 2025-01-15 (水) 13:47:36 at 2025-01-17 (金) 10:01:12, Deleted an attach file: usbasp_sch.png at 2025-01-17 (金) 10:02:02 at 2025-01-17 (金) 10:05:59 at 2025-01-23 (木) 12:25:41, Deleted an attach file: usbasp_org.png at 2025-01-24 (金) 17:30:02 |
|||
---|---|---|---|
Line 1: | Line 1: | ||
+ | * USBasp [#qd86266c] | ||
+ | &ref(usbasp_org.png,,around);[[USBasp>https://www.fischl.de/usbasp/]]は[[Thomas Fischl>https://www.fischl.de/]]氏が作られたATMEL AVRマイクロコントローラー用のUSB接続AVR ISP(in-circuit programmer) で,部品点数も少ないので自作する人も多い。~ | ||
+ | ''自作する場合はUSBaspにfirmwareを書き込むため,別に何らかのAVR Writerが必要になる'' &worried; | ||
+ | |||
+ | 多くのUSBasp互換品が[[Amazon>https://amzn.to/408fpUf]]でも安価に販売されていて,自作するよりも安いので購入(300円ぐらいだった)してみた。~ | ||
+ | #ref(usbasp.png,,15%) | ||
+ | |||
+ | USBaspはCPUに[[ATmega8>https://www.microchip.com/en-us/product/atmega8]]を使って,USBコントローラICを使わずに[[V-USB:https://www.obdev.at/products/vusb/index.html]]((V-USBは,AVRマイクロコントローラーの任意の2つのIOポートを使ってUSBのD+/D-の信号をエミュレートして,擬似的にAVRマイコンをLow-speed USBデバイスにするというもの。))を使ってUSB接続できるようにしている。~ | ||
+ | |||
+ | #clear | ||
+ | |||
+ | ** 対応デバイス [#qc05fe71] | ||
+ | - 8051シリーズ~ | ||
+ | AT89S51,AT89S52,AT89S53,AT89S8253,AT89S2051,AT89S8252,AT89S4051~ | ||
+ | - AVRシリーズ~ | ||
+ | AT90can128,AT90can32,AT90can64,AT90pwm2,AT90pwm3,AT90s1200,AT90s2313,~ | ||
+ | AT90s2323,AT90s2343,AT90s4414,AT90S8515,AT90S8535,AT90usb1286,AT90usb1287,~ | ||
+ | Atmega103,Atmega1281,ATmega1280,ATmega16,ATmega128,ATmega161,ATmega162,~ | ||
+ | ATmega163,ATmega168,Atmega164,Atmega165,Atmega169,ATmega2560,ATmega2561,~ | ||
+ | ATmega32,Atmega323,Atmega324,Atmega325,ATmega328P,Atmega3250,Atmega3259,~ | ||
+ | Atmega329,Atmega3290,Atmega406,Atmega48,Atmega64,Atmega640,Atmega644,~ | ||
+ | Atmega645,Atmega6450,Atmega649,Atmega6490,ATmega8,ATMEGA8515,Atmega8535,~ | ||
+ | ATmega88,~ | ||
+ | Attiny11,Attiny12,Attiny13,ATtiny15,Attiny22,ATtiny2313,Attiny24,Attiny25,~ | ||
+ | Attiny26,Attiny261,Attiny28,Attiny44,Attiny45,Attiny46,Attiny461,Attiny84,~ | ||
+ | Attiny85,Attiny861~ | ||
+ | |||
+ | ** 回路図 [#gf1ac626] | ||
+ | - USBasp(オリジナル)の回路図~ | ||
+ | #ref(usbasp_circuit.png,,60%) | ||
+ | - Amazonで購入した互換品USBasp V2.0の回路図~ | ||
+ | #ref(usbasp_sch.png,,30%) | ||
+ | |||
+ | 10pin ISPコネクターの4番pinにTXD,6番pinにRXDが接続されている。~ | ||
+ | なので,ターゲットボードが[[AVR ISP 10pinコネクター>../../AVR ISPコネクター]]を使っている場合には''4番pinと6番pinを接続しないように注意が必要''。~ | ||
+ | |||
+ | Amazonで購入した互換品USBasp V2.0では,付属している10pin-6pinアダプターを使うと10pinの4番pinと6番pinは6pin ISPコネクターとは接続されていないのでそのまま接続できる。~ | ||
+ | |||
+ | *** 互換品USBaspの問題点 [#y657a364] | ||
+ | オリジナルのUSBaspではターゲットボードへの5V供給するかしないかのJumperポストがある。~ | ||
+ | しかし,CPUのATmega8は常にUSBからの5Vで動作しているので,3.3Vセルフパワーのターゲットボードと接続した場合,抵抗270Ωがあるのでなんとか使用できる。~ | ||
+ | |||
+ | 一方,[[Amazonで購入できる互換品USBasp V2.0>https://amzn.to/408fpUf]]は,3.3V降圧回路が実装されていてターゲットボードに5V/3.3Vを切り替えながら供給するかしないかをJumperポストで設定出来るが,オリジナルと同様にCPUのATmega8は常にUSBからの5Vで動作している。3.3Vターゲットボードを接続すると,(抵抗270Ωが実装されていないので)3.3Vを超える電圧になってしまうため直接接続することは出来ない。~ | ||
+ | |||
+ | なので互換品USBaspは,5Vターゲットボードのみの使用となる。~ | ||
+ | |||
+ | *** 互換品USBasp V2.0の改造 [#x552cd45] | ||
+ | 3.3Vターゲットボードへの書き込みに,安全に互換品USBasp V2.0が使用できるように改造してみた。~ | ||
+ | |||
+ | 互換品USBaspで3.3Vを供給するJumper設定にした場合,CPUのATmega8の電源も3.3Vになるように変更する。~ | ||
+ | |||
+ | 改造回路図~ | ||
+ | #ref(usbasp2_mod_sch.png,,30%) | ||
+ | |||
+ | 実際には以下のように改造した。~ | ||
+ | - 部品面のF1を外す。~ | ||
+ | #ref(usbasp_mod1.png,,10%) | ||
+ | - 半田面のAMS1117-3.3Vの右側のパターンをカットする。~ | ||
+ | - JP1 Vcc2BoadをR5右にワイヤーで接続。~ | ||
+ | - JP1 5V --- F1 --- USB 5Vにワイヤーで接続。~ | ||
+ | #ref(usbasp.mod2.png,,10%) | ||
+ | |||
+ | これで,3.3Vターゲットボードに3.3Vを供給する場合,CPUのATmega8も3.3Vで動作するようになるので,問題なく3.3VターゲットボードでもUSBaspが使用できるようになった。~ | ||
+ | |||
+ | ** 使い方 [#kd1aa238] | ||
+ | WindowsマシンでUSBaspを使い方。~ | ||
+ | |||
+ | *** USBaspのJumper [#xeb56ea3] | ||
+ | オリジナルのUSBaspと互換品とは,Jumperの番号や機能が違っている。~ | ||
+ | |オリジナル|購入した互換品|内容|h | ||
+ | |JP3|JP1|ターゲットボード電圧設定&br;オリジナル品:5Vの供給/供給しない&br;互換品V2.0:3.3V/5Vの切替| | ||
+ | |JP2|JP2|ファームウェア書換用&br;Jumperなし: 通常&br;Jumperあり:書換時| | ||
+ | |JP1|JP3|ISP通信速度&br;Jumperなし:通常&br;Jumperあり:低速(ATtiny用)| | ||
+ | |||
+ | ターゲットボードに合わせて上記のJP1とJP3を設定する。~ | ||
+ | |||
+ | *** Windows用デバイスドライバー [#w20ba545] | ||
+ | WindowsマシンにUSBaspを初めてUSBコネクターに接続すると,デバイスマネージャーで確認すると!マークでデバイスドライバーはロードされない。~ | ||
+ | |||
+ | デバイスドライバーは[[作者のページ>https://www.fischl.de/usbasp/]]にあってダウンロードできるのだが,デジタル署名がされていないのでWindows 10ではインストールが難儀になる。~ | ||
+ | |||
+ | なので,[[Zadig>https://zadig.akeo.ie/]]ツールを使ってデバイスドライバーをインストールするのが便利。~ | ||
+ | ZadigのサイトのDownloadにある[[最新の実行ファイル>https://github.com/pbatard/libwdi/releases/download/v1.5.1/zadig-2.9.exe]]をダウンロードする。~ | ||
+ | ダウンロードしたexeファイルをダブルクリックして起動する。~ | ||
+ | USBaspを選択して,使用するデバイスドライバーに''libusbk''を選択してInstall Driverボタンを押す。~ | ||
+ | |||
+ | これでUSBaspのデバイスドライバーとしてlibusbk(汎用USBデバイスドライバーlibUSB-win32の上位互換のデバイスドライバー)が使われるようになる。~ | ||
+ | |||
+ | 再度USBコネクターに挿入し直して,デバイスマネージャーでデバイスドライバーがロードされていれば正常にインストールできている。~ | ||
+ | |||
+ | ちなみにLinuxやMacOS Xマシンの場合は,デフォルトでlibusbのデバイスドライバーが用意されているので,USBコネクターにUSBaspを挿入するだけで使える。 | ||
+ | |||
+ | *** avrdudeで使用する [#j04b2a3f] | ||
+ | バージョン5.2以降のavrdudeではUSBaspに対応していてavrdude.confにUSBasp(互換品を含む)の定義が入っているので,問題なくavrdudeでプログラムをターゲットボードに書き込むことが出来た。~ | ||
+ | > avrdude -p m168p -c usbasp -P usb -t | ||
+ | |||
+ | *** Arduino IDEで使用する [#t57df2ee] | ||
+ | Arduino IDEからUSBaspを使用する。~ | ||
+ | |||
+ | ''%LocalAppData%\Arduino15\packages\arduino\hardware\avr\1.8.5\programmers.txt''ファイルに,以下のような定義があることを確認する。なければ追加する。~ | ||
+ | usbasp.name=USBasp | ||
+ | usbasp.communication=usb | ||
+ | usbasp.protocol=usbasp | ||
+ | usbasp.program.protocol=usbasp | ||
+ | usbasp.program.tool=avrdude | ||
+ | usbasp.program.tool.default=avrdude | ||
+ | usbasp.program.extra_params=-Pusb | ||
+ | |||
+ | Arduino IDEで,ツール>書込装置で''USBasp''を選択すれば使用できるようになる。~ | ||
+ | #ref(arduinoide.png,,60%) | ||
+ | |||
+ | ** USBaspのファームウェアの更新 [#bae1af90] | ||
+ | 購入した互換USBaspなのだが,どうもfirmwareが古い(v1.2)ようで,avrdudeを使うと「cannot set sck period.please check for usbasp firmware update.」と警告メッセージが出る。~ | ||
+ | また,ATmega2560などのFlash ROMが128KB以上のCPUなどにうまく書き込めない。~ | ||
+ | |||
+ | そこでUSBaspのファームウェアを更新してみた。~ | ||
+ | |||
+ | 最新のファームウェアは,[[作者のページ>http://www.fischl.de/usbasp/]]から[[usbasp.2011-05-28.tar.gz>https://www.fischl.de/usbasp/usbasp.2011-05-28.tar.gz]](v1.04)ファイルとしてダウンロード出来る。~ | ||
+ | |||
+ | ダウンロード後,任意のフォルダーにusbasp.2011-05-28.tar.gzを解凍しておく。~ | ||
+ | |||
+ | USBaspのfirmwareを更新するには,別に何らかのAVR Writerが必要となる ;) ~ | ||
+ | |||
+ | *** Arduino UnoをAVR Writerにして更新する方法 [#hf30ca41] | ||
+ | 他のAVR Writerが無い場合,手元にある[[AVRマイコンのボードをAVR Writerにして>../Arduino as ISP]],それを使ってUSBaspのfirmwareを更新できる。~ | ||
+ | |||
+ | 試しにArduino UnoをAVR Writerとして使用できるようにしてみる。~ | ||
+ | - Arduino UnoをPCと接続する。~ | ||
+ | - Arduino IDEのファイル>スケッチの例>ArduinoISPを開く。~ | ||
+ | - Arudiono UnoにArduino ISPスケッチを書き込む。~ | ||
+ | |||
+ | これで,Arduino UnoがAVR Writerとして使用できるようになった。~ | ||
+ | |||
+ | 以下の内容で''firmupdate.bat''ファイルを作成する。~ | ||
+ | @echo off | ||
+ | SET AVRDUDE_PATH=C:\WinApl\develop\arduino-1.8.19\hardware\tools\avr | ||
+ | SET COM_PORT=COM2 | ||
+ | |||
+ | "%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 | ||
+ | ) | ||
+ | |||
+ | 以下のようにしてファームウェアを更新する。~ | ||
+ | - USBaspのJP2をジャンパーする。~ | ||
+ | - USBaspのJP1を5Vにする。~ | ||
+ | - USBaspのJP3はオープンにする。~ | ||
+ | - Arduino UnoとUSBaspを接続する。~ | ||
+ | |Arduino Uno|USBasp|h | ||
+ | |GND|GND | | ||
+ | |13 |SCK | | ||
+ | |12 |MISO | | ||
+ | |11 |MOSI | | ||
+ | |10 |RST | | ||
+ | |5V |VCC | | ||
+ | - 上記の更新するファームウェアを用意する。~ | ||
+ | - 作成したfirmupdate.batを実行する~ | ||
+ | コマンドプロンプトを開いて, | ||
+ | > firmwareupdate.bat | ||
+ | とする。~ | ||
+ | なにかエラー等が表示されていなければ,うまく更新できている。~ | ||
+ | - USBaspのJP2をジャンパーを取り外す。~ | ||
+ | - Arduino UnoとUSBaspの接続を外す。~ | ||
+ | |||
+ | これでUSBaspのファームウェアを更新することができる。 | ||
+ | |||
+ | *** 別のUSBaspを使って更新する [#o93fbe62] | ||
+ | ファームウェアの更新をする時に使用するAVR Writerに別のUSBaspを使用する事もできる。AmazonなんかだとUSBasp2個一緒にして販売されているのは,このためなのかも。~ | ||
+ | |||
+ | 以下の内容で''firmupdate2.bat''ファイルを作成する。~ | ||
+ | @echo off | ||
+ | SET AVRDUDE_PATH=C:\WinApl\develop\arduino-1.8.19\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 | ||
+ | ) | ||
+ | |||
+ | 以下のようにしてファームウェアを更新する。~ | ||
+ | - USBasp同士をケーブルで接続する。~ | ||
+ | - 更新される側のUSBaspのJP2をジャンパーする。~ | ||
+ | - 更新される側のUSBaspのJP1を5Vにする。~ | ||
+ | - 更新される側のUSBaspのJP3はオープンにする。~ | ||
+ | - PCとWriter側のUSBaspを接続する。~ | ||
+ | - Zadigを使ってUSBaspのデバイスドライバーをlibusbkに変更する。~ | ||
+ | もし,リストにUSBaspが表示されない場合は,Options>List All Devicesにチェックをする。~ | ||
+ | - 上記の更新するファームウェアを用意する。~ | ||
+ | - 作成したfirmupdate2.batを実行する~ | ||
+ | コマンドプロンプトを開いて, | ||
+ | > firmwareupdate2.bat | ||
+ | とする。~ | ||
+ | なにかエラー等が表示されていなければ,うまく更新できている。~ | ||
+ | - 更新されたUSBaspのJP2をジャンパーを取り外す。~ | ||
+ | - USBasp同士の接続を外す。~ | ||
+ | |||
+ | これで,USBaspのファームウェアを更新することが出来る。~ | ||
+ | この後,逆に接続してもう一つのUSBaspのファームウェアも更新する。~ |