2009年04月30日

拡張「-rd」コマンド

asdの次のバージョンのために「-rd」コマンドを実装した。
このコマンド便利だけどAVRが接続されているときしか使えないのは
もったいない気がする。データベースはフルで持っているので
任意のAVRを指定すればWebページが開くようにする。

-rd [avr]

とするか

ーrx avr

xは未定。

にするかは悩むな。

-rDかな。
posted by Copyright (C) avrin All Rights Reserved. at 21:52| Comment(5) | TrackBack(0) | AVRSDD | このブログの読者になる | 更新情報をチェックする

2009年03月17日

AVRISP(II) stk500/avrdude command line wrapper, AVRSDD

AVRISP(mk2) stk500/avrdude command line wrapper

AVRISP(II) stk500/avrdude command line wrapper, AVRSDD
コマンドの比較(asd vs stk500.exe vs avrdude  )
動作確認環境:
asd 使用例:
設定: Windows stk500.exe で AVRISP mkII (USB)を使う
設定: Windows avrdude.exe で AVRISP mkII (USB)を使う
COMポートタイプのAVRISPライタを使う:
avrdudeでほかのAVRライタを使う:
ISPクロック周波数設定 :STK500.exeを使う場合
ISPクロック周波数設定 : avrdudeを使う場合
実行パスの検索順序
fuse.txtの入手
その他のコマンド
デバッグ・コマンド
うまく動作しない時
Linux対応
avrdudeのバージョン
新しいデバイスに対応する
Ver.0.1.3-alpha
download


AVRISP(II) stk500/avrdude command line wrapper, AVRSDD


AVR-Studioに付属するcommand line版 AVR programmer 「stk500.exe」と
WinAVRに付属するcommand line版 AVR programmer 「avrdude.exe」の
command lineオペレーションをラップして使いやすくするソフトです。

command lineオペレーションはavrsp(x),hidspxライクな非常に簡単で
使いやすいものとなっています。

ATMELのAVRISP(II)をcommand lineやMakefileから
操作したい時に簡単な記述で使うことができます。

さらに、別ソフトavrwanと組み合わせればAVR-Studio上でワンクリック
書き込みができる様に設定が可能です。
BASCOM-AVRやMikroCはそのまま登録すればワンクリック書き込み可能です。

ライタソフトにavrdudeを使えばAVR-Studioがない環境でも
AVRISP(II) を簡単なコマンドで使用することが可能です。

asd-chart.gif
コマンドの比較(asd vs stk500.exe vs avrdude  )

Flash/EEPROMの書込み/ベリファイ
>asd foo.hex  bar.eep 
>stk500.exe -cUSB -dATtiny45 -e -pb -iffoo.hex -iebar.eep -vb
>avrdude -p t45 -c usbasp -U flash:w:foo.hex:a -U eeprom:w:bar.eep:a

Fuse書込み/ベリファイ
>asd -fl0xe2  -fh0xdf  -fx0xff 
>stk500.exe -cUSB -dATtiny45 -fDFE2 -FDFE2 -EFF -GFF
>avrdude -p t45 -c usbasp -u -U lfuse:w:0xe2:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m

Fuse読出し
>asd -rf 
>stk500.exe -cUSB -dATtiny45 -q
>avrdude -p t45 -c usbasp -U lfuse:r:-:h -U hfuse:r:-:h -U efuse:r:-:h



