現: 2025-01-12 (日) 10:48:38 yuji Deleted an attach file: USBtinyISP_Sch.pdf at 2025-01-20 (月) 21:45:17, Deleted an attach file: LittleWire.png at 2025-01-26 (日) 09:13:11 |
|||
---|---|---|---|
Line 1: | Line 1: | ||
+ | * USBtinyISP [#i75c916e] | ||
+ | [[USBtinyISP>http://www.ladyada.net/make/usbtinyisp/]]は,CPUにATtiny2313などの[[ATtinyマイクロコントローラー>https://www.microchip.com/en-us/about/corporate-overview/acquisitions/atmel/attiny]]を使用したUSB接続のAVR Writer(ISP)。~ | ||
+ | Windows,Linux,MacOSXなどのマルチプラットフォームで使用できる。~ | ||
+ | Dick Streefland氏の[[USBtinyプロジェクト>https://dicks.home.xs4all.nl/avr/usbtiny/index.html]]がベースになり,[[lady ada氏>http://www.ladyada.net/make/usbtinyisp/]]によりUSBtinyISPが作られた。~ | ||
+ | このUSBtinyISPを[[AdafruitがKit製品化>https://learn.adafruit.com/usbtinyisp/]]して販売している。~ | ||
+ | |||
+ | 派生バージョンも多く作成されていて,Julian Schuler氏の[[USBtinyISP>https://github.com/julianschuler/USBtinyISP/]]もそのひとつで,''ATtiny24A''を使用してより小型化している。~ | ||
+ | |||
+ | ihsan Kehribar氏は''ATtiny85''を使用して,さらに小型の[[Little Wire>https://littlewire.github.io/]]を作成されている。~ | ||
+ | |||
+ | USBtinyISPは部品点数も少なく自作も安価に容易にでき,書き込みツールには一般的に使用されるAVRStudioやavrdudeで使用できる。~ | ||
+ | |||
+ | しかし残念ながら64KB以上のFlash ROMを搭載している''Atmega1281,1280,2560,2561には,対応していない。''~ | ||
+ | |||
+ | * AdafruitのUSBtinyISP v2.0 [#v6cbeaf6] | ||
+ | [[lady ada氏>http://www.ladyada.net/make/usbtinyisp/]]に作られたUSBtinyISPで,CPUに20pinのATtiny2313を使用している。~ | ||
+ | USBコントローラーは使わず,[[V-USB:https://www.obdev.at/products/vusb/index.html]]を使ってUSB接続できるようにしている。~ | ||
+ | |||
+ | このUSBtinyISP v2.0を[[AdafruitがKit製品化>https://learn.adafruit.com/usbtinyisp/]]して販売している。~ | ||
+ | #ref(usbtinyisp_ada.png,,60%) | ||
+ | |||
+ | また,[[AmazonでもAdafruit版の互換品>https://amzn.to/40cLrx9]](ケースとかは無いけど)が安価で販売されている。~ | ||
+ | |||
+ | 5Vを3.3VにするDC-DCコンバーターは実装されていないので,ターゲットボードに3.3Vを供給することは出来ない。~ | ||
+ | USBからの5Vをターゲットボードに供給するかしないかの切り替えはできる。~ | ||
+ | |||
+ | セルフパワーの3.3Vターゲットボードでも問題なく使用できる。~ | ||
+ | #ref(usbtinyisp2sch.png) | ||
+ | |||
+ | ** Adafruit USBtinyISP v2.0のfirmware [#oe08cf60] | ||
+ | AdafruitのUSBtinyISP v2.0をUSB接続のAVR Writerとして機能させるためのfirmwareは, | ||
+ | [[Adafruit>https://learn.adafruit.com/usbtinyisp/download]]でダウンロード出来る。~ | ||
+ | |||
+ | USBtinyISPのfirmwareだけでなく,赤外線リモコン受信機にするfirmwareも入っている。~ | ||
+ | |||
+ | ''自作した場合はfirmwareを書き込むため,何らかの別のAVR Writerが必要になる'' &worried; ~ | ||
+ | |||
+ | spiディレクトリにあるコンパイル済みの''main.hex''をATtinyISPに書き込む。~ | ||
+ | > avrdude -c usbasp -p t2313 -U flash:w:main.hex U hfuse:w:0xdf:m -U lfuse:w:0xef:m | ||
+ | |||
+ | ** AdafruitのUSBtinyISP v2.0の設定 [#m8c9ef49] | ||
+ | AdafruitのUSBtinyISP v2.0では,JP1がジャンパーされるとUSBの5VがそのままターゲーットボードのVCCとして給電される。~ | ||
+ | 3.3VにするDC-DCコンバーター回路は実装されていないので,ターゲットボードに3.3Vを給電することは出来ない。~ | ||
+ | |Jumper|説明|h | ||
+ | |JP1|ターゲットボードへの給電&br;Jumperなし:給電なし&br;Jumperあり:5V給電| | ||
+ | |||
+ | ターゲットボードに合わせてJP1を設定する。~ | ||
+ | |||
+ | ** 互換品USBtinyISP v2.0の問題 [#n8418979] | ||
+ | Amazonで販売されている[[Adafruit USBtinyISP v2.0の互換品>https://amzn.to/40cLrx9]]を購入してみた。~ | ||
+ | #ref(usbtinyisp.png,,50%) | ||
+ | |||
+ | この互換品USBtinyISP v2.0は,bufferチップが本来74AHC125が実装されるところを74HC125が実装されていた。~ | ||
+ | |||
+ | 74HC125は電源電圧以上の電圧の入力を形容しないので,Jumperポストを外して3.3Vターゲットボードを接続した場合は,(ATtiny2313は5Vで動作しているので)最悪74HC125が破壊するかもしれない。~ | ||
+ | |||
+ | 3.3Vターゲットボードに使う場合は,bufferチップを''74AHC125''に交換すべきである。~ | ||
+ | |||
+ | * Julian Schuler氏のUSBtinyISP [#qc3c333c] | ||
+ | Julian Schuler氏は,CPUに14pinのATtiny24Aを使用して[[小型化したUSBtinyISP>https://github.com/julianschuler/USBtinyISP]]を作成している。~ | ||
+ | |||
+ | 3.3VDC-DCコンバーターを実装し,500mA/5Vや300mA/3.3Vを切り替えてISPコネクターからターゲットボードに供給できる。~ | ||
+ | またセルフ3.3Vターゲットボードであっても,問題なく使用できるように設計されている。~ | ||
+ | #ref(USBtinyISP_Sch.png,,50%) | ||
+ | |||
+ | ** firmware [#a56a51e7] | ||
+ | [[こちら>https://github.com/julianschuler/USBtinyISP]]のページでメンテナンスされている。~ | ||
+ | |||
+ | Julian Schuler氏のUSBtinyISPを自作した場合は,ビルド済みの''main.hex''があるので,これを作成したUSBtinyISPに書き込む。~ | ||
+ | > avrdude -c usbasp -p t24 -P usb -U flash:w:main.hex -U hfuse:w:0xd7:m -U lfuse:w:0xef:m | ||
+ | |||
+ | ** Julian Schuler氏のUSBtinyISPの設定 [#n01c24de] | ||
+ | |DIPSW|説明|h | ||
+ | |1 |ターゲットボードへの給電&br;ON=給電&br;OFF=非給電| | ||
+ | |2 |供給電圧切替&br;ON=5V&br;OFF=3.3V| | ||
+ | |||
+ | * Little Wire [#v3ec949b] | ||
+ | &ref(littlewire.png,,30%,around);[[Little Wire>https://littlewire.github.io/]]は,Ihsan Kehribar氏によって8pinのATtiny85を使って設計されたミニマムなUSB制御のハードウェアで,USBtinyISPとしても動作する。~ | ||
+ | |||
+ | #clear | ||
+ | |||
+ | #ref(Little-Wire_sch.png,,20%) | ||
+ | |||
+ | ATtiny85は端子がたった8pinしか無いので,12MHzのX'Talを使わずに内蔵RC発振器(+調整)とPLL機能を使って16.5MHzのクロックが使用できるようにしている :-o | ||
+ | |||
+ | ** 自作してみた。 [#p8a80ccd] | ||
+ | 上記の回路図のように1時間ぐらいで出来そうなので,手持ちの部品で自作してみた。~ | ||
+ | #ref(yujiLittleWire.png,,10%) | ||
+ | Jumperなしで3.3VターゲットボードからVTGが供給される場合の対応として,ISPの各信号に300Ωの抵抗を直列に追加した。~ | ||
+ | USBコネクターがTypeBなんでちょっと大きいかな ;) | ||
+ | |||
+ | P.S. ATtiny85Vでも動作した。なんで :-o | ||
+ | |||
+ | ** ソフトウェア [#o1e129b6] | ||
+ | Little Wireのメンテナンスは,[[こちら>https://github.com/littlewire/Little-Wire]]で行われている。[[アーカイブ・ファイル>https://github.com/littlewire/Little-Wire/archive/master.zip]]もダウンロードできる。~ | ||
+ | |||
+ | Little Wireを構成するソフトウェアは以下になる。~ | ||
+ | - ATtiny85で使用できるbootloader。~ | ||
+ | - USBtinyISP互換のfirmware。~ | ||
+ | |||
+ | *** ATtiny用bootloader [#peb606b5] | ||
+ | ATtiny用のbootloaderとして[[micronucleus bootloader>https://github.com/micronucleus/micronucleus.git]]が使われている。(他のbootloaderとしてはOptibootもあるようだ。)~ | ||
+ | |||
+ | ATtiny85でのmicronucleus bootloaderは,CPUのクロックを内部RC発振器とPLLを工夫して16.5MHzにしている。これはおそらくUSB1.1のクロックの整数倍にすることで,クロック誤差が出にくいようにしていると思われる。~ | ||
+ | |||
+ | USBtinyISP互換機能の場合,ATtiny85全てのpinをI/Oポートとして利用する必要がある。~ | ||
+ | ATtinyシリーズの8pinの製品はResetとISP機能の両立は出来ない。これはFuseビット設定で行っているが(RSTDISBL=0),この設定でPB5をI/Oポートにすると外部からResetが出来なくなるため,ISPタイプのAVR WriterでFlash ROM書き換えは出来なくなってしまう。~ | ||
+ | なので,このままではUSBtinyISPのfirmwareの更新が難儀になってしまう。~ | ||
+ | |||
+ | micronucleus bootloaderを使うと,RSTDISBL=0設定によりISPタイプのAVR Writerが使用できなくなってしまうが,代わりにbootloaderの機能でUSB通信経由でユーザープログラムをFlash ROMに書き込めるようにしている。~ | ||
+ | |||
+ | この理由でLittle Wireではmicronucleus bootloaderを使用していると思われる。~ | ||
+ | |||
+ | - 最新のmicronucleus bootloaderを書き込む~ | ||
+ | micronucleus bootloaderのプロジェクトをダウンロードする。~ | ||
+ | > md attiny85 | ||
+ | > git clone https://github.com/micronucleus/micronucleus.git | ||
+ | micronucleus\firmware\releasesにビルド済みのhexファイルが有る。~ | ||
+ | そのhexファイルをATtiny85に書き込む。~ | ||
+ | > cd micronucleus\firmware\releases | ||
+ | |||
+ | カスタマイズしたいなどでビルドしたい場合,作者は''avr-gcc version7.3.0''を使われているようだ。~ | ||
+ | |||
+ | 他のAVR Writerとavrdudeを使って,micronucleus bootloaderを書き込んでFuseビットを設定する。~ | ||
+ | > avrdude -c usbasp -p t85 -U flash:w:t85_default.hex -U lfuse:w:0xe1:m -U hfuse:w:0x5d:m -U efuse:w:0xfe:m | ||
+ | |||
+ | ''RSTDISBL=0にFuseビットを設定しているので,以後はISPタイプのAVR Writerは使用できなくなる。''~ | ||
+ | |||
+ | *** micronucleus用のDevice Driverのインストール [#i60fb8d0] | ||
+ | ATtiny85にmicronucleus bootloaderが書き込めたら,PCのUSBコネクタと接続する。~ | ||
+ | 最初は不明のデバイスになるので,Windows用のデバイスドライバーをインストールする。 | ||
+ | |||
+ | [[Zadig>https://zadig.akeo.ie/]]ツールを使ってデバイスドライバーをインストールする。~ | ||
+ | ZadigのサイトのDownloadにある[[最新の実行ファイル>https://github.com/pbatard/libwdi/releases/download/v1.5.1/zadig-2.9.exe]]をダウンロードする。~ | ||
+ | ダウンロードしたexeファイルをダブルクリックして起動する。~ | ||
+ | unknown device1を選択して,名前を''Micronucleus''に編集して,使用するデバイスドライバーに''libusbk''を選択してInstall Driverボタンを押す。~ | ||
+ | |||
+ | これでmicronucleus bootloaderが書き込まれたLittle WireがUSBデバイスとして認識される。~ | ||
+ | VID: 0x16D0, PID: 0x0753 | ||
+ | |||
+ | *** Little Wireのfirmwareのインストール [#sa7a57b7] | ||
+ | Little Wireの互換USBtinyISP機能を持った[[firmware>http://littlewire.github.io/downloads.html]]の最新版はバージョン1.3。~ | ||
+ | [[こちら>https://github.com/littlewire/Little-Wire.git]]でメンテナンスされている。~ | ||
+ | カスタマイズしたいなどでビルドしたい場合,作者は''avr-gcc version7.3.0''を使われているようだ。~ | ||
+ | |||
+ | ATtiny85にLittle Wireのfirmwareを書き込むには,[[micronucleusコマンド>https://github.com/micronucleus/micronucleus]]を使用して,micronucleus bootloaderの機能によりFlash ROMに書き込む。~ | ||
+ | |||
+ | 以下の手順で行う。~ | ||
+ | - ''Little WireをPCのUSBとの接続をはずす'' | ||
+ | - micronucleusコマンドを使用する。~ | ||
+ | > micronucleus --run littlewire_v13.hex | ||
+ | Please plug in the device ... | ||
+ | と,メッセージが表示されたら''Little WireをPCのUSBに接続する。''~ | ||
+ | - 接続して数秒立つと,USBtinyISPと互換のfirmwareがATtiny85に書き込まれる。~ | ||
+ | - USBtinyISP互換のLittle Wireが動き出す。~ | ||
+ | |||
+ | うまく行ったら,Little WireをUSBコネクターから抜いて再度挿入してみる。~ | ||
+ | - USBコネクターにLittle Wireが挿入されるとLittle Wireの電源が入る。~ | ||
+ | - micronucleus bootloaderが起動する。~ | ||
+ | 6秒間,micronucleusコマンドを待つ。~ | ||
+ | ユーザープログラム等の書き込み要求コマンドなど何もなければ,ユーザープログラムのStartアドレス(Little Wire)にジャンプする。~ | ||
+ | - Little Wireのプログラムが起動。~ | ||
+ | - Windowsマシンのデバイスマネージャーで確認。~ | ||
+ | USBtinyISPのデバイスドライバーをインストールしていない場合:!マークの不明のデバイス。~ | ||
+ | USBtinyISPのデバイスドライバーをインストール済みの場合:USBtinyISPとして認識される。~ | ||
+ | |||
+ | *** ATtiny85の初期化 [#sf13b9b2] | ||
+ | FuseビットのRSTDISBL=0になっているのをRSTDISBL=1に戻すには,ISPタイプのAVR Writerでは出来ない。~ | ||
+ | |||
+ | STK500などの高電圧シリアルプログラミングが使用できるAVR Writerを使うと,ATtiny85のRSTDISBLを1に初期化することが出来る。~ | ||
+ | RSTDISBL=1に初期化出来たら,ISPタイプのAVR Writerが使用できるようになる。~ | ||
+ | |||
+ | * USBtinyISPの使い方 [#r0866d58] | ||
+ | Windowsマシンで,互換品USBtinyISP v2.0や自作したLittle Wireを使ってみた。~ | ||
+ | |||
+ | ** デバイスドライバーの用意 [#bc15436a] | ||
+ | Linux,MacOS Xマシンの場合は,デフォルトでデバイスドライバーが用意されているので,USBコネクターにUSBtinyISPをUSBコネクターに接続するだけで使える。~ | ||
+ | |||
+ | Windowsマシンで使用する場合は,汎用USBデバイスドライバーの[[libusb>/開発/libusb]]をインストールする必要がある。~ | ||
+ | 最初にWindowsマシンにUSBtinyISPをUSBポートに刺すと, | ||
+ | VID: 0x1781, PID: 0x0C9F | ||
+ | デバイスマネージャーで確認すると,!マークの不明のデバイスになっていて使用できない。~ | ||
+ | |||
+ | 今回は[[Adafruitからダウンロード出来るデバイスドライバー>https://learn.adafruit.com/usbtinyisp/download]]でなく,[[Zadig>https://zadig.akeo.ie/]]ツールを使ってインストールしてみた。~ | ||
+ | ZadigのサイトのDownloadにある[[最新の実行ファイル>https://github.com/pbatard/libwdi/releases/download/v1.5.1/zadig-2.9.exe]]をダウンロードする。~ | ||
+ | ダウンロードしたexeファイルをダブルクリックして起動する。~ | ||
+ | USBtinyISPを選択して,デバイスドライバーを''libusbk''を選択してInstall Driverボタンを押す。~ | ||
+ | |||
+ | これでUSBtinyISPのデバイスドライバーとして汎用USBデバイスドライバーlibUSB-win32互換のlibusbkが使われるようになる。~ | ||
+ | |||
+ | 再度デバイスマネージャーで確認してデバイスドライバーがロードされていればセットアップが出来ている。 | ||
+ | |||
+ | ** ターゲットボードのISPコネクターと接続 [#q7ec0548] | ||
+ | AVR Writerとして使用する場合は,''10pin ISPコネクター''か''6pin ISPコネクター''とターゲットボードの6pin ISPコネクターと接続する。~ | ||
+ | |USBtinyISP&br;10pin|USBtinyISP&br;6pin|ターゲットボード&br;6pin ISP|h | ||
+ | |9 MISO |1 MISO |1 MISO | | ||
+ | |2 VCC |2 VCC |2 VCC | | ||
+ | |7 SCK |3 SCK |3 SCK | | ||
+ | |1 MOSI |4 MOSI |4 MOSI | | ||
+ | |5 RST |5 RST |5 RST | | ||
+ | |4,6,8,10 GND |6 GND |6 GND | | ||
+ | |||
+ | ** avrdudeで使用する [#n68b9d54] | ||
+ | バージョン5.5以降のavrdudeではUSBtinyISPに対応していて,avrdude.confにUSBtinyISP(互換品を含む)の定義が入っているので,問題なくavrdudeでプログラムをターゲットボードに書き込むことが出来た。~ | ||
+ | > avrdude -c usbtiny -p atmega328 -P usb -U flash:w:ATmegaBOOT_328_usbio_8mhz.hex -U lock:w:0x0f:m | ||
+ | とか | ||
+ | > avrdude -c usbtiny -p m168p -P usb -t | ||
+ | とか,動作した。~ | ||
+ | |||
+ | *** Arduino IDEで使用する [#j384ec35] | ||
+ | Arduino IDEはavrdudeを使用しているので,外部書き込み器としてUSBtinyISPを使用できる。~ | ||
+ | |||
+ | Arduino IDEでUSBtinyISPを選択できるように,''%LocalAppData%\Arduino15\packages\arduino\hardware\avr\1.8.5\programmers.txt''ファイルに,以下のような定義があることを確認する。なければ追加する。~ | ||
+ | usbtinyisp.name=USBtinyISP | ||
+ | usbtinyisp.protocol=usbtiny | ||
+ | usbtinyisp.program.tool=avrdude | ||
+ | usbtinyisp.program.tool.default=avrdude | ||
+ | usbtinyisp.program.extra_params= | ||
+ | |||
+ | これでArduino IDEで,ツール>書込装置で''USBtinyISP''を選択出来るようになる。~ |