Senshu LAB
サイト内検索: AND検索 OR検索  


Counter: 5466, today: 1, yesterday: 5
Table of Contents

教材作成に有用な情報や組込み技術の情報が共有できればと考えています.
※ 本サイトの掲載内容を利用して発生した損害,障害の責は負いませんので悪しからず.


AVRdude関係の「掲示板-2」

海外からのリンク...

senshu (2009-04-28 (火) 20:30:30)

以下のページで、このサイトで以前公開していたアーカイブがリンクされていました。
(ということは、海外バージョンのWindowsでも機能する、ということですね?!)
http://arduinofun.com/blog/tag/bootloader/

旧版が直接リンクになっていたので、最新を使ってもらうため旧ファイルを削除しました。



お名前:

avrdude-GUI(YCIT版)を公開

senshu (2009-04-20 (月) 12:12:03)

hidspx-GUIの成果を反映した、avrdude-GUIを作成しました。

FuseのReadでAVRマイコンを自動認識します。また、avrdude-GUIの原作者の意向を
反映し、YCIT ver 1.2.1としました。

画面レイアウトは以下のように変更しました。一度設定すれば変更しない部分を
下部に移動し、modeをチェックすることで下部を隠すことができます。
この工夫により、コンパクトな画面を実現し誤操作を低減できると考えました。

■ シンプルモード
dudeGUI121-simple.jpg

■ 通常モード
dudeGUI121.jpg


このavrdude-GUIを機能させるには、私の修正したavrdude.exeとペアで使う必要が
ありますので、注意してください。

Fuseの「Read」ボタンをクリックすると、自動検出を行ない、FUSEやLock bitを読み
出します。自動認識のテストは、Deviceコンボボックスで適当な(該当しないもの)に
変更した後、Device欄の[Read]ボタンを押してみてください。


また、Logテキストボックスの追加により内部の動作が良くわかります。この変更で
内部の透明性が向上したと思うのですが、ご意見をいただければ幸いです。

単にhidspx-GUIの成果を反映しただけですが、変更が多岐にわたるので、数時間
の作業が必要でした。ちょっとだけですが、C#のツールの使い方を理解できた気が
します。

利用上の注意点

このツールを利用するには、avrdude.exeが正しく動作する必要があります。
avrdudeは、USB接続で動作する場合には、libusb-win32の導入が必要です。
Vistaにはインストールしてはいけませんので、Windows 2000/XPに限定して
利用してください。
追記(2010-7-20)
libusb-win32 ver 1.2.0はVista/Windows 7にもインストール可能です。
最新のlibusb-win32をインストールしてください。

■ ver 1.2.0からの改善点

1. 標準出力は、中間ファイルを介して得ていますが、長大なファイル名になるため、
   これを含むコマンド業をLogテキストボックスで見ると、読みにくく感じます。
   そこで、「"中間ファイル"」を「"-"」に置き換えて、表示します。

2. AVRマイコンを自動認識している部分の処理が表示されませんが、これをLog窓に
   表示するように変更しました。

3. 現在のHEX dump は、インテルHEXフォーマットで表示を行うのみですが、これを
   hidspx-GUIと同等の表示形式に変更にします。



  • senshu 2009-04-28 (火) 21:05:01
    RC発振 1MHz動作のAVRマイコンで自動認識に失敗することがわかりました。

    ATmega168チップの出荷時設定で、AVRISP-mkIIのSCKが1.0uSに設定されている場合、
    マイコンを認識できません。これは、avrdudeでsckを変更すれば良いのですが、
    若干のテクニックが必要で、GUI側の不具合と誤認する可能性があります。

    また、fuseが一個のみのマイコンへの書き込みは、low Fuseの欄のみにデータが
    あるかどうかで判断しています。しかし複数のFuseを持つチップでLow Fuse のみを
    書き換えたい場合に、不具合が生じます。

    FUSE データが 1個の AVR マイコンは以下のマイコンに限られるので、
    AT90S1200
    AT90S2313
    AT90S2323
    AT90S2343
    AT90S4414
    AT90S4433
    AT90S4434
    AT90S8515
    ATtiny12
    ATtiny15

    これらのマイコンに限りLow FUSEを Fuseに読み替える処理を追加しました。

    SCKの設定と、エラー処理を強化した ver 1.2.2を公開しました。ver 1.2.1を使って
    いる方は、avrdude-GUI.exe のみの差し替えてください。

お名前:

avrdude-GUI ver 1.1.0にて、自動認識機能を実現

senshu (2009-04-07 (火) 17:49:46)

audinさんのリクエストに応え、avrdude-GUIにAVRマイコンチップの自動認識機能を実現しま
した。昨日の夜の段階では、実現にはかなりの手間が必要と思ったのですが、audinさんとの
やり取りするうちに、AUTO検出ボタンを追加すれば簡単に実現できることに気づきました。