注意点:
現在はアルファバージョンにつき仕様については今後、
変更、追加、修正されます。
Linuxでの動作確認は手薄になりがちです。(汗


動作確認環境:
OS: Windows XP   stk500.exe(AVR-Studio) または avrdude.exe(WinAVR)
OS: Linux Debian etch KURO-BOX(PowerPC)  avrdude , Ruby 1.8.5 

AVRライタ: 78k0 Writer(AVRISP互換 仮想COM port),
           USBasp(USB) ,
           AVR-Doper(HID USB),AVR-Doper(AVRISP互換 仮想COM port)
           AVRminiprog(AVRISP mkII互換 USB)
対応書き込み方式:ISP方式のみ(HVSPは未対応)

コマンド:
実際に使用するコマンドはasd.exeです。(Linuxはasd)
ほとんどがavrsp(x),hidspxと類似です。

使用可能なコマンドは以下で表示されます。
>asd -h
asd 使用例: * デバイス情報読み出し
>asd -r
* Flash書き込み
>asd file.hex
* Flash読み出し
>asd -rp
* Fuse 読み出し
>asd -rf
* Fuse 書き込み(2進表現は未サポート)
>asd -fL0xE4 -fH0xDF
* 現在のFuse内容をWebページで詳細確認(Windows版のみ)
>asd -ri
* hidspx.iniのbookmark互換(Windows版のみ) kumanさんのWEBページをブラウザで開きます。(^^;
>asd --kuman
対応AVRを表示する
>asd -?
これらのコマンドはhidspxのコマンドと同一なのでhidspxを使ったことが あれば違和感なく使用できると思います。 動作速度は内部で複数のコマンドを発行している関係上2〜3秒のタイムラグが ありますが簡単なcommand line引数なので動作速度以上のメリットはあると思います。 設定: Windows stk500.exe で AVRISP mkII (USB)を使う場合 デフォルトで 「STK500.exe」で「AVRISP mkII (USB)」 を使う設定になっていますので AVR-Studioがインストールされている必要があります。 (stk500.exeの場所は自動で認識します) 「avrdude」を使う場合は後の項を参照してください。 1.avrsdd-verx.x.x.zipを日本語やスペースを含まないフォルダに解凍してください。 必要なファイルはひとまず「asd.exe」と「asd.ini」だけです。 (「fuse.txt」は含まれていませんが持っている場合は同じフォルダに 入れてください。) このフォルダにパスを通すかパスの通ったフォルダに2つのファイルを置きます。 2.「AVRISP mkII (USB)」にターゲットをつなげば準備完了です。 3.コマンドプロンプトを開いてコマンドを入力します。 デバイス情報表示コマンドを入力してみます。
>asd -r
Detected device is ATtiny45.
Device Signature  = 1E-92-06
Flash Memory Size = 4096 byte
EEPROM Size       = 256 bytes
上のように表示されればOKです。 エラーメッセージが表示されたときは設定を確認してください。 設定: Windows avrdude.exe で AVRISP mkII (USB)を使う場合 基本的に上記stk500.exeと同様ですが「Windows Vistaの場合」Libusbドライバに 非常に危険な不具合がありますのでavrdudeでAVRISP(mkII USB)の使用はできません。 以下はWindows XPのみの説明です。 1.「asd.exe」に実行パスを通してください。 2. WinAVRがインストールされWinAVRでC言語のコンパイルができていれば 環境変数PATH設定はOKと思います、 一応WinAVRフォルダのbin内にavrdude.exeがあることを確認してください。 3.メモ帳で「asd.ini」を開き 「-psu」を「-pdu」に変更し保存ます。 4.LibUSBドライバのインストール *注意:この操作はWindows Vistaでは行わないようにしてください。  PCが操作不能になる恐れがあります。詳細は「Libusb vista」で  検索して見てください。 AVR-Studioがインストールされている場合、WinAVRのドキュメントに従って AVR-Studioが使用するUSBドライバを削除する必要があります。 これをしないとavrdudeでUSBデバイスが認識できません。 AVRISP mkII (USB)を「USB端子に接続した状態」でデバイスマネージャの「Jungo」 の中の「AVRISP mkII」を右クリックで削除。 USB端子を差し直しドライバインストールで「自動インストール」ではなく 「一覧または特定の場所からインストール」 にチェックを入れさらに次の画面で 「検索しないでインストールするドライバを指定する」 を選択します。 WinAVRの20081205場合、例えば E:\WinAVR-20081205\utils\libusb\bin フォルダを指定してLibusbドライバをインストールします。 (逆にAVR-Studioから使用したいときはUSB接続した状態から デバイスマネージャで「LibUSB-Win32 Devices」の中の「AVRISP mkII」を 右クリックで削除、USB端子の再接続、「ドライバの自動インストール」を 実行します。) あとはcommand lineから
>asd -r
と入力しデバイス情報が表示されればOKです。 COMポートタイプのAVRISPライタを使う: ATMELの旧タイプAVRISPやTADさんの78k0ライタはCOMポートを使用します。 この場合は「asd.ini」を編集して使用するCOMポート番号を指定します。 STK500.exeで「COM3」を使う場合、 「-psu」を「-ps3」に変更します。指定可能なのは「-ps1 〜 -ps8」までです。 使用可能なCOMポートを調べるにはライタをPCに接続した状態で 「-ps?」コマンドを実行します。
>asd -ps? 
STK500 command line programmer, v 2.2 Atmel Corp (C) 2004-2005.

Scanning ports:
COM1 ... Port busy or STK500 not connected
COM2 ... Port busy or STK500 not connected
COM3 ... Connected to STK500 V2 on port COM3
Getting ISP frequency: 115.2 kHz (0x02)
Connection to STK500 V2 closed
と表示されます。この場合COM3が使用可能です。 同時にISPクロック周波数も確認できます。 avrdude.exeで「COM3」を使う場合、 「-pdu」を「-pd3」に変更します。同様に「-pd1 〜 -pd9」までです。 avrdudeでほかのAVRライタを使う: avrdudeは海外で開発された多数のAVRライタをサポートしていますが asdは「ポートとプログラマ」の組合わせのみ指定可能です。 (現状では他のオプションは指定できません) 例えば「AVR-DoperをHIDモード」で使う場合「asd.ini」で以下のように指定します。
avrdude_port = avrdoper
avrdude_programmer_id = stk500v2

-pdu
行頭の「;」セミコロンは削除してくだい。 (行頭にセミコロンがある行はコメントとして無視されます) 「USBasp」を使う場合
avrdude_port = usb
avrdude_programmer_id = usbasp

-pdu
と指定します。 「AVRminiprog」は「AVRISP mkII 互換」なので
avrdude_port = usb
avrdude_programmer_id = stk500v2

-pdu
とします。 ISPクロック周波数設定 :STK500.exeを使う場合 以下はSTK500.exeでAVRISP mkII(USB)互換のAVRminiprogライタで 指定したときの値です。 -dn :(指定値、実際に設定される値)[Hz] -d0 : (4M,4M) -d1 : (2M,2M) -d2 : (500k,500k) -d3 : (250k,250k) -d4 : (230k,125k) -d5 : (125k,125k) -d6 : (50k,49.69k) -d7 : (10k,9.963k) 「実際に設定される値」はライタによって変わる様ですので参考値として下さい。 この値は「-ps?」「-psu?」で確認できますがFLASHなどへの書き込み時にも表示 されます。 ISPクロック周波数 の適切な値はAVRの動作クロックの1/4以下とされています。 AVRの出荷時動作クロックはだいたい1MHzなので新品のAVRの場合 「-d3」または「-d4」でOKと思います。詳細はデータシートを参照してください。 ISPクロック周波数設定 : avrdudeを使う場合 avrdude直接のオプションは「-i」「-B」オプションがありますが command lineからは無効でこれらはAVRISP系のISPクロックではないようです。 従ってターミナルモードに入って「sck 4」などと指定します。 asdではこれを「echo」を使って自動で行うオプションもありますが 一部のライタ(78k0 Writer)ではうまく動作しないようなので注意が必要です。 ISPクロック自動設定を使う: 「asd.ini」の「avrdude_isp_clock」という行を有効にします。「=」や値は 必要ありません。これにより「-dn」オプションが有効になります。 (クロック設定コマンド発行のためasdの動作は1.3秒ほど遅くなります) n = 1 ... 99 [usec] 周波数は 1MHz÷n [Hz] です。 従って「-d4」はSTK500.exeの設定と近い周波数になります。 -d4 : 250k [Hz] -d5 : 200k -d6 : 166k -d7 : 143k -d10: 100k 実際に設定された値は「-pd?」「-pdu?」で確認できます。
>asd -pdu?
ISPクロックを手動で設定する: 「asd.ini」の「avrdude_isp_clock」という行を先頭に「;」セミコロンを付けて無効にします。
>asd -t
でターミナルモードに入って「sck 4」と打ちます。これで250kHzに設定されます。 USBタイプのライタならcommand lineから
>echo sck 4 | asd -t
でも設定できます。 (注意)この方法はCOMポートタイプの78k0 Writerだと設定できませんでした。     さらにUSBポートが応答しなくなります(原因不明) 実行パスの検索順序 「stk500.exe」や「avrdude.exe」の実行パスの優先順序です。 例えばavrdude.exeが「c:\bin\avrdude.exe」にあるとします。 1.「c:\bin\avrdude.exe」を使いたい場合  「asd.ini」で 「AVRDUDE_PATH="c:\bin\avrdude.exe"」 と明示的に指定する。 2.環境変数PATHを優先したい場合「AVRDUDE_PATH="path" 」 と記述する。 3.AVRDUDE_PATHがコメントされている場合はレジストリを検索してWinAVRのavrdude.exeを   使います。 4.「3.」でWinAVRのレジストリが存在しない場合、    環境変数PATHが通っているものとして「avrdude.exe」を実行します。 特定の場所の「avrdude.exe」を使いたいときは1.の記述をしてください。 「stk500.exe」も同様に「asd.ini」の「STK500_PATH」を使います。 レジストリは「AVR-Studio」を検索します。 「AVR-Studio」、「WinAVR」がインストールされていれば 「STK500_PATH」「AVRDUDE_PATH」はコメントのままでOKです。 fuse.txtの入手 Fuse読み出しの結果を見やすくするために「fuse.txt」が必要です。 このファイルは同梱されていませんので以下の「HIDaspx」に含まれている 「fuse.txt」をasd.exeと同じフォルダに入れてください。 「fuse.txt」がない場合のFuse表示は
>asd -rf 
Detected device is ATtiny26.

-----------------------------------------------------------
 Strongly recommend using "fuse.txt" or "fuse_en.txt" file.
-----------------------------------------------------------
Fuse Low=0xE4  High=0x13
Cal 0xB1,0xB3,0xA7,0xAA
のようになります。 fuse.txt入手先: 最新のHIDaspx用アーカイブ の「hidspx-2009-0317.zip」中のbinフォルダに含まれています。 英語DOS環境の場合「fuse_en.txt」も「asd.exe」と同じフォルダに入れてください。
>asd -rf 
Detected device is ATtiny26.
Low: 11100100
     ||||++++-- CKSEL[3:0] Clock source selection
     ||++-- SUT[1:0] Startup time
     |+-- CKOPT (36pF between PB4-GND  1:Disabled, 0:Enabled)
     +-- PLLCK *Refer to data sheet

High:---10011
        ||||+-- BODEN (1:Disable BOD, 0:Enable BOD)
        |||+-- BODLEVEL (1:2.7V, 0:4.0V)
        ||+-- EESAVE (Retain EEPROM at chip erase 1:No, 0:Yes)
        |+-- SPIEN (1:Disable, 0:Enable) *Available only in Parallel mode
        +-- RSTDISBL (1:Use RESET pin, 0:Disable RESET(used as PB7))

Fuse Low=0xE4  High=0x13
Cal 0xB1,0xB3,0xA7,0xAA
上のような感じで英語表示されると思います(未確認)。 さらに詳細なFuse情報を知りたいときは「-ri」コマンドを使えばWebページで 確認できます。 その他のコマンド *Calibration読み出しコマンド >asd -rc 「stk500.exe」はCalibrationの読み出しに時間がかかるためFuse画面から分離しました。 avrdudeもこのコマンドが使えますがFuse画面でも表示されます。 *実行終了待ちコマンド 「-w1」「-wn」( n >= 2 [sec]) コマンドプロンプトが瞬時に閉じてしまうのを抑制します。 >asd -rf -w1 「-w1」を付けると処理終了後にエンター・キーを押すまで停止します。 >asd -rf -w5 上の場合は処理終了後に5秒停止します。 *HEX dumpコマンド Flash読み出しでHEX dump表示します。 >asd -rph EEPROM読み出しでHEX dump表示します。 >asd -reh *デバイス・チェック・コマンド >asd -rf -q tiny45 「-q device_name」を指定すると接続されているAVRと「device_name」が違うときには 処理を停止します。avrdudeの省略形も受け付けます。例えば「tiny45」は 「tiny45」「attiny45」「t45」のどれでも指定できます。 デバッグ・コマンド *デバッグ・コマンド「-z」 >asd foo.hex -z 「書込み系」のコマンドで実行予定の内部コマンドを表示して終了します。 実行はされません。 「読出し系」のコマンドでは無視されます。(読出しを実行します) このコマンドは最後の引数として指定してください。 *デバッグ・コマンド「-zz」 >asd bar.eep -zz 「コマンドを実行しながら」内部で発行しているコマンドと その出力を表示します。コマンドは実行されます。 このコマンドは最後の引数として指定してください。 ライタがうまく動作しないときはこのコマンドの出力をみると 原因が把握できるかもしれません。 その他のオプション 「asd.ini」で 「progress_message」 がデフォルトで有効になっています。 これはavrdudeを使うとき「画面に逐次メッセージを表示」します。 例えばFlash書き込みコマンドを実行すると最初に 「Detecting ...」 「Writing ...」 と表示されます。 コマンドの動作速度はライタやターゲットの種類により違うようなので 「progress_message」オプションの有効・無効は状況をみて決めて下さい。 有効にしたほうが動作が遅い場合に「気になりにくい」です(^^; うまく動作しない時 接続や設定ミスがある場合ほとんど 「デバイス名が取得できない」 「ポート設定を確認してください」 というメッセージを表示します。 原因がつかめないときはデバッグ・コマンド「-zz」を付けて実行し出力結果を 確認してください。 Linuxの場合root権限が必要です。 Linux対応: asdはRubyスクリプトなのでavrdudeを使用すれば Linux系OS,mac os x でも使用可能と思われます。RubyのVer.1.8.xが必要です。 ただし、OSやavrdudeのバージョンが様々なので難しい面もあります。 「linuxフォルダ」の中の「asd」が実行ファイルです。 適切に属性を設定して実行します。「asd.ini」も必要です。 avrdudeに対して「udev設定」するまではroot権限が必要になります。 >sudo asd -rf sudoでもいいと思います。 日本語(sjis)のfuse.txtを表示するときは環境変数LANGの値に合わせて コード変換しています。(->euc or ->utf-8) PC側のターミナルソフトもLANG設定と同じ漢字コードに設定してください。 (通常は大丈夫だと思います) avrdudeのバージョン Windows: こちらで確認したavrdudeは 1.WinAVR-20081205付属の Ver.5.6cvs 2.WinAVR-20090313付属の Ver.5.6   このバージョンは表示にバグがあるので以下の改良版を使った方が良いです。 3.senshuさんが改良したavrdude-5.6-2009-0325b.zip版   上記のバグや表示の改良、AVRの自動認識機能(この機能はスゴイ)などが追加されています。   ATmega88pにも対応しています。   asdはこの改良版でも動作します。詳細はAVR/avrdude01に記載されています。 Linux: こちらでの動作確認は Debian etch 玄箱HG(PowerPC) ruby Ver.1.8.5 上で avrdude Ver.5.2(標準), Ver.5.5(lennyからports) AVRminiprog(AVRISP mkII), USBasp, avr-doper(HID USB) の動作をざっと確認しました。 以下はProgrammerとavrdudeの対応バージョンです。
Programmeravrdude required VersionLinux
AVRminiprog
(AVRISP mkII)
Ver.5.?.
USBasp Ver.5.2 or laterDebian etch
avr-doper Ver.5.3 or later.
USBtinyISP Ver.5.5 or laterDebian lenny
Ubuntu 8.10/8.04
AVRminiprog(AVRISP mkII)の対応開始バージョンは未確認ですがVer.5.2で動作しました。 新しいデバイスに対応する asdはデバイステーブルを内部に持っているのでATMELから新しいデバイスが 出たときやavrdudeのバージョンが更新されたとき、 avrdudeに特定のデバイスを追加したときには内部テーブルの変更が必要です。 この場合各自でasdを再構築すれば対応できます。 再構築には最新版のAVR-Studio、対応したいavrdudeが必要です。 gnu makeも必要ですがWinAVRに含まれています。 手順: 1.ここにあるActiveScriptRubyをインストールしてRubyが動作するようにしてください。   http://arton.hp.infoseek.co.jp/indexj.html 2.コマンドプロンプトを開いてasdのフォルダsrcにcdします。 3.srcフォルダにある「dev.rb」を編集します。
$FileDeviceXml="E:/AVR Tools/Partdescriptionfiles/*.xml"
$DudeName="c:/bin/avrdude.exe"        # specify location of avrdude
上記の行で各自の環境に合わせAVR-Studioの場所とavrdudeの場所を正確に指定して保存します。 フォルダの区切りは「/」スラッシュにしてください。 4.コマンドラインで >make dev を実行します。 新しいデバイステーブル「devtable.rb」が生成されるので中身を確認してください。 次に >make を実行すれば新しい「asd.exe」が生成されます。 「linux」フォルダのLinux版も同時に更新されます。 「asd.exe」のファイルサイズは「upx」などで圧縮すれば小さくなります。 UPXMask http://homepage2.nifty.com/maskp/list1.html Ver.0.1.3-alpha このバージョンはsenshuさんのavrdude改良版のautoモード(デバイス自動検出機能)に 対応するためのオプションを追加したものです。 内部コマンドが1回で済むので動作時間が短縮できます。 使い方: 1.「asd.ini」の「AVRDUDE_PATH」にsenshuさんのavrdude改良版の場所を指定するか    パスを通します。 2.autoモード対応にするため「asd.ini」の   「avrdude_auto」のコメントをはずして有効にします。   あとは通常のavrdudeの使い方と同じです。   「avrdude_auto」をコメントにするとautoモードを使わないで動作します。   (Ver.0.1.2と同じ動作) 3.「-q」コマンドは性質上内部で2回コマンドを発行します。 4.これは実験中の機能ですが一応動作しているようです。 download このソフトは利用者の責任に於いて使用してください。 結果についていかなる保証もありません。 現在alphaバージョン:Ver.0.1.3-alpha 準備中 avrsdd-ver013-alpha.zip (2009/03/E) *senshuさんのavrdude改良版のautoモードに対応。  動作速度が改善されます。(実験中) *STK500.exeでロックビットが表示されないのを修正。 *avrdude: キャリブレーション読出し表示を見やすく修正。 --- old version --- avrsdd-ver012-alpha.zip (2009/03/E) *一時ファイルをカレントフォルダに作らないように修正。 *デバイス名取得時のバグ修正。 *senshuさんのavrdude改良版でデバイステーブル生成ができなかったのを修正。 *ATmega88pをデバイステーブルに追加。 *デバイステーブルをavrdude Ver5.6cvs -> Ver5.6に変更。 *ヘルプ画面のタブ削除。 avrsdd-ver0.1.1-alpha.zip (2009/03/E) *ATmega88pをテーブルに追加。 <avrsdd-ver0.1.0-alpha.zip *(2009/03/E)初版
posted by Copyright (C) avrin All Rights Reserved. at 21:00| Comment(27) | TrackBack(0) | AVRSDD | このブログの読者になる | 更新情報をチェックする

2009年03月14日

stk500.exe や avrdude は 単独で実行できるのか

というのを、すこし調べてみた。

STK500.EXEについてはstk500フォルダだけ残してAVR-Studioを削除
したら動くのかどうか。

やってみればいいんだがめんどくさいので  (オーーイ

少し古いが以下のページに書いてあった。
http://www.shol.com/shadow_tech/nostudio.html
良く読んでないけど(^^;

「やるきになれば、できるって感じ」(爆

ただ、AVRISP(mk2)ライタの多彩なAVR品種対応が必要なければ
avrdudeのstk500モードの方が全然簡単。


で、
avrdudeは単独で動くのか。
これはやって見たところ動きました。
しかも、「avrdude.exe」「avrdude.conf」とたった2つのファイルがあればよい。
ファイルサイズの合計はたったの700kバイト。
特別な設定も必要なくただコマンドを打てばよい。

やるなぁ

て、これはasdのdudeラッパーを使ったら簡単に打てるという意味で
avrdude素のコマンドラインは
金輪際(こんりんざい)打ちたくない(^^;


WinAVRに付属しているavrdudeはcygwinのDLLが必要かと思ったが
中身をobjdump -p してみるとcygwinとは無縁にコンパイルされているのが
わかる。
中身を見るとMinGW/MSYSでコンパイルされているようだ。

で、試しにavrdudeの5.6cvsのソースをとってきて
MinGW/MSYSでコンパイルしてみた。

1,./configure して
2.make

で終わるかと思ったらusleep関数の多重定義でエラー。
http://www.nabble.com/avrdude-on-cygwin-td20570514.html
このパッチを当てるとコンパイルできた。動いた。

で、コンパイルは2分くらいで終わるがその前のconfgureに
結構時間がかかった。

中身をobjdump -p してWinAVRのavrdudeと比較すると自分でメイクした物は
Lib-USBへのリンクがなかったのでこのままだとUSB関係は使えないと思う。
たぶんメイクオプションがいるんだろう。


で、stk500フォルダの中にはXXX.DLLといういかにも外部アプリから
呼び出せそうなDLLが存在する。
このDLLのエクスポート関数を見るとこれらが

COM(common component object model)のインプロセスサーバ」だってことが分かる。(オントカヨ

(内部関数は直接見えない)

舌かみそうだが。ここで突貫でCOMを勉強してみると(オイ
http://www7a.biglobe.ne.jp/~tsuneoka/win32sub2/1.html
http://keicode.com/com/com05.php

レジストリに関数の入り口が登録されるらしいんだけど結局呼び出し仕様が
分からないと呼び出せない。これは普通のDLLでも同じだけど(^^;

で、海外フォーラムでも同じ質問をしている人がいるにはいる。
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&p=545947

アトメルが簡単に内部仕様を出すとは思えないが。

で、COMのインプロセスサーバを使えると何がいいかというと
まずコマンドライン版stk500.exeより動作が速くなると思う。

あと普通のDLLは「VBScript」からは呼び出せないが(VBならOK)
COMのインプロセスサーバはシステムに登録すればVBScriptの
オブジェクトとして簡単に呼び出せるらしい。

というところまでわかった。。。

で、VBScriptから呼び出せないごく普通のDLLがあったとして
これをCOMのインプロセスサーバ(DLL)でラップしやればVBScriptから
呼び出せるようになる。

VBScript -> DLL(COM) -> 普通のDLL

で、VBScriptのなにがいいかというとWindowsにもれなくついてくるという
のがやっぱりツオイなぁ。
VBScriptじゃなくてJScriptでもいける。




と、思ったが。
な、なんとRubyのヘルプの「win32ole」の項目を見ると
COMオブジェクト名の調べ方、見つけたオブジェクトのメソッド一覧の
調べ方が


ガッツリ書いてある。


ちょっとCOMの世界へ飛来するのだった(^^;


VC++付属のoleviewを使えば関数の形は分かるし、
各種開発言語ツールでタイプライブラリを取り込んでCOM呼び出しの
雛形を一瞬で生成してくれる。

stk500common.dllのタイプライブラリをDelphiに読ませて雛形を
生成させたら、スゴって感じのものがはき出された。

で、最初に戻ると(^^;結局この後は内部仕様が分からないと
制御できないってことに(オーーーイ


COMサーバをレジストリに登録せずにVBScriptから呼び出すのは
manifestと言うのを使えばいいらしい。イマイチか。



リンク:
MinGW について頻繁に尋ねられる質問と回答
http://www.sixnine.net/cygwin/translation/mingw-doc/mingwfaq.html
posted by Copyright (C) avrin All Rights Reserved. at 10:41| Comment(0) | TrackBack(0) | AVRSDD | このブログの読者になる | 更新情報をチェックする

avrdude magic !? for Terminal mode

さて、秘技 avrdude でござい。(なんじゃそら

めんどくさいので(^^; ごく短く記述すると

avrdudeにはターミナルモードというのがあってインタラクティブに
キー入力をして情報表示や設定ができるのだ。

hexdumpも出せたりする。

が、対話的なモードなのでいちいちの手入力がめんどくさいのだった。

なので、コマンドをエコーでパイプしてみた

>echo sck 6 | avrdude.exe -P avrdoper -p t45 -c stk500v2 -t

すると

avrdude.exe: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.03s
avrdude.exe: Device signature = 0x1e9206

avrdude> >>> sck 6
avrdude>
avrdude.exe done. Thank you.
>
予想通りこんな風に実行できたのである。これはISPクロックの設定。

で、何かというと、
「ターミナルモードで手入力することなく」ターミナルモードを実行できる
のである。(バッチファイルに組み込める)

asdのdudeモードもターミナルオプションを受け付けるので

>echo dump eeprom 0 0x40 | asd -t

と、ダンプコマンドをエコーでパイプしてやると

avrdude.exe -P avrdoper -p t45 -c stk500v2 -t
avrdude.exe: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.02s
avrdude.exe: Device signature = 0x1e9206
avrdude> >>> dump eeprom 0 0x40
0000 00 65 66 68 69 6a 6b 6c 6d 6f 70 71 72 73 74 75 |.efhijklmopqrstu|
0010 76 77 78 79 7b 7c 7d 7e 7f 80 81 82 83 84 85 86 |vwxy{|}~....ヤ..|
0020 87 88 89 89 8a 8b 8c 8d 8e 8f 90 91 92 92 93 94 |?...旧克署葬駐培
0030 95 96 97 98 98 99 9a 9b 9c 9c 9d 9e 9f 9f a0 a1 |楓利・圀惧撼沺ダイヤ。|

avrdude>
avrdude.exe done. Thank you.

お見事!!


し、しかし、マイナーすぎる話だ(^^;
posted by Copyright (C) avrin All Rights Reserved. at 08:32| Comment(0) | TrackBack(0) | AVRSDD | このブログの読者になる | 更新情報をチェックする

2009年03月11日

avrwan : One Click Programmer wrapper for AVR-Studio

BASCOM-AVRやMikroCなんかは外部プログラムを登録するとツールバーに
現れるので「One Click」でフラッシュ書き込みが実行できる。
当然、プロジェクトのHEXファイルの名前を引数としてとれる。
{FILE}とかいう感じで。

ところが、AVR-Studioは
1,ツールバーにボタンが増えない
2.HEXファイルが引数として使えない。

で、
1,は解決した。
2,は海外のフォーラムでも質問があって答えは「できない」。
  数年来、放置されているようだ。

理由はたぶん、WinAVRが「別ソフト」になっていることが原因じゃないかな。

で、
AVR-Studioでツールバーにボタンを増やすには「Tools」-「Customize」で
外部プログラムを登録したあと以下のようにアイコンをツールバーに
D&Dする。

「?」の部分に登録してみる。
avr-sutudio-toolbar-0.gif



D&Dする。
登録する位置の左側のアイコンに重ねると「|」印が出るのでそこでドロップ。
avr-studio-toolbar-reg.gif



できあがり。
avr-studio-toolbar-reg-after.gif
上の状態(ダイアログが出た状態)で他のツールボタンを選択して
「右クリック」するとアイコンの削除やグルーピングなどができる。
さらに「Customize」の「Keyboard」タブで、登録したツールボタンを
ワンキー(F1とか)にショートカット設定もできる。

ツールボタンを登録したら一度カレントプロジェクトを閉じて
開き直さないとカレントフォルダがうまく取得できないので
「カレントプロジェクト」を開き直してください

このままでは結局、引数問題があるので「one click」でFlashに書けない。

で、

avrwan : One Click Programmer wrapper for AVR-Studio

というラッパーソフトを登場させることにより解決したのだった。

これはasdのおまけソフトのような感じ。

asdやavrsp,hidspx系のソフトに使える。

ツールボタンにはasdなどではなく「avrwan」を登録しておく。

すると、ツールボタンを押せばあとはavrwanが「よしな」に処理してくれるのだった。

(おーーーイ


これでBASCOMやMikroCと同じ「One click write」ができるのだ。



*avrwan*

動作:
カレントプロジェクトのMakefileからHEXファイル名とEEPROMファイル名を抽出。
これらを引数として外部プログラム(asdなど)を呼び出す。

avrwan-reg.gif

上のようにavrwanに指定された引数「-pb1 -w5」はそのまま外部プログラムに
渡される。
外部プログラムの指定は「avrwan.ini」の中に書いておく。


ところで

ワンクリックでライタソフトが起動する

ワンクリックで書き込みが始まる
では
ワンクリック以上の差がある」のだった(^^;



で、この「ワンクリックライト」、実際に使ってみると

かなり便利

AVR-Studioの純正ライタとのクリック差はワンクリックしかないが
AVR-Studioの純正ライタの場合、実際はこうなる。

1.書き込みアイコンを押すと書き込み画面が出る。
2.どのボタンを押すか決定する。
3.そのボタンへ正確にマウスポインタを移動
4.ボタンをクリック。

2.と3.は「ほぼ無意識」にやるんだけど「ワンクリックライト」を
体験してしまうと逆に「意識」してしまって気になるなぁ(爆


で、「ワンクリックライト」ができるのはライターソフトが
avrsp(x),hidspxのときだけで純正ライタではできない。

だったのを、純正ライタをavrsp(x),hidspx風にラップする「asd」を
使えば純正ライタでも「ワンクリックライト」が体験できるという
筋書きなのだった。
ただし「asd」は動作がマッタリ気味です。(オーーイ



avrwan Ver.0.9.1
ダウンロード:avrwan-091.zip


修正点:
avrsp.exeを指定すると「-w1」オプションが効かないようだったので
avrwan.iniで終了待ち時間を指定できるようにしました。

終了待ち時間指定はavrwan.iniの以下の部分に待ちたい時間を
「秒」で指定します。デフォルトは5秒です。

end_wait = 5

hidspx, asdは「-w[n]」オプションが効くのでavrwanの引数に指定すると
end_waitと合わせた時間を待つことになります。

end_wait = 0

で終了待ち時間0秒にすることも可能です。
posted by Copyright (C) avrin All Rights Reserved. at 19:48| Comment(1) | TrackBack(0) | AVRSDD | このブログの読者になる | 更新情報をチェックする