現: 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''を選択出来るようになる。~
  

  • 開発/AVR/AVR Writer/USBtinyISP のバックアップ差分(No. All)
    • 現: 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

トップ   差分 バックアップ 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom
Counter: 60, today: 2, yesterday: 2