短時間で作成したので不備も予想されますが、私のテストした限りでは問題ありませんでした。

avrdude-GUI-110.jpg


このavrdude-GUIを機能させるには、私の修正したavrdude.exeとペアで使う必要が
ありますので、注意してください。

「AUTO」ボタンをクリックすると、自動検出を行ない、FUSEやLock bitを読み出します。
自動認識のテストは、Devieコンボボックスで該当しないものに合わせた後、AUTOボタン
を押してみてください。

なお、FUSEを持たないDEVICEでは以下のメッセージが表示されます。チップ名は正しくセット
されるので、FlashやEEPROMの操作には影響ありませんが、改善も可能です。途中まで作業し
ましたが、面倒になったので中止しました。何方か改良してくれませんか?

要望があれば、ソースも開示します。

avrdude-GUI-error.jpg

使用しての感想などをいただければ幸いです。


  • senshu 2009-04-09 (木) 20:57:27
    hidspx-GUIを改定し、実行の様子が確認できるようになりました。それに比べると、
    avrdude-GUIでは動きが見えず、やや不安に感じました。時間が取れたら、このGUIも
    ブラッシュアップしたいと思います(当分、このままになりそうですが、、)。

    同時に2つのソフトを改良するのは無駄がありすぎるので、hidspx-GUIを改良し、
    その成果をavrdude-GUIに反映する、という手順で進めたいと思います。
  • senshu 2009-04-17 (金) 20:27:13
    hidspx-GUIの成果を反映したバージョンを作成しました。

    同時の変更は行わず、短期集中で作業しました。このツールの完成により、
    AVRISP-mkII も復活です。

お名前:

AVRminiprogの紹介

senshu (2009-04-01 (水) 17:35:41)

2007年 11月ごろから AVRminiprog を紹介していますが、私の製作した
AVRminiProg を紹介します。これとほぼ同じモノを 5台作り、トラブルなく動作しています。

AVRminiprog は USBasp とほぼ同じ回路であり、WsNAK#172 基板を修正し製作しました。
AVR ライタ無しで内蔵ファーム更新を可能にする為、ブートローダを組み込んでいます。
SW(橙) はブートローダ起動用です。また、デバッグ用にRESET スイッチ (SW-A) も実装して
いますが、通常の利用なら、これらの SW は不要です。USBasp とほぼ同じ部品構成ですが、
AVRISPmkII 互換ライタなのでavrspx では操作は出来ません。目的より使い分けが必要です。

AVRminiporg のソースを適切に設定すれば、ATmega88でも動作します。
下の写真ではmega168と16MHzクリスタルで作成しましたが、今なら安価なmega88と12MHz
クリスタルの構成をお薦めします。16MHzはやや不安定な動作をする場合がありました。

zoom

zoom
※ ↑ 21ピン(AREF)のソケットピンを抜いて実装している点に注目!

この変更(ジャンパとパターンカットに注意して作成の事)により、

D- PD4
D+ PD2
LED_RED   PC1
LED_Green PC0
電圧計測 PC3
BootMode PC4

の結線になります。
この変更にあわせ、HIDbootとAVRminiprogのヘッダファイルを設定し、
FUSEは、ブートローダを利用する場合にはm88/m168共に

REM ### hidspx command line example ###
hidspx -d10 -fL0xF7 -fH0xDD -fX0xF8

のように書き込んでください。HIDbootを書き込めば、後はライタ無しでもファーム
更新が可能になります。

私は、asdやavrdudeの機能が充実してきたことから、AVRminiprogの有用性が増して
いると感じます。



お名前:

rubyとC#による開発環境の感想

senshu (2009-03-31 (火) 21:56:49)

avrdude-GUIは、MS社のC#(2005)で開発されています。
こうしたツールを使って思うのは、画面デザインに関しては、非常に上手くデザインされ
ていると感じました。C#の開発経験が無くとも、何となく?使える点にも感心しました。

例えば、HelpボタンでWebページを開くボタンのコードの中身は、なんと!一行です。

private void Help_Click_1(object sender, EventArgs e)
{
 System.Diagnostics.Process.Start("http://yuki-lab.jp/hw/avrdude-GUI/index.html");
}

Fuse Calcを開くボタンも、40数行のコードで実現できました。他にも細かな修正箇所は
ありますが、コンパイルも速く、エラーの個所も特定でき、生産性は良いと思います。

また、rubyはAWKよりも機能が豊富でシステム記述も可能です。配列の大きさを気にする必要も
なく、文字列を柔軟に操作できます。perlで書くよりもC言語との表現が類似していて、読み易く
記述できます。

こうしたツールを利用すれば、使い勝手に難があるツールを快適に使えるツールに変身
することも可能に思えます。

こうしたツールが無償で使える今、開発言語を特定することなく、適材適所で効果的に
利用するという方針を推進していきたいと思います。

avrdude-GUIを参考にhidspx-GUIも気が向いたら作ろうと思っていますが、CUIが大好きな
ので、どうなることやら、、、。


  • senshu 2009-04-06 (月) 17:28:51
    思い立って作ってみました。現在の形になるまでの作業合計時間は10H程度です。

    なお、hidspx.exeを今の形にするまでには、数百時間を要しています。想像を絶する?
    コストが投入されています。 [smile]

    (私の時給はいくらでしょうか、、、)
  • senshu 2009-04-09 (木) 20:55:41
    上記のコーディングにはエラー処理が漏れています。

    信頼性を確保するには
    try{
     目的の処理;
    } catch{
     エラー処理;
    }
    でエラー処理を記述する必要があります。


お名前:

avrdude-GUIをhidspx-GUIと同等に機能強化(4/7版)

senshu (2009-03-31 (火) 13:19:05)

AVRマイコン用のプログラマ(ライタ)は、自作・市販品ともに多くの種類があり、それぞれに
特徴があります。

優れたGUI指向のツールもあれば、コマンドレベルでの使い勝手の向上に努めたものもあります。

私の公開しているツールは、ソースが公開されたソース自体を改良していますが、もう一つ
の方法として、自作のツールでラップ(間接的に利用)するものも登場しています。

AVRライタ関連ではavrdude-GUIやasdもその種のツールです。どちらも、直接利用する場合
に比較し、格段に敷居が低く、使いやすいものとなっています。

オープンソースの利点を活かし、avrdude-GUIを私なりに改良を行ってみました。

avrdude-GUIのページ ⇒ http://yuki-lab.jp/hw/avrdude-GUI/index.html

avrdude-GUIはFUSE設定ヒントが得られないので、hidspxと同様の機構を追加しました。
Visual C#でのコードの作成に慣れてきたので、以下の機能強化を行いました。

avrdude-GUI-109.jpg
※ 起動直後の画面(Deviceをフォーカスし、過去に使ったファイルが表示されている)
■ 変更点

1. Fuse ViewをFuse Calc(web)に変更し、Help(web)ボタンを追加しました。
   Helpのリンク先は、ゆきの研究室です(このサイトにはavrdude-GUIに関する
   説明はほとんどありません)。

2. 利用頻度を考慮し、ボタンの大きさを調整しました。消去せずに書き込むと、
   意図しないエラーになる場合があるので、Writeボタンは小さめにし、
   Ext Fuseの設定も注意が必要なので(*)を付け、注意を喚起しています。
   (このボタンは削除を検討しています。Eraseせずに書き込むメリットは
   理解できますが、経験の少ない方に正しく使ってもらうのは困難です。)

3. FuseをFuse Calcサイトでの表記にあわせ、Low, High, Extの順にしました。
  (窓の位置が変わりましたので、Fuse名に注意して設定してください)

4. AT90S4433のように、FUSEが1個のみのデバイスにも使えるように修正
   (複数のFUSEを持つAVRマイコンでは処理速度が低下しますが許容範囲です)

5. FUSEが1個の場合には、新のFUSE Calcサイトでは上手く扱えないので、
   選択して接続する

6. avrdude のターミナルモード起動ボタンを「Terminal mode」に変更
   (Terminalソフトの起動ボタンと誤解されるのを避けるため)

7. コマンドラインからのファイル名指定と、ファイルのD&Dに対応
   (hidspx-GUIの成果を反映しました)

8. 120DPIでの利用を考慮し、FUSEの配置を修正

9. 最後に指定したFlash, EEPROMのファイルを記憶

10. EEPROM のVerifyボタンを追加

11. エラー窓のフォントを日本語表示可能なものに変更

12. Write(Erase無し)を廃止し、代わりにCMDPrompt起動ボタンを追加
   (HEXファイルのある場所で、CMD promptを起動する)

13. 起動直後は、Deviceコンボボックスをフォーカス


追加したHelpボタンで「ゆきの研究室」をブラウズしたところ、このページもリンクされて
いました。yuki-labさん、どうもありがとうございます。

かなり仕様を変更した関係で、混乱を避ける為にバージョンを変更しました。
(ゆきの研究室さん、ご容赦を!)



  • senshu 2009-03-31 (火) 18:40:58
    私が修正したコードは百行程度の僅かなものですが、ソース公開を希望する方には
    公開する予定です。

    当初はHIDaspx用のhidspxGUIフロントエンド用に修正したいと考えていましたが、
    毎日のようにhidspxコマンドを使っていたら、全くGUIの必要性はないことに気づきました。

    しかし、avrdudeコマンドにはGUIフロントエンドが必要です。そこで、avrdude用の
    改良に着手したわけです。

    私はC#の使用経験はほとんどありませんが、何とか当初予定した機能を実現できました。
    利用された方は、ご意見やアドバイスをいただければ、幸いです。


  • senshu 2009-04-06 (月) 17:27:29
    C#での経験がほぼゼロのsenshuが作業していますので、問題もあると思います。
    改善の提案やアドバイスをいただければ幸いです。

    ※ C#は初心者ですが過去にDelphiを触った経験はあり、それ程の違和感はありません。
  • senshu 2009-04-07 (火) 00:08:03
    コマンドオプションにて、ファイル名を渡せない、という不具合があったので、
    一時公開を中止します。対策は完了しているので、近々、修正版を公開します。
  • audin? 2009-04-07 (火) 00:22:23
    audinです。
    以前のバージョンを初めて使った時に一番に探したのは「Device」欄の
    「auto」選択でした。(^^;
    オリジナルを使ったときにエラーになりますがそれを大きく上回る使いやすさになると
    思いました。
  • senshu 2009-04-07 (火) 00:33:39
    audinさん、こんばんは。

    autoをメニューに追加するのは難しくはありませんが、Fuseの書き込みにはAVRマイコン名を
    指定する必要があります。私は、avrdudeは時々使う程度なので、コードを書くコストを考え
    るとこの程度の手間は容認しています。hidspx-GUIが採用したように、一行で必要なデータ
    の全てが得られる仕組みをavrdudeに追加すれば、もっとキビキビと動作するようになると
    思います。

    現状では、「簡便な使い方をしたい方はHIDaspxをお使いください」ということですね。
    実際にavrdude-GUIとhidspx-GUIを使ってみると、hidspx-GUIが劣るのは広範なライタ
    のサポートのみです。ハードウェアの価格、エラー時の表示、使い勝手、いづれもhidspxが
    優れていると思います。

    今後の発展は、これらを支える方々の熱意によると思います。羨ましいことにavrdudeは
    多くの開発者に支えられています。しかし、遠慮があるのか劇的な進化は見られません。
    コードを読んでみると、玉石混交のバラエティーに富んだ内容になっています。

    一方、HIDaspxは、hidspx用のコードを提供していただける可能性はあまりありません。
    私が開発を中止すれば、機能の強化は停止するかもしれません。多くの協力者を求めて
    いるのは、そうした不安を払拭するためでもあります。

  • senshu 2009-04-07 (火) 01:08:47
    avrdude-GUIにautoボタンを追加するのも面白いと考えました。今の作りだと、
    Deviceの欄は、avrdudeが -p ?で出力するリストそのものです。
    したがって、そのままではautoを表示することはありません。

    また、Fuseの設定には、avrdudeではAVRマイコン名の指定が必須です。

    この状況で改良するなら、auto detectボタンを追加することだと思います。
    このボタンを押下すれば、選択が必要なものを自動で設定を行うわけです。
    これが実現できれば、使い勝手は向上するでしょう。

    ただし、この手間の削減の代わりに私のコードを書くための時間が必要です。
    ゼロサム社会ということが、よく理解できます。

  • senshu 2009-04-07 (火) 20:28:09
    yuki-labさんから、オリジナルとの区別を行うため、メジャーバージョンとタイトルの
    変更をして欲しいとのことでしたので、次回の公開から、バージョンを変えます。

    内容の変更は不明ですが、不具合などやお気づきの点があれば、ご一報ください。



お名前:

ゆきの研究室(avrdude-GUIの作者)さんに報告

senshu (2009-03-31 (火) 01:21:07)

ゆきの研究室さんに「avrdude-GUI」の改良版を公開していることを伝えました。

http://yuki-lab.jp/diary/diar0903.html

avrdude-GUIを修正したという報告は初めてだったようで、公開に関し快諾を得ました。

ここで公開している「avrdude-GUI」に関し、色々なご意見をいただきたいと思っています。



お名前:

helpメッセージに修正が必要(asd)

senshu (2009-03-30 (月) 17:14:20)

asdでは、avrdudeを直接使う場合とは異なる指定が必要です。

> asd -p m88 -fX0xf8


と指定して、何故エラーが起きるかと(一瞬?)考えましたが、

> asd -q m88 -fX0xf8


と書く必要があるわけです。

asd ver.0.1.3-alpha : stk500/avrdude command line wrapper 
mode: avrdude
AVR Serial Programming support tool 
Flash=*.hex/EEPROM=*.eep    (* = filename )
  Write                   : *.hex or/and *.eep  
  Verify                  : -v *.hex or/and *.eep
  Read Flash              : -rp[h] [-o OutFilename] / -rph = only HEX dump 
  Read EEPROM             : -re[h] [-o OutFilename] / -reh = only HEX dump 
  Read Fuses              : -rf [-o OutFilename]
  Read Lockbit            : -rl [-o OutFilename]
  Read Calibrations       : -rc
Get AVR Information(Web)  : -ri
Write fuse bytes          : -fL<Hex> -fH<Hex> -fX<Hex>
Write Lockbit             : -l[<Hex>] / -l = set all lock / Hex=0x3E or 0x3C
Erase device              : -e
Control port              : -pd{<n>|u} (n=1..9 COM Port No., u:user spec.)
SPI control delay         : -d<n>      (n>=4 ,SPI Clock is clock[MHz]/n[usec])
Help (this page)          : -h or --help
Supported Devices List    : -?
Supported Adapters
AVRISP STK500(v2) / USBasp AVR-Doper,etc  COM port ,(USB)

このヘルプをみても気づきませんでした。ヘルプにも追記が必要だと思います。


  • senshu 2009-03-30 (月) 17:16:48
    「asd -!」や「asd -rF」などは指定できないので、希望する場合には自分でasd.rbを
    修正する必要があります。rubyの柔軟性を考えると、自由に機能を追加できますが、
    自分だけで使えるのでは困るので、議論の場が必要だと感じます。


お名前:

avrdude-GUIにFUSE設定参照機能(efuseの注意点)

senshu (2009-03-30 (月) 13:28:15)

yuki-LABさんのavrdude-GUIにFUSE View機能(下段、左から2番目のボタン)を追加しました。
ターゲットマイコンのFUSE設定をWeb browserで表示する機能です。
avrdude-GUI.jpg
C#に慣れていないのですが動作はします。お気づきの点があれば、コメントください。


FUSEが1個のみのデバイスの扱い

  • senshu 2009-03-30 (月) 13:43:15
    avrdude-GUIでは、AT90S4433のように、FUSEが1個のみのデバイスには対応していないことが
    わかりました。現在は、この手のデバイスは少数派ですが、このような制限があることを
    理解した上で利用してください。

    追記
    この問題は修正しました。

EFUSEの扱いの違い(stk500 VS avrdude)

  • senshu 2009-03-30 (月) 14:18:31
    以前も指摘しましたが、efuseの上位ビットが0になっている関係で、書き込み時に
    コンペアエラーになりますが、このefuseの不具合は、stk500.exeでは発生しません。
    つまり、avrdudeに起因する問題です。

    FUSE viewを追加したavrdude-GUIは、かなり便利になりましたが、stk500.exeには使えま
    せんので、avrdude側の改良が必要になるわけです。いつまで経っても改良すべき点が見つか
    ります。…とほほ、

  • senshu 2009-03-30 (月) 16:20:29
    同じような問題を指摘しているWebページもあるようです。(1年以上も前のポストですが)
    このページでは、「上位5ビットを0にセットした値で書き込みなさい」とアドバイスして
    います。Lockビットでも同様の問題が生じるようです。

    http://tinker.it/now/2007/02/24/the-tale-of-avrdude-atmega168-and-extended-bits-fuses/

    avrdudeでは、こうした不具合が修正されないことがあり、不思議に感じます。

stk500モードでFUSE表示

>asd -rf -psu

Detected device is ATmega88.
Device: ATmega88
Low: 01100010
     ||||++++-- CKSEL[3:0] システムクロック選択
     ||++-- SUT[1:0] 起動時間
     |+-- CKOUT (0:PB0にシステムクロックを出力)
     +-- CKDIV8 クロック分周初期値 (1:1/1, 0:1/8)

High:11011111
     |||||+++-- BODLEVEL[2:0] (111:無, 110:1.8V, 101:2.7V, 100:4.3V)
     ||||+-- EESAVE (消去でEEPROMを 1:消去, 0:保持)
     |||+-- WDTON (1:WDT通常動作, 0:WDT常時ON)
     ||+-- SPIEN (1:ISP禁止, 0:ISP許可) ※Parallel時のみ
     |+-- DWEN (On-Chipデバッグ 1:無効, 0:有効)
     +-- RSTDISBL (RESETピン 1:有効, 0:無効(PC6))

Ext: -----001
          ||+-- BOOTRST ※データシート参照
          ++-- BOOTSZ[1:0] ※データシート参照

Fuse Low=0x62  High=0xDF  Ext=0xF9  ← 正しいデータを表示

avrdudeモードでFUSE表示

>asd  -rf

Detecting ...


******************
 reading Fuses ...
******************

Detected device is ATmega88.
Low: 01100010
     ||||++++-- CKSEL[3:0] システムクロック選択
     ||++-- SUT[1:0] 起動時間
     |+-- CKOUT (0:PB0にシステムクロックを出力)
     +-- CKDIV8 クロック分周初期値 (1:1/1, 0:1/8)

High:11111111
     |||||+++-- BODLEVEL[2:0] (111:無, 110:1.8V, 101:2.7V, 100:4.3V)
     ||||+-- EESAVE (消去でEEPROMを 1:消去, 0:保持)
     |||+-- WDTON (1:WDT通常動作, 0:WDT常時ON)
     ||+-- SPIEN (1:ISP禁止, 0:ISP許可) ※Parallel時のみ
     |+-- DWEN (On-Chipデバッグ 1:無効, 0:有効)
     +-- RSTDISBL (RESETピン 1:有効, 0:無効(PC6))

Ext: -----001
          ||+-- BOOTRST ※データシート参照
          ++-- BOOTSZ[1:0] ※データシート参照

Fuse Low=0x62  High=0xFF  Ext=0x01  ← Extの上位5ビットは0として扱われている
Cal 0xAA


  • senshu 2009-03-30 (月) 22:36:59
    このサイトでも、efuseの書込みが意図したように行われないことが報告されています。

    http://mjo.tc/atelier/2009/02/avrdude-cookbook.html

    hidspxは、FUSEmaskのための値をAVRマイコン別に用意していますが、avrdudeでも
    同様のものが必要となるのでしょうか。

    avrdude.conf は500kB近い巨大なファイルですが、この値が見当たりません。
    ソースコードを3時間ほど熟読し、ようやくop->[0], op->[1]に格納されていること
    が理解できました。これを元に改良できそうです。

  • senshu 2009-03-31 (火) 12:42:46
    avrdudeのソースに手を入れ、efuseの値にMASKデータを追加し、stk500と同じ表示を
    行えるようにしてみましたが、修正が多岐にわたるため、BUGの混入が予想されます。

    修正を行わなくとも、上位ビットを0として扱う限り、正常に動作し、また新しいFUSE CALC
    サイトでは、上位ビットを1として問合せても、avrdudeにあわせ、0にセットした値で処理
    されることがわかりました。

    http://www.engbedded.com/cgi-bin/fcx.cgi/?P_PREV=AT90S4433&P=ATmega88

    そこで、これはavrdudeの仕様として扱うことを提案します。

    avrdude-GUIでも FUSE Viewボタンを追加し、この値をWebブラウザで確認できるので、
    混乱なく利用できると思います。


    お名前:

avrdudeを更新(avrdude.confの修正)

senshu (2009-03-30 (月) 11:54:06)

avrdudeは、テキストファイルavrdude.confに各種の定義を格納し、このファイルを
修正することで、多くのマイコンに対応できる柔軟な設計になっています。

そこで、hidspxがサポートしている定義を追加しました。(逆に、avrdude.confを元に、
hidspxの機能を強化することも可能かもしれません)

asdでefuseのデータが表示されない件を対策しました(0x1ではなく、0x01を返す必要がある)。

なお、追加チップは手元にないので、お持ちの方はぜひ結果を教えていただければ幸いです。



お名前:

asd(avrsdd-013-alpha)の使用レポート

senshu (2009-03-30 (月) 10:05:02)

audinさんが開発に取組んでいる「asd」を使ってみました。

zoom
audinさんのページから引用

入手先 ⇒ http://avr.paslog.jp/article/1079594.html

asdは、avrdudeやstk500.exeをhidspx等に近い使い方ができるようにするツールです。

USBaspのように、hidspxがサポートしているライタはhidspxを使った方がシンプルな書き込みが
可能ですが、hidspxがサポートしていない多くのライタでもhidspx的な利用可能にします。

hidspxはコマンドプロンプト上で使用するツールですが、コマンド指定がシンプルで理解
しやすく、これに準拠した使い方が可能なら、操作性の向上が期待できます。

asdは自動認識機能を実現するために実行に1秒程度のタイムラグがありますが、コマンド指定が
容易であり、使い勝手を改善できます。

その理由は、avrdudestk500本来のコマンドを入力するには確実に1秒以上の追加が
必要と考えられる為です。私の場合はhidspxの利用に慣れているのを別にしても、stk500と
avrdudeを使う多くの利用者に好感を持って使ってもらえるツールだと思います。

メッセージの配慮や接続ポートの検出は、オリジナルのツールにはない工夫です。

>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 ... Port busy or STK500 not connected
COM4 ... Port busy or STK500 not connected
COM5 ... Port busy or STK500 not connected
COM6 ... Port busy or STK500 not connected
COM7 ... Port busy or STK500 not connected
COM8 ... Port busy or STK500 not connected
COM9 ... Port busy or STK500 not connected
Could not connect to STK500 V2 on COM9


現状の版はalpha版としていますが、asdが使えるなら、ツールを直接使う必要は感じない
いう完成度です。

asdの目指している「avrdudeやstk500でhidspx流の利用を可能にする」取り組みは、大いに意味
があることが確認できました。ただし限られた時間の利用での判断は早計で、今後も継続した改良
に取組んでいただけることを期待しています。

avrdudeでAVRマイコンを確認する

>timeit asd -r

Detecting ...

Detected device is ATmega88.
Device Signature  = 1E-93-0A
Flash Memory Size = 8192 byte
EEPROM Size       = 512 bytes

Elapsed Time:     0:00:01.375

参考:HIDaspxでAVRマイコンを確認する

>timeit hidspx -r
Detected device is ATmega88.
Device Signature  = 1E-93-0A
Flash Memory Size = 8192 bytes
Flash Memory Page = 64 bytes x 128 pages
EEPROM Size       = 512 bytes

Elapsed Time:     0:00:00.125

STK500で読み出す(AVRminiprog)

 >timeit asd -psu -rp -omega88.hex
 STK500 command line programmer, v 2.2 Atmel Corp (C) 2004-2005.
 
 Connected to STK500 V2 on port USB:00A20000011E
 Setting ISP frequency to 125.0 kHz (0x06)
 Device parameters loaded
 Programming mode entered
 Reading FLASH... FLASH read
 FLASH output file  written
 Programming mode left
 Connection to STK500 V2 closed
 
 Elapsed Time:     0:00:08.953

STK500で読み出す(AVRISP-mkII)

>timeit asd -psu -rp -omega88.hex
STK500 command line programmer, v 2.2 Atmel Corp (C) 2004-2005.

Connected to STK500 V2 on port USB:0000B0044887
Setting ISP frequency to 125.0 kHz (0x06)
Device parameters loaded
Programming mode entered
Reading FLASH... FLASH read
FLASH output file  written
Programming mode left
Connection to STK500 V2 closed

Elapsed Time:     0:00:05.281

avrdudeで読み出す(AVRminiprog)

>timeit asd -rp -omega88.hex

Detecting ...


**********************
 reading... FLASH data
**********************

avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.02s
avrdude: Device signature = 0x1e930a => ATmega88 (m88)

Reading | ################################################## | 100% 6.16s
avrdude: writing output file "mega88.hex"
avrdude: Check to make sure Fuses are still correct.
avrdude: safemode: Fuses OK
avrdude done.  Thank you.

Elapsed Time:     0:00:07.656

avrdude(AVRminiprog)で書き込む(ベリファイ有り)

> timeit asd mega88.hex
Detecting ... 


************
 Writing ...
************

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.02s
avrdude: Device signature = 0x1e930a => ATmega88 (m88)
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip

avrdude: reading input file "mega88.hex"
avrdude: input file mega88.hex auto detected as Intel Hex
avrdude: writing flash (8154 bytes):

Writing | ################################################## | 100% 1.39s
avrdude: 8154 bytes of flash written

avrdude: verifying flash memory against mega88.hex:
avrdude: load data flash data from input file mega88.hex:
avrdude: input file mega88.hex auto detected as Intel Hex
avrdude: input file mega88.hex contains 8154 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 2.25s
avrdude: verifying ...
avrdude: 8154 bytes of flash verified
avrdude: Check to make sure Fuses are still correct.
avrdude: safemode: Fuses OK
avrdude done.  Thank you.

Elapsed Time:     0:00:05.328

avrdude(AVRminiprog)で書き込む(ベリファイ有り)

> timeit asd -psu mega88.hex
STK500 command line programmer, v 2.2 Atmel Corp (C) 2004-2005.

Connected to STK500 V2 on port USB:00A20000011E
Setting ISP frequency to 125.0 kHz (0x06)
Device parameters loaded
Programming mode entered
Device erased
FLASH input file  read
Programming FLASH... FLASH programmed
Reading FLASH... FLASH read
FLASH verified successfully
Programming mode left
Connection to STK500 V2 closed

Elapsed Time:     0:00:12.656

avrdude(AVRISP-mkII)で書き込む(ベリファイ有り)

Detecting ... 


************
 Writing ...
************

avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.03s
avrdude: Device signature = 0x1e930a => ATmega88 (m88)
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip

avrdude: reading input file "mega88.hex"
avrdude: input file mega88.hex auto detected as Intel Hex
avrdude: writing flash (8154 bytes):
Writing | ################################################## | 100% 1.59s
avrdude: 8154 bytes of flash written

avrdude: verifying flash memory against mega88.hex:
avrdude: load data flash data from input file mega88.hex:
avrdude: input file mega88.hex auto detected as Intel Hex
avrdude: input file mega88.hex contains 8154 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 2.36s
avrdude: verifying ...
avrdude: 8154 bytes of flash verified
avrdude: Check to make sure Fuses are still correct.
avrdude: safemode: Fuses OK

Elapsed Time:     0:00:05.546

stk500(AVRISP-mkII)で書き込む(ベリファイ有り)

C:\Documents and Settings\senshu>timeit asd -psu mega88.hex
STK500 command line programmer, v 2.2 Atmel Corp (C) 2004-2005.

Connected to STK500 V2 on port USB:0000B0044887
Setting ISP frequency to 125.0 kHz (0x06)
Device parameters loaded
Programming mode entered
Device erased
FLASH input file  read
Programming FLASH... FLASH programmed
Reading FLASH... FLASH read
FLASH verified successfully
Programming mode left
Connection to STK500 V2 closed

Elapsed Time:     0:00:07.156

参考:HIDaspxで書き込む(ベリファイ有り)

>timeit hidspx mega88.hex
Detected device is ATmega88.
Erase Flash memory.
Flash memory...
Writing   [##################################################]   8154,   3.08s
Verifying [##################################################]   8154,   5.19s
Passed.
Total read/write size = 16308 B / 8.42 s (1.89 kB/s)

Elapsed Time:     0:00:08.437


この結果を見ると、同じ書き込みハードウェアでは、stk500よりもavrdudeの方が高速に
処理していることがわかります。(-p autoによるの自動認識が効果的に機能しているの
かもしれません)。
また、参考のために付記したHIDaspxは、転送に時間を要していますが、コマンドの
発行のオーバーヘッドが無いので、-dの値を適切に選べば、遜色ない利用が可能です。


  • senshu 2009-03-30 (月) 11:04:35
    原因は不明ですが、一度だけですが、asdコマンドの発行でエラーを発生しました。

    asd -r

    の再発行で正常接続を確認すれば正常に動作を確認しました。コネクタの抜差し直後は、
    上記のコマンドで認識できるかを確認しましょう。
  • senshu 2009-03-30 (月) 11:18:57
    avrdudeに手を入れることも検討していましたが、asdが使えるなら問題は無いと考えて
    います。今後、時間が確保できた時に考えることにします [smile]
  • senshu 2009-03-30 (月) 14:16:32
    asdとは、変わった名前だと思っていましたが、キーの並び順であることがわかります。
    audinさんは、おそらくキーの打ち易さを重視してこの名前を付けたのだと想像します。
    類似の名前に、FDがありました。

    ただし、リズムから判断すると、左右の指の移動のバランスを考えると、他の組合せも
    あると思います。
  • audin? 2009-04-07 (火) 00:03:12
    こんばんわ 
    asdの大変詳しい使用レポートありがとうございます。
    「-q」コマンドのヘルプや「-rF」「-!」コマンド、「Fuse」読出し等は徐々に対応して
    いきたいと思います。「asd」の名前についてはご指摘のとおり「キーの並び順」になって
    います(^^;

お名前:

AWKによる簡易avrdude用ラッパ

senshu (2009-03-28 (土) 19:47:55)

audinさんが取り組んでいる「asd」が公開されました。

凝った造りのため、内部の仕組みの全てを理解するのは容易ではありません。
私はavrdude自体に組み込むための試作品をawkで書いてみました。

# avrdude.awk
func usage ()
{
    print "help message";
    exit 0;
}

func hexcheck(p,  h)
{
    h = substr(p, 4, 2)
    if (h == "0x"|| h == "0X") {
        return substr(p, 4);
    } else {
        return 256;
    }
}

BEGIN {
    debug = 0;
    prog_cmd = "avrdude -c avrisp2"

    for (i=1; i<ARGC; i++) {
        s = ARGV[i];
        if (s ~ /^-z$/)  {
            debug++;
        } else if (s ~ /^-r$/)  {
            cmd = "-U signature:r:-:h";
            break;
        } else if (s ~ /^-rf/)  {
            cmd = "-U signature:r:-:h -U lfuse:r:-:h -U hfuse:r:-:h -U xfuse:r:-:h";
            break;
        } else if (s ~ /^-help/) {
            usage();
            break;
        } else if (s ~ /^-f[lLhHxX]/) {
            r = hexcheck(s, 4)
            ftype = tolower(substr(s, 3, 1));
            if (r >= 256) {
                print "Hex format error"
                exit 1;
            }
            cmd = cmd sprintf(" -U %sfuse:w:%s:m", ftype, r)
        } else if (s ~ /.hex$/) {
            cmd = cmd " -U flash:w:" s ":i"
        } else if (s ~ /.eep$/) {
            cmd = cmd " -U eeprom:w:" s ":i"
        } else {
            cmd = cmd s
        }
    }
    if (debug) {
        print prog_cmd cmd
        exit 0;
    } else {
        exit system(prog_cmd cmd)
    }
}

このファイルをavrdude.awkで保存し、以下のように利用します。
gawk -f avrdude.awk --をBATファイルすると便利に使えます。-zはデバッグ用
です。-zを付けなければ、コマンドを実際に実行します。

>gawk -f avrdude.awk -- -p m88 -fL0xff -fH0xdd -z
avrdude -c avrisp2 -p m88 -U lfuse:w:0xff:m -U hfuse:w:0xdd:m

短時間で書いたためエラーチェックが不十分ですが、入力の省力化に有効です。

私の書いたscriptはavrdude-GUIを超える部分は何もなく、このスクリプトよりも
avrdude-GUIの方が気楽に使えるので、「書いてみました」の域を出ていません。
AVRマイコン別のFUSEビットのチェックや認識結果の表示、危険なFUSE指定の検出
などが必要と思っています。


  • senshu 2009-03-28 (土) 20:18:36
    audonさんのasdは、rubyで書かれていますが、1000行を超える大作です。

    非常に興味深いものとなっていますので、一読をお勧めします。

お名前: