ATMEL AVR関連の情報交換にお使いください。

VistaでのAVRUSB動作状況報告スレ

AVRマイコン総合スレ Part9


お名前:
題名:
合言葉:

自宅のREGZAにはUSB端子無し

senshu? (2010-03-18 (Thu) 18:50:29)

おぉ、と思って、自宅のREGZAの背面を見ましたが、USBコネクタは
付いていませんでした。もう少し上のグレードを買うべきだったと
ちょっとだけ後悔しました。

  • そうでしたか。私が買おうと思っていたREGZAはR9000の19Vでした。
  • 結局買いませんでしたが。 -- iruka? : 2010-03-18 (Thu) 19:39:41
    あなたの名前: 合言葉

pic18spxとusbserialの統合

senshu? (2010-03-18 (Thu) 12:03:49)

pic18spxとusbserialは同一のハードウェアで動作します。そこで同一ファームで
両方に利用可能なら、更に魅力が増すと考えます。

現状でもブートローダでファームを書き換えればよいのですが、ちょっと力技すぎ
る気がします。

切り替えの方法ですが、pic18spxには、ブートローダやRESETスイッチが付属します。
usbserialの機能を統合するにはどうすれば良いのかは検討が必要ですが、どれかの
I/Oピンで切り替えるのがもっとも簡単だと思います。
なお、18F14k50のIOは限られるので、もう一工夫が必要かもしれません。

また、可能ならシリアルデータはEE-PROMに保存し、利用者が特別の方法で変更できる
と、使い勝手が向上すると考えています。HID, CDCともに共通シリアル番号だと管理が
楽です。

あなたの名前: 合言葉

usbserialの高速化

task? (2010-03-11 (Thu) 17:44:44)

初めまして、高専でPICを勉強している学生です。ちょうど18F4550が手元にあったので
iruka様のusbserialのソースコードを読んでCDCクラスの仕組みを勉強しています。
その中で高速化できそうな部分がありました。TXIFの方がTRMTより早いタイミングで
TRUEになるので、以下のように変更すると高速化できるかもしれないです。
 //#define	mTxRdyUSART()	TXSTAbits.TRMT
 #define	mTxRdyUSART()	PIR1bits.TXIF
参考:http://www.picfun.com/pic19.html

  • これは興味深いです。
  • picspxの性能が向上すれば、マイコンの開発用定番ツールになるのは確実です。ぜひ
    検証してください。 -- senshu? : 2010-03-11 (Thu) 18:17:26

  • taskさん、こんばんは。情報ありがとうございます。usbserialに同梱されている
  • w32termにベンチマーク機能があります。実際に転送速度を測定できますので活用して
    みてください。私見では割り込みルーチンをアセンブラで書けばもうすこしいけると
    思います。非割り込みタイプのものはusb処理中に2バイト以上のデータが来ると取り
    こぼすはずなのでおのずと上限が確定している気がします。2550の場合RAMが多いので
    受信バッファを増やしたりUSBバッファをダブルバッファ化すると良いのではないかと
    思います。 -- iruka? : 2010-03-11 (Thu) 19:42:10

  • senshu様、iruka様、返信ありがとうございます。w32termにて検証してみました。
  • 低レート時にも効果があるようです。(非割り込みタイプで検証しました。)次は割り
    込みルーチンの高速化にチャレンジしてみます。

    USBハブあり,TXIF時
 38400bps:38430bps,20000 bytes/5203 ms
 57600bps:57380bps,20000 bytes/3485 ms
 115200bps:111290bps,20000 bytes/1797 ms
 230400bps:206610bps,20000 bytes/484 ms
 921600bps:413220bps,20000 bytes/484 ms
USBハブなし,TXIF時
 38400bps:38320bps,20000 bytes/5219 ms
 57600bps:57380bps,20000 bytes/3485 ms
 115200bps:112230bps,20000 bytes/1782 ms
 230400bps:203040bps,20000 bytes/985 ms
 921600bps:400000bps,20000 bytes/500 ms,数回エラーが発生しました。

USBハブあり,TRMT時
 38400bps:34120bps,20000 bytes/5860 ms
 57600bps:50990bps,20000 bytes/3922 ms
 115200bps:95550bps,20000 bytes/2093 ms
 230400bps:124300bps,20000 bytes/1609 ms
 921600bps:320000bps,20000 bytes/625 ms
USBハブなし,TRMT時
 38400bps:34680bps,20000 bytes/5766 ms
 57600bps:50580bps,20000 bytes/3954 ms
 115200bps:97700bps,20000 bytes/2047 ms
 230400bps:140640bps,20000 bytes/1422 ms
 921600bps:328400bps,20000 bytes/609 ms
 -- task? : 2010-03-11 (Thu) 20:05:58
  • taskさんこんばんは。確かに速くなっています。効果ありですね。 -- iruka? : 2010-03-11 (Thu) 23:08:39

  • あなたの名前: 合言葉

VersaloonはAVRminiProgの作者の作品です

senshu? (2010-03-07 (Sun) 12:23:29)

ARMやAVRなどのマイコンとして広く使えるVersaloonですが、このサイトページには
思い出があります。私は、HIDaspx以前は、AVRminiProgを推していました。

世界的に見ても、AVR ==> AVRの移行は、順当なのかもしれません。

あなたの名前: 合言葉

Project Nutsスタート

senshu? (2010-03-02 (Tue) 21:58:12)

プロジェクトNuts用の利用者限定の掲示板をスタートしました。
大変お手数ですが、一度、以下のURL
http://www-ice.yamagata-cit.ac.jp/forum/viewforum.php?f=15 にお越しください。

  • sq.exe見ました。ライセンスが緩いのがいいですね。 -- iruka? : 2010-03-02 (Tue) 23:19:05

  • 組み込むにはluaも良いのですが、文法が独特です。squirrelの構文なら、C言語に
  • 慣れていれば、説明書はほとんど不要です。squirrelを理解すれば、多くのツールに
    気軽に制御構造を実装できます。-- senshu? : 2010-03-03 (Wed) 00:27:12

あなたの名前: 合言葉

picspxとhidspxのソースの類似性にびっくり!です

senshu? (2010-02-27 (Sat) 14:15:28)

ソースの差分は、わずかに500行です。uni-diff差分ですから、実際の違いは
その数分の一です。これしか違わないのであれば、-phpの最後の'p'はpicspx
に割り当てるべきでした。今後は、例えば-phs のようにオプションを追加し、
単一バイナリでの提供ができればと思います。
ブートローダ書き込み済みのPIC18F14k50が入手できるなら自作も容易です。

avrdudeのようにconfファイル修正で新規のAVRに対応することはできませんが、
ソースコード提供なので、それ程の負担なく改良ができるのは、avrsp系ツールの
大きな特色です。MinGWでコンパイルできるので、事実上、テキストの修正で対応
出来ることになります。

  • senshuさん、こんにちは。picspxですが、完全にhidspxのパクりです。
  • インタラプト転送化改造もせずにVID,PIDも合わせたらそっくりそのまま動いた
    んですけど、いろいろ変えてみては実験しております。 -- iruka? : 2010-02-27 (Sat) 14:37:16

  • コードが落ち着いたら、picspxの機能を統合しましょう。その時は
  • 教えてください。 -- senshu? : 2010-02-28 (Sun) 12:11:25

  • senshuさん、りょうかいです。 -- iruka? : 2010-02-28 (Sun) 18:47:25

  • 一応コードは落ち着きました。 -- iruka? : 2010-03-18 (Thu) 00:12:59

  • 了解です。修正点も僅かなので、近日中に統合したいと思います。(現在、このための時間を
  • 確保できません)。
    と書きましたが、実際に差分を確認すると、USBの読み書きに異なる関数を採用していて、
    十分にチェックしないと公開できないと感じました。修正によるエンバグを避ける意味から、
    当面は異なるコマンドで使うのが無難かもしれません。 -- senshu? : 2010-03-18 (Thu) 08:51:31

  • 実はhidcmd.hのマッピングが大分違っています。統合するならどちらかに合わせた方が
  • 良いです。それとコマンドの引数の仕様も各マイコンの事情で微妙に違っているので、
    これも統合するならどちらかに合わせた方が良いのです。但しATtiny2313のほうは容量
    一杯なのでいじれないかも。 -- iruka? : 2010-03-18 (Thu) 19:48:27

あなたの名前: 合言葉

irukaさんにお願いがあります

senshu? (2010-02-26 (Fri) 18:48:38)

メールで書きましたが、ARMマイコンなどが続々登場していますが、小ピンの低価格
が必要な教育や趣味の分野では、依然としてAVRマイコンは魅力的です。
そこで、AVRマイコンを使った「新規」プロジェクトが進行中です。

メールをお読みいただき、ご協力をお願いいたします。

あなたの名前: 合言葉

Windowsでタイムアウトを検出する

senshu? (2010-02-23 (Tue) 06:56:48)

以前、WindowsでCMDプロンプト上で動作するWebブラウザ(lynx)を改良していた
時に、似たようなことで悩んだことを思い出しました。
その時には、CreateThread?を呼び出し、タイムアウトを検出しました。
Unix系のOSに見られるような forkと似た方式で対応するわけです。
時間の経過を別の関数で計測でき、一定時間の経過を検出し、反応が
無い時には例外処理を発行できます。

http://msdn.microsoft.com/ja-jp/library/kdzttdcb%28VS.80%29.aspx

が(多少は)参考になると思います。
しかし、これらの関数の利用は難解で、いつもリファレンスと首っ引きでないと
使いこなせません。(理解力が無いためもしれませんが、qsort以上に複雑です)

  • senshuさん、おはようございます。CreateThread?は比較的重いAPIなので、1回の
  • ReadFile?のために発行するのは難しいと思います。

    ReadFile?,WriteFile?を非同期で行うには、overlaped引数を与えることと、終了待ちに
    WaitForSingleObjectを使い、あらかじめタイムアウトを指定しておくということらしいです。
    http://www.geocities.jp/ky_webid/win32c/053.html
    RS232C受信のときにこれをやろうとしたのですが、全然うまく行かなかった経験があります。
    (CreateFile?時にRead/Writeの双方をoverlapedにするのですが、送信の非同期I/Oが始まる
    と受信が完全ブロックされてしまうような感覚です) -- iruka? : 2010-02-23 (Tue) 09:21:37

  • 確かに、秒あたり千回を越えるスレッドの生成はありえないですね。でもタイムアウトが
  • 想定される場合には、どう書くべきなのでしょうか。↑の解説ページを拝見するとスレッドと
    ほぼ同様の内容になっています。 -- senshu? : 2010-02-23 (Tue) 10:16:15

  • WaitForSingleObjectにミリ秒単位のタイムアウト設定が出来ますので、(USBの場合なら)10
  • フレーム程度の時間であきらめるようにするというのはどうでしょうか。
    ブロックされるReadFile?を使った場合はスレッドごと殺すしかないというのが問題だと
    思います。 -- iruka? : 2010-02-23 (Tue) 10:59:28

あなたの名前: 合言葉

pic18spxの発展に期待します

senshu? (2010-02-21 (Sun) 11:52:37)

irukaさんが書いているように、PICマイコンは欠点もありますが、価格や
USB I/Fに魅力を感じるのも事実です。

18F2550モジュールが安価に入手できることから、これを利用したものが
普及すればおもしろいですね。

今後の発展に期待しています(私に出来ることは協力します)。

  • senshuさん、こんにちは。
  • 一応2550と14K50の両方で(普通の速さで)PICが焼けるようになりました。
    HIDaspx相当のことも出来ます。
    次は簡易オシロを考えています。 -- iruka? : 2010-02-21 (Sun) 13:11:42
    あなたの名前: 合言葉

Re: STM8SのReference Manualを読んでみる

senshu? (2010-02-18 (Thu) 17:33:05)

なるほど、反則販促の理由が明らかになりましたね。

ARMというおまけが必須のアイテムなのかもしれません。
PICも同じですが、AVRマイコンのスマートさを再認識する一件です。

あなたの名前: 合言葉

dude-wrapの新バージョン公開

senshu? (2010-02-17 (Wed) 09:29:27)

内容は変わっていませんが、説明書に ATtiny2313をArduino IDEから利用する
方法を追加しました。hidspxが使える方なら、無理なくArduino IDEでプログラム
開発が可能になります。何と言っても無償で使え、本物よりも書き込みが速い
のが嬉しいです。

普及を目指していますので、irukaさんのサイトにミラーしていただければ幸いです。

  • senshuさん、こんにちは。早速転載させていただきます -- iruka? : 2010-02-17 (Wed) 12:37:18

  • 早速の掲載に感謝します。無償の開発ツールの使い勝手はかなりのものです。
  • AVRマイコンは、メーカー純正のツールの充実度?に反して、無償開発環境の充実度は
    スゴイです。これを利用しないのは勿体無いですね。 -- senshu? : 2010-02-17 (Wed) 18:04:48

  • senshuさん、こんばんは。Arduinoがtiny2313にも応用できると言うのは朗報です。
  • ありがとうございました。 -- iruka? : 2010-02-17 (Wed) 21:53:59

  • irukaさん、教えてください。COMポートが付属しないnetBookではうまく動作しません。
  • COM1 は機能しなくとも、オープンできるだけでよいのですが妙案はないでしょう
    か。 -- senshu? : 2010-02-17 (Wed) 22:21:17

  • com0comを使って解決しました。インストールはわかりにくいです。
  • ドライバフリーを目指すHIDaspxには不釣合いです。 -- senshu? : 2010-02-17 (Wed) 22:54:17

  • >COMポートが付属しないMacBook? ・・・と、空目してしまいました。com0comってFreeBSDで
  • 動いたっけ?
    NullModem?エミュレータならいくつかありそうですね。HIDaspxにこだわらなければ、HID-CDC
    複合デバイスを作れば両方同時に出現します。
    あとは、秋月のUSB-RS232C変換ケーブルを挿しておく、というのもユニバーサルな(?)
    解法です。OSを選びません。秋月のUSB-RS232C変換ケーブルなら、自作派の人は誰でも
    持ってますからね! -- iruka? : 2010-02-17 (Wed) 23:44:01

  • 自宅で試したのですが、残念ながら秋月のケーブルは手元にありませんでした。
  • 似たような事態が予想されます。私が直ぐに思いつくのは、Arduinoの書き込みボタン
    を使わずに別のライタソフトで書き込むことですが、お手軽な環境の提供が目的の
    Arduinoには不釣合いと感じました。 -- senshu? : 2010-02-18 (Thu) 08:08:10

  • http://www.eterlogic.com/Downloads.html から入手できるものが利用が簡単でし
  • た。でもアプリケーションタイプで、PC起動のたびに操作が必要です。 -- senshu? : 2010-02-18 (Thu) 23:28:32

あなたの名前: 合言葉

64ビット環境で、hidspxが不安定

senshu? (2010-02-14 (Sun) 19:06:47)

Windows版のhidspxも一段落ですが、Linuxなどの64ビット環境での
不具合報告が保留状態です。

http://www-ice.yamagata-cit.ac.jp/forum/viewtopic.php?t=172
私には検証できる環境もありません。irukaさんはお持ちのようですが、
その後の進展はありますか?

  • senshuさん、こんばんは。精力的なVersionUp?に敬服いたします。ところで、
  • 上記の'ばんと'さんが遭遇した不具合に関しましては、私のAMDマザーボードが
    別の人の手に渡ってしまいまして、再現試験はできなくなっていま
    す。 -- iruka? : 2010-02-14 (Sun) 19:30:48

  • 普通のintel G31マザー上でなら、ubuntuの試験は可能です。 -- iruka? : 2010-02-14 (Sun) 19:32:02

  • 今回の改訂作業は2時間程度/日以上(都合20時間を越えます)を費やしています。
  • 一番時間がかかるのは、評価と文書作成です。いろいろなサイトに書き込んだので、
    そのフォローやメール対応にもかなりの時間が必要でした。

    でも、商用版登場も間近ですが、ユニークなシリアル番号での出荷が決定しました。
    これで、HIDaspxが危険な存在として扱われるのを阻止できました。irukaさんも
    共通の思いがあると思います。

    Linux版のテストは、intel G31でのテストで充分です。何か分かりましたら、
    教えてください。Linux版にもWindows版で行った自動認識の追加が必要と考えま
    すが、一個人の努力では限界を感じます。 -- senshu? : 2010-02-14 (Sun) 20:05:58

あなたの名前: 合言葉

hidspxのシリアル番号自動認識機能の不具合(解決)

senshu? (2010-02-11 (Thu) 16:26:42)

HIDaspxの利用者から、「USBコネクタの場所により、自動認識が上手くいかないこと
がある」という問い合わせがありました。
複数を自動認識で使うことはないのですが、「PCに接続されていないシリアル番号が
リストされる」のは想定外です。
 シリアルナンバーを 0007と0100で実験してみました。
 USBポートに差し込む場所の違いや順番により以下の結果となりました。
 
  シリアル0007 シリアル0100
 1 usb_a先接続  usb_b後接続 0000,0007,0100,0107の表示
 2 usb_a後接続  usb_b先接続 0100表示
 3 usb_b先接続  usb_a後接続 0100表示
 4 usb_b後接続  usb_a先接続 0100表示
2〜4は、正常です。しかし、1は想定外の動作です。残念ながら、私のところ
ではこの現象を再現できません。私なりに対策を行いますが、irukaさんも
心当たりがあればアドバイスをいただければ幸いです。

■ 追記:
昔(約1年半前?)の苦労した記憶が蘇ってきました。

HidD_GetSerialNumberString関数が意図した値を返さない場合があり、直前の行に
Sleep(20); を実行し対応しました。この部分で、不安定要素があるのかもしれま
せん。PCが高性能なほど、この値では待ち時間が不足することも考えられます。
(私の開発環境は数年前の平均的な性能レベルですから)

  • もしかすると、V-USBの応答時間の関係でしょうか。HUB経由の違いが結果の違いを
  • 生んでいる気がしてきました。 -- senshu? : 2010-02-11 (Thu) 16:46:01

  • 私なりのアドホックな方法で修正してみましたが、改善されているかは未確認です。
  • -ph?でリストする機能は簡単に実現できることがわかったので、irukaさんの
    意見を思い出し、その機能を追加し、現在公開中です。動作確認にご協力ください。
 >hidspx -ph?
 VID=16c0, PID=05df, [  YCIT], [HIDaspx], serial=[0100] (*)
 VID=16c0, PID=05df, [  YCIT], [HIDaspx], serial=[0999]
この表示結果から察すると、必ずしもシリアル番号の数字が大きい方が優先される
とは限らないことがわかりました。商用版ファームでは以下のように表示します。
 >hidspx -php?
 VID=20a0, PID=410e, [  YCIT], [HIDaspx], serial=[0000] (*)
なお、商用版のファームウェアでも無償版との性能の違いはありません。-- senshu? : 2010-02-12 (Fri) 13:56:46
  • 不具合を再現できる環境で、2010-0212版のテスト結果が届きました。1のケースで
  • 180回ほどの-ph?を実行し、86%程度が認識エラー、9%は正常、5%の誤認識という
    状況です。動作不安定時は、ほとんどがエラーになるわけで、これは正しい動作です。
    全部のエラーを捕捉出来ないは残念ですが、以前は不安定なまま動作することもあり、
    修正の効果はあったと考えます。現在は、hidmonのbenchテストを依頼しています。
    なお、シリアル番号の化け方には規則性があります。
 正しい 0007, 0100
 誤り   0107, 0000
上位の2桁が不安定なようです。 -- senshu? : 2010-02-13 (Sat) 10:21:54

  • benchコマンドでも問題を切り分けることができなかったので、2010-0213a版にて、
  • -ph?1000のようにテスト回数を指定できるようにしました(力技です)。これで、
    USB通信の安定度が確認できます。このテストでエラーが起きるなら、ハードウェアの
    安定度に問題があります。 OGURAMさんから、3個のHIDaspxで正常動作の報告を頂きました。
    http://d.hatena.ne.jp/OGURAM/20100213 -- senshu? : 2010-02-13 (Sat) 16:48:49

  • その後、不安定な動作をするHIDaspxを同じシリアル設定のHIDaspxに交換したところ
  • 問題が解決した、という報告がありました。単独利用では問題が起きなかったとのこと
    ですが、複数のデバイスを接続すると、電源電圧の低下なども生じます。
    今回の件で、安定度を確認する機能も追加でき、実りはあったと考えます。
    一連の経過を以下のURLにまとめました。
    http://www-ice.yamagata-cit.ac.jp/forum/viewtopic.php?t=412
    興味のある方は、ご覧下さい。-- senshu? : 2010-02-13 (Sat) 19:19:34

  • hidmon, hidmon.dll にも同様の機構を追加し、2/14版としました。当分の間、
  • 修正は停止します(時間も割けません)。連日の更新作業を行っていただき、
    感謝いたします。 -- senshu? : 2010-02-14 (Sun) 15:56:44
    あなたの名前: 合言葉

hidspx, hidmonに追加したい機能(完了)

senshu? (2010-02-07 (Sun) 08:15:17)

irukaさん、おはようございます。
hidspx.exe, hidmon.exe, hidmon.dll について、VID/PIDの異なるファーム
に対応する機能は追加しましたが、今、気になっていることがあります。

商用のファームは、一個毎に異なるシリアル番号を書き込んで出荷して
もらいたいと考えています。しかし、そうするとシリアル番号の指定が
必須となります。これは正確に指定すべきですが、理解が十分でない
(あるいは指定すべき番号がわからない)場合には、混乱を起こす可能
性があると考えます。

そこで、-ph* のように指定すると、若番のHIDaspxを自動でサーチする機能
を追加したいと思いますが、いかがでしょうか。

私は、自動認識は混乱の元になると思っているので、この実装には積極的で
はないのですが、irukaさんのご意見をお聞きかせください。

現時点でも、シリアル番号のリストアップ機能を実装していたつもりでしたが、
不完全でした。改良が必要です。
 > hidspx -ph?
 Manufacturer: [  YCIT], Product: [HIDaspx], serial number: [0000]

  • -ph* で自動サーチするアイディアは良いですね。 -- iruka? : 2010-02-07 (Sun) 12:43:30

  • 同じシリアル番号のUSB機器が氾濫するのは避けたいと思っています。問題は誰が
  • 実装するかですが、「隗より始めよ」ですね(涙)。一応書いてみますので、
    テストにご協力ください。 -- senshu? : 2010-02-07 (Sun) 18:59:30

  • 何とか対応してみました。
  • ご意見をお願いいたいます。 -- senshu? : 2010-02-08 (Mon) 11:19:37

  • senshuさん、こんにちは。いつもありがとうございます。早速DL致します。 -- iruka? : 2010-02-08 (Mon) 13:23:19

  • ちょっとした修正漏れがあり、20100208aに差し替えました。 -- senshu? : 2010-02-08 (Mon) 14:41:45

  • senshuさん、こんばんは。お世話になります。0208aを早速テストしました。
  • 気になる点をリポートします。 -- iruka? : 2010-02-08 (Mon) 19:42:19
    シリアルNo0777のデバイスを新たに焼いてシリアルNo0000と同時挿しで試しました。
 hidspx.exe -ph?
では、常に0777が優先して表示され、0000は表示されません。
 hidspx.exe -ph -r
同じく、常に0777が優先して選択され、0000は使用されません。
0777を抜くと、0000が認識され選択されます。
 hidmon.exe
これも同様に0777と0000の同時挿しの状態では0777が優先して接続されるようです。

hidspx.exe, hidmon.exeともに、シリアルNoを明示的に指定すれば正しいほうを選択して
使用できることを確認しました。

気になることとしましては、-ph?では接続されているhidaspxデバイスを列挙出来たほうが
より親切かと思いました。-ph もしくは -ph*で、どちらが優先接続されるのかは(たまたま
私の環境では0777のほうでしたが)不定であっても特に問題はないと思います。(基本、普通
のユーザーは1デバイスのみしか使用しませんので・・・)
hidmon.dllのテストはまだです。

それから、同一PID,VIDかつ同一シリアルのUSBデバイスを2個PCに挿すと、WinXPは問答無用で
リセットされました。
以前は挿した瞬間にリセットされていたので電源をショートさせたような錯覚でした。
本日は、たまたま、USBデバイスとして認識されたメッセージが出た直後にブラックアウトして
BIOSになりました。

この現象は自分のWinXP固有の問題なのか、WinXP普遍的な問題なのかの切り分けはまだ
です。 -- iruka? : 2010-02-08 (Mon) 19:57:40

  • irukaさんのレポートを要約すると、私の意図したようには動作しているようです。
  • -ph?でリストされるものが一つだけなのは、操作対象になっているシリアル番号の
    表示と考えてください。列挙する方が親切ですが、これが実現できても、どちらのHIDaspxが
    シリアル番号かは特定できません。複数のHIDaspxを同時に使いたい場合には、一台ずつセット
    してシリアル番号を調査し、その番号を指定して使うことになります。ですから、この仕様で
    問題はないと考えています。また、自動で選択されるシリアル番号は、Windows任せです。
    どういうルールで選択するのかは私もよくわかりませんが、OSが認識した順と考えていました。
    シリアル番号が大きい方が優先されて選択するようです。

    なお、同一のVID/PIDかつ同一シリアルは非常に危険な動作をします。
    Windows2000ではもう少し穏やかですが、どのOSでも、「同一のVID/PID
    かつ同一シリアル」は誤動作の原因になるので、シリアル番号はユニーク
    にする必要があります。 -- senshu? : 2010-02-08 (Mon) 21:20:04

  • senshuさん、了解いたしました。
  • では、この仕様でいきましょう。 -- iruka? : 2010-02-08 (Mon) 22:48:54

  • HIDaspxに限らず、これをきっかけにV-USBを利用した機器でもシリアル番号の重要性に理解が
  • 深まればと考えます。Windows2000に複数個の同一シリアル番号のHIDaspxをセットした時に
    表示されるダイアログを以下のURLに載せました。irukaさんのWindows XP環境とは異なり、
    ややマシな動作です。
    http://www-ice.yamagata-cit.ac.jp/forum/viewtopic.php?t=405
    しかし、どちらも期待に反する動作です。 私も 0000と0100のシリアル番号で同時挿し
    をテストしましたが、0100が優先されました。結果から推測すると、大きいシリアル
    番号が選択されるようです。デフォルト値(0000)は絶妙な選択で
    した。-- senshu? : 2010-02-08 (Mon) 23:32:22

  • USB接続可能なARMが750円では自作派のモチベーションが維持出来ません。(涙)
  • でも、考え方次第ですね。ARMは結構複雑なので。 -- senshu? : 2010-02-11 (Thu) 00:32:13

  • hidspx-2010-0211版を公開しました。毎度のことですがバグ無し公開は
  • 難しいです。 -- senshu? : 2010-02-11 (Thu) 09:32:42

  • 例のARM基板は自分でファームを焼き変えて使うとなると、(JTAG書き込み器とか)
  • 逆にかなりの手間と投資がかかりそうです。同じようなチップを使った基板は
    StrawberryLinux?で4000円程度で売られていますから配線のしやすさを考えると
    あまりお勧めできません -- iruka? : 2010-02-11 (Thu) 10:33:08

あなたの名前: 合言葉

hidspxの更新

senshu? (2010-01-26 (Tue) 17:28:51)

irukaさん、こんにちは。

hidspxの実行ファイル群は、1年程前からUPXにて圧縮して公開していましたが、
ノートン2010は、UPX圧縮されたファイルを軒並み削除してしまうとの報告が
ありました。

悪意のあるファイルに間違われるのは心外なので、圧縮せずに公開することに
しました。インストール後にUPXで圧縮するのは、個人の判断で行ってください。

ということで、こちらでミラーして戴いているものも、最新アーカイブに差し替え
ていただければ幸いです。

  • hidmonも併せて修正を行い、公開(後悔?)しました。 -- senshu? : 2010-01-27 (Wed) 18:55:13
  • 差し替え完了いたしました。 -- iruka? : 2010-01-28 (Thu) 19:45:27
  • ご協力に感謝します。ご意見ご要望をお寄せください。 -- senshu? : 2010-01-29 (Fri) 12:22:37
  • あなたの名前: 合言葉

dis78k EOF

hobios? (2010-01-16 (Sat) 09:11:47)

更新有り難うございます.不連続箇所が出力されるようになりました.
(複数行のコメント追加がうまくできず改題で失礼します.)
sample2.hex では,次のようになりました.

 0080 7f          db    0x7f
 0081 00          db    0x00
 
 0084 00          db    0x00
 
 f000 9b 18 f0    br    !0xf018
 
 
 f004 48 65 6c    cmp   a,!0x6c65
 f007 6c 6f       callf !0xb6f
 (snip)
 f040 71 11 06    mov1  0xff06.1,cy
 f043 fa e1       br    $0xf026

最後の 0xf045〜0xf047 B0 B6 AF が出力されないようです.hobios 拝

78Kdisasm 連続4バイトに満たない場合

hobios? (2010-01-11 (Mon) 12:15:11)

こんにちは.昨年末 "NEC78K 逆汗" でお世話になりました.

また,うまく変換されない場合に遭遇しましたので,報告に参りました.
トラ技付録の sample1.hex, sample2.hex の内容と出力結果です.
sample1.hex
 :010080007F00
 :01008100007E
 :01008400007B
 :03F000009B03F07F
 :10F00300B7711B26160000C6EA307561FE9D0386A4
 :0DF01300FAF520711706711106FAE9B6AF83
 :00000001FF

 f000 9b 03 f0    br    !0xf003~
 
 f003 b7          push  hl~
 f004 71 1b 26    clr1  0xff26.1~
 f007 16 00 00    movw  hl,#0x0000~
 (snip)

sample2.hex
 :010080007F00
 :01008100007E
 :01008400007B
 :03F000009B18F06A
 :10F0040048656C6C6F204C4544208360834A836060
 :04F01400834A0A0021
 :10F01800B7B1891CD6711B261004F09AC8189ACC6F
 :10F028001862BE01100100B1C6809AD818B0AE01AE
 :10F038004D78AD0920711706711106FAE1B0B6AF27
 :00000001FF

 f004 48 65 6c    cmp   a,!0x6c65~
 f007 6c 6f       callf !0xb6f~
 (snip)

0x0080, 0x0081, 0x0084 番地の内容は両者共に出力されません.
また,sample2.hex では,0xf000〜0xf002 も出力されません.
sample2.hex の 0xf003 は空白になっており,アドレスが不連続となっています.
main.c の int Read_Binary( Packet *p , int req) 内で,連続4バイトに
満たないデータがスキップされているようです.
Disasm_Line() 以降の処理には,完全な命令を構成するだけのデータが必要でしょうか?
ソースを拝見しながらあれこれ思案中です.hobios 拝

NEC78K 逆汗

hobios? (2009-12-25 (Fri) 19:02:07)

初めまして.NEC78K の話題もここでよろしいでしょうか?
AVR ライタ関連ということでお許しください.
逆汗を有り難く使わせて頂いております.
使用環境は,Mac OS 10.3.9 ( Panther ) Xcode 1.5 です.
ビルド実行共に何の問題もありませんでした.

さて,入力ファイルとして,トラ技BIOSのダンプ出力を与えた場合,
行を跨ぐコードがうまく変換されないケースに遭遇しました.例えば,
 01C0 61 F8 B0 30 BE 00 60 FA 12 4D 03 AD 08 4D 04 AD a..0..`..M...M..
 01D0 04 A1 05 FA 47 22 B5 B1 61 F8 B0 BE 03 B0 BE 05 ....G"..a.......
 
 01c0 61 f8       sel   rb3
 01c2 b0          pop   ax
 01c3 30          xch   a,x
 01c4 be 00       mov   [hl+0x00],a
 01c6 60          mov   a,x
 01c7 fa 12       br    $0x01db
 
 01c9 4d 03       cmp   a,#0x03
 01cb ad 08       bz    $0x01d5
 01cd 4d 04       cmp   a,#0x04 
 
 01d0 04 a1 05    dbnz  0xfea1,$0x01d8
 01d3 fa 47       br    $0x021c
 
 01d5 22          push  psw
 01d6 b5          push  de
 01d7 b1          push  ax
 01d8 61 f8       sel   rb3
 01da b0          pop   ax
 01db be 03       mov   [hl+0x03],a
となり,01cf AD がスキップされます.次の箇所でも同様です.
 02A0 32 FA 02 A1 FF 4D FF AF B7 D6 AE 00 70 AE 01 EA 2....M......p...
 02B0 00 80 8D 25 EA 00 C0 9D 20 75 30 72 A0 00 AE 02 ...%.... u0r....
   
 0300 61 D0 EE 1C 20 FE 10 00 00 03 92 FB 03 7E FB 03 a... ........~..
 0310 82 FB 40 03 80 FB 10 96 FB 03 94 FB 16 1F FE A3 ..@.............
デバッガで追跡してみたところ,
 main.c:157    return p->size;
  (int Read_HexDump( Packet *p ,char *linebuf) 内 )
で,p->size の値が 17 になっているため,呼び出し側で
 main.c:204        // 連続性がない場合はアドレスをリセット.
 ( int Read_Binary( Packet *p , int req) 内 )
のケースと判断されているようです.とりあえず,強引に
 main.c:157    if ( p->size > 16 ) p->size = 16; return p->size;
としてみましたが,Packet 内での整合性がとれているか等が心配です.
一応,上記の箇所ではうまく動いているようです.

以上,お礼と報告まで.hobios 拝

  • ごめんなさい.今,整形ルールを読んでいます. -- hobios? : 2009-12-25 (Fri) 19:06:12
  • hobiosさん、はじめまして。拙作78Kdisasmをお使いいただきありがとうございます。 -- iruka? : 2009-12-25 (Fri) 20:08:32

  • トラ技biosのHEX解析は微妙にあやふやです。申し訳ありません。ヒマなときにデバッグしておきます。 -- iruka? : 2009-12-25 (Fri) 20:09:36

  • なんだかasciiダンプの先頭文字をデータの続きと勘違いしているような気もします。 -- iruka? : 2009-12-25 (Fri) 20:11:00

  • 早速のお返事有り難うございます。奇麗に整形までして頂いて申し訳ありません. -- hobios? : 2009-12-25 (Fri) 20:54:11

  • ビンゴでした。
 01C0 61 F8 B0 30 BE 00 60 FA 12 4D 03 AD 08 4D 04 AD a..0..`..M...M..

 a..0..`..M...M..の部分をテキストエディタなどで削除するとちゃんと動作するよう~
です。 -- iruka? : 2009-12-25 (Fri) 21:24:50

  • 修正方法に関しましてはhobiosさん御指摘の通りmain.c:157への16byte制限でOKです。 -- iruka? : 2009-12-25 (Fri) 21:30:05

  • 素早い御対応有り難うございます. -- hobios? : 2009-12-26 (Sat) 00:43:46
  • あなたの名前: 合言葉

PICmonの通信仕様

ogura? (2009-11-22 (Sun) 19:50:57)

irukaさん、こんばんは
PICmonのDLL化やAPI(HID.dll)の活用勉強中です。
http://hp.vector.co.jp/authors/VA000177/html/AVR_Monit.html
    0      1      2      3      4      5      6      7
 +------+------+-------------+------+------+-------------+
 | req  | cmd  |  address    | data0|data1 |   reserved  |
 +------+------+-------------+------+------+-------------+
    0      1      2      3      4      5      6      7
 +------+------+------+------+------+------+------+------+
 |  読み出したRAMの内容(最大8バイトまで)           |
 +------+------+------+------+------+------+------+------+
PICmonの通信仕様は上記通信仕様と思っていましたが
HidD_SetFeatureとHidD_GetFeatureを使って見ると
    0      1      2      3      4      5      6      7
 +------+------+------+-------------+------+------+------+
 | req  | cmd  |Length|   address   | data0|data1 |      |
 +------+------+------+-------------+------+------+------+
    0      1      2      3      4      5      6   〜 63
 +------+------+------+------+------+------+------+------+
 | RepID|読み出したRAMの内容(最大63=>[Length]バイト)|
 +------+------+------+------+------+------+------+------+
のような気がします。
過去掲示板の何処かにバルク転送8バイトと書いてあったような・・・
実際の送信コマンドと受信パケットは何バイトでしょうか?
勉強不足で申し訳有りませんが宜しくお願い致します。

  • 上記にbmReq[bmRequestType]を追加修正しました -- ogura? : 2009-11-23 (Mon) 07:59:33

  • oguraさん、こんにちは。PIC18Fの実装はoguraさんのご指摘のとおりの構造になります。
  • ドキュメントが不正確で申し訳ありません。 -- iruka? : 2009-11-23 (Mon) 12:08:14

  • HIDデバイスの場合、デバイスが返答するパケットの先頭に必ずReportIDが1バイト付加される、
  • というのは、HIDデバイスを定義したマイクロソフトが決めた取り決めです。 -- iruka? : 2009-11-23 (Mon) 12:14:15

  • また、デバイスがらHIDReportを受け取るためには、直前にReportIDと要求Lengthを指定したパケットを
  • デバイスに送信しなければならないようです。 -- iruka? : 2009-11-23 (Mon) 12:19:15

  • ずいぶん昔にAVR-USBを触っていた頃は、libusb経由でデバイスとやりとりしていましたので、
  • HidD_GetFeatureの仕様と若干異なっていたと思います。 -- iruka? : 2009-11-23 (Mon) 12:21:44

  • AVRの場合はバルクパケットは送受ともに8バイトで運用しています。これはLowSpeed? USBの物理パケット
  • ペイロードサイズの上限です。 -- iruka? : 2009-11-23 (Mon) 12:23:59

  • 今回話題にしているpicmon.dllではUSB 2.0規格ですが、この場合、上限は変わるの
  • でしょうか(公開している側の意見とは思えない発言ですが) -- senshu? : 2009-11-23 (Mon) 14:16:17

  • irukaさん、ご丁寧な説明どうも有り難う御座います。bmReq→RepID修正も有り難う御座います。 -- ogura? : 2009-11-23 (Mon) 14:29:48

  • 私の確認ではLengthの位置はaddressの前なので、もう少し確認してみます。
 /*確認中の抽出リストです
 typedef	struct {
 	uchar report_id;   	//★ 0 req
 	uchar cmd;		//★ 1 cmd
 	uchar size;		//★ 2 Length
 	uchar adr[2];		//★34 address
 	uchar data[48];		//★5~ data0,data1 [59]??★
 } cmdBuf;
 DLL_int UsbPoke          (int adr, int arena, int data, int mask);
 	return usb_Poke(adr,arena,data,mask);
 	return pokemem(adr,arena,data0,data1);
 	memset(&cmd,0,sizeof(cmdBuf));
 		cmd.cmd   = CMD_POKE ;	//| arena;	//★ 1 cmd
 		cmd.size  = 1 | arena;			//★ 2 Length  arena??★
 		cmd.adr[0]= adr;   			//★ 3 address_L
 		cmd.adr[1]= adr>>8;			//★ 4 address_H
 		cmd.data[0] = data0;			//★ 5 data0
 		cmd.data[1] = data1;			//★ 6 data1
 	return QueryAVR(&cmd,buf,HidLength1,0);
 	rc = hidReadBuffer((char *)cmd , reply_len , ID1);
 	return hidRead(hHID, buf, length, report_id);
 	rc = HidD_GetFeature(h, buf, Length);
 */
 -- ogura? : 2009-11-23 (Mon) 14:31:15

  • Lengthとsizeを混同していました。最大63=>[size]バイト
  • HidD_GetFeature(IN HANDLE HidDeviceObject,OUT PVOID ReportBuffer?,IN ULONG ReportBufferLength)
    MSDN説明のReportBuffer?[2]がsizeのようですね。
    uchar size;                        //★ 2 size
    cmd.size = 1 | arena;               //★ 2 size
    HidD_GetFeature(h, buf, Length);      //★ Length=0x40固定値?
    それからuchar data[48]が気になっています。 -- ogura? : 2009-11-23 (Mon) 17:01:17

  • PIC18Fにおきましては、LowSpeed?ではなくFullSpeed?デバイスなので8byte上限の縛りはありません。 -- iruka? : 2009-11-23 (Mon) 20:34:58

  • それから、HID ReportIDとLengthの関係は、自分で取り決めて良いので、それに従ったパケット
  • サイズでお互いにやりとりをすることになります。 -- iruka? :

usb_desc.asm

 ;-----------------------------------------------------------------------------
 ; Report descriptor
 USB_HID_RPT
 ;;PROGMEM char usbHidReportDescriptor[] = {
    db 0x06, 0x00, 0xff             ;// USAGE_PAGE (Generic Desktop)
    db 0x09, 0x01                   ;// USAGE (Vendor Usage 1)
    db 0xa1, 0x01                   ;// COLLECTION (Application)
    db 0x15, 0x00                   ;//   LOGICAL_MINIMUM (0)
    db 0x26, 0xff, 0x00             ;//   LOGICAL_MAXIMUM (255)
    db 0x75, 0x08                   ;//   REPORT_SIZE (8)
 
    db 0x85, 0x01                   ;//   REPORT_ID (1)
    db 0x95, 0x3f                   ;//   REPORT_COUNT (62)
    db 0x09, 0x00                   ;//   USAGE (Undefined)
    db 0xb2, 0x02, 0x01             ;//   FEATURE (Data,Var,Abs,Buf)
 
    db 0x85, 0x02                   ;//   REPORT_ID (2)
    db 0x95, 0x3f                   ;//   REPORT_COUNT (30)
    db 0x09, 0x00                   ;//   USAGE (Undefined)
    db 0xb2, 0x02, 0x01             ;//   FEATURE (Data,Var,Abs,Buf)
 
    db 0xc0                         ;// END_COLLECTION
 ;; };
 USB_HID_RPT_end

  • 上記の例ですと、
 ReportID=1  のとき 63byte
 ReportID=2  のとき 63byte
結局PIC18Fでは全て64byteパケットでやりとりしていることになります。
cmdBuf;のdata[48]は正しくありません。バッファオーバランを考慮すると59にすべきです。
しかし、実際の使われ方はAVR互換のままなのでdata[]は8byteまでしか使用していません。

もうひとつ、ソースコード内で混同している箇所を見つけました。申し訳ありません。
以下に説明いたします。 -- iruka? : 2009-11-23 (Mon) 20:52:08
まず、AVR_MonitはHIDデバイスではありません。(記憶が混乱しておりました。)
以下のパケット構造はバルク転送の生パケット8byteの構造ですが、そのままコントロール転送
(ベンダーリクエスト)に流用できる構造となっています。

http://hp.vector.co.jp/authors/VA000177/html/AVR_Monit.html
    0      1      2      3      4      5      6      7
 +------+------+-------------+------+------+-------------+
 | req  | cmd  |  address    | data0|data1 |   reserved  |
 +------+------+-------------+------+------+-------------+
    0      1      2      3      4      5      6      7
 +------+------+------+------+------+------+------+------+
 |  読み出したRAMの内容(最大8バイトまで)           |
 +------+------+------+------+------+------+------+------+

  • AVR_Monitでは、HIDデバイスになっていませんし、libusb経由で直接USBデバイスに対して
  • コントロール転送リクエストや返答を受け取ることが出来るのです。

  • 当然ながら、マイクロソフトのHID取り決めとは無縁です。USB1.1の規格書にあるコントロール
  • 転送のベンダーリクエスト(とその応答)を使用します。HID_ReportIDはここには全く出てきま
    せん。ベンダーリクエストの形式は常に8バイト固定です。(オプションとして後続パケットを
    与えることは可能ですが、転送方向はinかoutかの2択です)

    ところが、HIDデバイスになると、直接コントロール転送を使うことは出来ません。
    HidD_SetFutureで送るデータというのは、実はベンダーリクエストクラスリクエストの後続
    パケットに過ぎないのです。なので、HIDデバイス化するとスループットが落ちます。

  • irukaさん、お早うございます。いろいろ御説明有り難う御座います。
  • 話が難しすぎて、頭の中が混乱しています。(チンプンカンプン・・・)
    USB規格とPIC側のソフトも勉強してみます。
    今後とも宜しくお願い致します。 -- ogura? : 2009-11-24 (Tue) 08:37:57

  • こちらこそよろしくおねがいします。 -- iruka? : 2009-11-24 (Tue) 16:49:10

  • データの上限に関した回答に感謝します。たしかに、一読しただけでは理解は不可能
  • ですね。 -- senshu? : 2009-11-24 (Tue) 19:01:25

  • irukaさん、お早うございます。cmdBuf;のdata[48]は
  • VBAからHidD_GetFeatureを使うとsizeに関係なく
    64バイト書き変わるため他の変数領域を浸食しているようです。
    やはり常時64バイトパケットのようですね。 -- ogura? : 2009-11-25 (Wed) 07:42:55

  • irukaさん、こんにちは、ネットで調べても
  • 頭の中がチンプンカンプンなので自己流でやってみました。
 //usb_desc.asm
 	db 0x95, 0x08	;★0x3f	;//   REPORT_COUNT (62)
 	db 0x95, 0x08	;★0x3f	;//   REPORT_COUNT (30)
FeatureReportByteLength =9 となりました。
HidD_GetFeatureのLenthは0x9〜0x40でGet出来ているようです。
これから検証してみます。ご指導宜しくお願い致します。 -- ogura? : 2009-11-25 (Wed) 16:11:43
cmdBuf;のdata[48]はHidD_GetFeatureのLenthの数だけ書き変わるようです。
 //hidasp.h
 #define	REPORT_LENGTH1		9	//★64	// 8  REPORT_COUNT(6)
 #define	REPORT_LENGTH4		9	//★64	// 40 REPORT_COUNT(38)

  • これでコンパイルしたpicmon.dllとpicmon.exeも検証中です。 -- ogura? : 2009-11-25 (Wed) 17:09:26

  • oguraさん、そんな感じでOKだと思います。 -- iruka? : 2009-11-25 (Wed) 17:44:20

  • irukaさん、今晩は
  • 私の勝手な妄想ですが最小限のパケットを作る可能性が有ればやってみたいと思います。
    最大65バイトパケット高速転送の可能性も有れば・・・
    初心者なのでパイプについては何もわかっていません。
    0      1      2      3      4      5      6      7      8
 +------+------+------+-------------+------+------+------+------+
 | req  | cmd  |Length|   address   |data0 |data1 |      |      |現状送信パケット(9バイト)
 +------+------+------+-------------+------+------+------+------+
 | RepID|      読み出したRAMの内容(最大8バイトまで)       |現状受信パケット(9バイト)
 +------+------+------+-------------+------+------+------+------+
 +------+------+------+------+------+------+------+------+------+
 | req  | cmd  |   address   |data0 |data1 |アドレスセット兼用   送信パイプ2(6バイト)
 +------+------+------+------+------+------+------+------+------+
 | RepID| data |        1バイトデータ専用                       受信パイプ3(2or1?バイト)
 +------+------+------+-------------+------+------+------+------+
 +------+------+------+------+------+------+------+------+------+以下は要アドレスセット
 | req  | data0| data1| data2| data3| data4| data5| data6|data7|送信パイプ4(9バイト)
 +------+------+------+------+------+------+------+------+------+
 | RepID| data0| data1| data2| data3| data4| data5| data6|data7|受信パイプ5(9バイト)
 +------+------+------+-------------+------+------+------+------+Addr==+8
 +------+------+------+------+------+------+------+------+------+
 | req  | data0| data1| data2| data3| data4| data5|  〜  |data63|送信パイプ6(65バイト)
 +------+------+------+------+------+------+------+------+------+
 | RepID| data0| data1| data2| data3| data4| data5|  〜  |data63|受信パイプ7(65バイト)
 +------+------+------+-------------+------+------+------+------+Addr==+64

  • RepID=dataとなれば1バイト最小パケットになりますか?
  • 送信パイプ4と送信パイプ5は兼用可能ですか?
    送信パイプ6と送信パイプ7は兼用可能ですか?
    コマンドを工夫すれば送信データは下記のような事は可能ですか?
 00:Write Normal   0xff       全ビット書込  【ノーマル】
 01:Write And      0b00001000 offビット消去 【 マスク 】
 10:Write Or       0b00001000 on ビットセット【 セット 】
 11:Write Xor      0b00001000 on ビット反転 【 反転 】

  • これはパイプ2〜7に使えそうと思っています。
  • ご意見、ご指導を宜しくお願い致します。上記にご自由にご記入下さい。 -- ogura? : 2009-11-25 (Wed) 19:19:37

  • oguraさん、こんばんは。HIDパケットですが、ホストとやりとりするためのコントロール転送
  • シーケンスが最低でも8バイトあり、1回のパケットの前後にもプリアンブルやらCRC16があり
    ますので、あまり短くしても意味がないような気がします。

    PIC18の場合、最小8バイト、最大64バイトくらいの塊でやりとりするのが宜しいのでは
    ないでしょうか。 -- iruka? : 2009-11-25 (Wed) 19:41:08

  • あと、oguraさんがおっしゃっているパイプの使い道が理解できないのですが、unixのpipeのような
  • 概念で使用されるのであれば普通にバルク転送のエンドポイントを複数個用意したほうが素直だと
    思います。 -- iruka? : 2009-11-25 (Wed) 19:44:27

  • ReportIDは1〜255の数値であり、後続するデータの種類(とサイズ指定)を表すための識別に
  • なっています。ただ後続データは最低1バイトは必要なのではないかと思います。
    普通のHIDデバイスなら、後続データはマウスのΔX,Y,ボタン状態、などになります。固定長です。
    これが何種類か存在しサイズも異なるわけですのでReportIDで区別しようと言うのがmicrosoftの
    発想です。 -- iruka? : 2009-11-25 (Wed) 19:49:17

  • irukaさん、お早うございます。ご説明有り難う御座います。
  • コントロール転送については、またチンプンカンプンなので勉強してきます。
    db 0x95, 0x01 ;★0x3f ;// REPORT_COUNT にしたら
    FeatureReportByteLength =2 となりました。(db 0x95, 0x00はダメでした。)
    HidD_GetFeatureのLenthは0x2〜0x40でGet出来ているようです。
    とりあえず私の目的は確認できましたのでパイプの追加の必要は無くなりました。
    つまらない質問をしてしまいました。ご説明どうも有り難う御座いました。 -- ogura? : 2009-11-26 (Thu) 08:52:37

  • oguraさん、USBの転送パケットを表示するのに、SnoopyPro?というフリーソフトがあります。
  • これを使うと転送内容の可視化ができるので使ってみてください。 -- iruka? : 2009-11-26 (Thu) 09:06:34
  • irukaさん、お早うございます。SnoopyPro?使ってみました。
  • CLASS_INTERFACEパケットのアンサーは[ACK]だと思っていましたが
    CONTROL_TRANSFERパケットなのですね。ボチボチ勉強中です。 -- ogura? : 2009-11-27 (Fri) 07:53:46

  • irukaさん、こんにちは。いろいろ実験してみましたが
  • パケットサイズを小さくしても通信時間短縮効果は有りませんでした。(ガッカリ)
    しかし現状通信速度には満足しています。おかげさまでHIDの勉強になりました。
    今度は送信data[2]〜data[58]と受信buf[8]〜buf[63]の利用方法を模索しています。
    0      1      2      3      4      5      6  〜  63   // db 0x95, 0x3f //REPORT_COUNT
 +------+------+------+-------------+------+------+------+//
 | Req  | cmd  | Size |   address   |data0 |data1〜data58|//送信パケット(64バイト)
 +------+------+------+-------------+------+------+------+//uchar data[59]
 +------+------+------+------+------+------+------+------+//#define BUFF_SIZE 256->64?? unicode32??
 | RepID| buf0 | buf1 | buf2 | buf3 | buf4 | buf5〜 buf63|//受信パケット(64バイト)
 +------+------+------+------+------+------+------+------+//unsigned char buf[BUFF_SIZE];

  • boot_cmd 0x424 //★デバイス側のパケットでいいですか?
  • CtrlTrfData 0x540 //★ホスト側のパケットでいいですか?
  • モニタしているとUSB RAM 400-7FFh Bufferにいろいろ、それらしいデータが
  • 並んでいますが、よくわかりません。しかしSize=63が指定できるのでとても助かっています。 -- ogura? : 2009-11-28 (Sat) 11:35:52

  • HIDはドライバー不要でお手軽なのですがintelのUHCIホスト(大半がそうです)では速度が
  • 望めません。速度を重視するのでしたらバルク転送モードをお勧めします。 -- iruka? : 2009-11-28 (Sat) 13:01:57

  • HIDmon for AE-18F2550 に飛びついた最大の理由は【HIDはドライバー不要】です。
  • H68/TRやApple][ 6502 モニタを思い出しながら楽しんでいます。
    残念ながらPICのアーキテクチャーは好きになれません。
    そういう点AVRは大好きでしたが今は開発環境が有りません。
    バルク転送については今後の学習課題にします。 -- ogura? : 2009-11-28 (Sat) 16:53:30

  • oguraさん。PICのアーキテクチャーに関しては同感です。アーキテクチャーが良いとか
  • 悪いという以前に、制約をたくさん用意してわざとプログラミングしにくくしていると
    しか思えません。だからPIC使いはマゾと揶揄されたりします。 -- iruka? : 2009-11-28 (Sat) 17:44:21
    あなたの名前: 合言葉

hidspx-2009-1116を公開しました

senshu? (2009-11-19 (Thu) 11:03:53)

「ATmega328pのヒューズ情報が、mega168などとは異なる」の報告を受け、
hidspxに付属している fuse.txtなどを修正した版を公開しています。

これ以外にもいくつかの修正を行っていますので、irukaさんのミラーも
更新していただければ幸いです。

  • senshuさん、こんばんは。精力的な改良に感謝します。ミラーサイトを
  • 更新いたしました。 -- iruka? : 2009-11-19 (Thu) 19:42:56
  • 1125版を公開しました。avr-gccのバージョンを間違える、というミスを修正しました。 -- senshu? : 2009-11-25 (Wed) 19:36:01
  • senshuさん、ありがとうございます。 -- iruka? : 2009-11-25 (Wed) 22:21:50
  • あなたの名前: 合言葉

PICmonをMPLABプロジェクトに組込み

ogura? (2009-11-14 (Sat) 19:46:15)

irukaさん、こんばんは
hidmon-0814.zipに中にある。
bootloader.mcpプロジェクトは開けませんでしたので、
$PICmon.mcpというファイルに
 Source Files
 file_000=boot.asm
 file_001=usb.asm
 file_002=usb_desc.asm
 file_003=vectors.asm
 file_004=flash.asm
 file_005=hidmon.asm
 Linker Files
 file_006=sd18f2550-0000.lkr

> ビルドしたら

 Error[113]   C:\$MPLAB\$PICMON\BOOT.ASM 135 : Symbol not previously defined (VECT)
エラーになりますので対策として
boot.incファイルに
 ; Application FW RESET and INTERRUPT VECTORS
 ; VECT は Makefileで定義されます。
 ;その為MPLABプロジェクト用定義追加
 #define	VECT	0x000000
としましたら、
$PICmon.hexとbootloader-0000.hexは一致しました。
こんな方法で宜しいでしょうか?
リンカーがよく理解できていません。
makefileの使い方もよくわかっていません。
勉強中ですので宜しくお願い致します。

  • oguraさん、こんばんは。たぶんそんな感じでOKかと思います。 -- iruka? : 2009-11-15 (Sun) 03:29:32
  • 私のほうは逆に*.mcpのほうが全く分かりません -- iruka? : 2009-11-15 (Sun) 03:30:52

  • 私には、GUIスタイルのDEBUGを行わないなら、Makefileの方が圧倒的に理解が容易です。
  • 統合開発環境は、モノによって違いが多すぎますが、Makefileなら、その心配はあまり
    ありません(多少の方言は存在します)。
    ということで、これを機会にMakefileの書き方を学習してみてはいかがでしょう。
    1時間もあれば、最低限の理解できると思います。 -- senshu? : 2009-11-15 (Sun) 12:00:00

  • oguraさんのところでMPLAB上でビルドし、HEXファイルを生成するまでの手順が書か
  • れていますが、とても複雑な手順です。私はmakeを学ぶ方が幸せになれると感じまし
    た。 -- senshu? : 2009-11-19 (Thu) 11:36:37

  • senshuさん、いろいろご指導有り難う御座います。
  • MPLABは漢字環境対策が必要なのでややこしくしていますが非漢字ユーザーアカウント
    ならば新規プロジェクトで登録は*.asmと*.lkrだけのようです。
    試しにExport MakefileをしてみたらMakefileとNMakefileが出来ていました。
    Makefileの書き方はまだよくわかりませんが参考になりました。
    使い方の練習にMinGWのmingw32-makeを使ってDLLを作ってみました。
 DLL_int UsbRead          (int adr, int arena, uchar *buf, int size);
 DLL_int UsbFlash         (int adr, int arena, uchar *buf, int size);
 DLL_int Usbdumpmem       (int adr, int arena, uchar *buf, int size);
 DLL_int UsbBootTarget    (int adr, int boot);
 DLL_int UsbEraseTargetROM(int adr, int size);
 DLL_int UsbAnalogPoll    (int mode          , uchar *abuf);
 DLL_int Usbhid_ping      (int i);
 DLL_int QueryAVR         (cmdBuf *cmd,uchar *buf,int cmd_len,int reply_len);

QueryAVRを見ていたらHidD_SetFeatureとHidD_GetFeatureにたどり着き、VBAを使って
PICmon.DLLとAPIのHID.dllでいろいろ勉強しています。 -- ogura? : 2009-11-20 (Fri) 17:22:04

  • その成果をぜひ公表してください。更に魅力が増すと思われます。MPLABの弱いところは、
  • きめ細かな動的なビルドが難しい点です。私は複数のHEXファイルを1回の操作で作成したい
    のですが、方法がわかりません。makeなら簡単なのですが。 -- senshu? : 2009-11-20 (Fri) 18:25:55
  • senshuさん、こんばんは 成果というほどの物では有りませんが
  • エクセルVBAからAPI経由でアクセスしてみました。
    実験レベルですので実用には、ほど遠いと思います。
    【PICapi.lzh】をアップしました。
    http://homepage2.nifty.com/SEIDENSYA/Excel_PIC/PICapi.lzh
    上記のツールでHIDデバイス検索してみました。
                           PICkit2  PICmon  PICkit3
 VendorID                =     4D8     4D8      4D8
 ProductID               =      33      3C     900A
 VersionNumber           =       2      10        2
 SerialNumber            =            0001     0001
 InputReportByteLength   =      41       0       41
 OutputReportByteLength  =      41       0       41
 FeatureReportByteLength =       0      40        0
PICkitはどんなプロトコルで通信しているのでしょうね??
HidD_SetFeatureとHidD_GetFeatureは興味深い物です。
よく調べていませんがコールバックが有るといいなと思っています。
【PICapi.lzh】の元になった【$PICdll.lzh】もupしました。
http://homepage2.nifty.com/SEIDENSYA/Excel_PIC/$PICdll.lzh
DLLは確認不足ですので参考になるかどうか??。 -- ogura? : 2009-11-22 (Sun) 19:08:35

あなたの名前: 合言葉

HIDSPI2のソースコードが公開されました

senshu? (2009-11-10 (Tue) 09:17:16)

irukaさん、おはようございます。
picboot(18F14k50用)を利用した、AVRマイコン用ライタ「HIDSPI2」がソース付きで
公開されました。当初はHEXファイルだけでしたが、私がお願いし、ソースも公開さ
れるようになりました(ご存知かもしれませんが)

http://www-ice.yamagata-cit.ac.jp/ken/senshu/sitedev/index.php?AVR%2Fnews48#c9921200

↑のURLでその経過がわかります。苦労して蒔いた種が成長するのを楽しみにしています。

  • senshuさん、こんにちは。HIDSPI2ですが、汎用SPIブリッジなので多用途に使える
  • のではないでしょうか。昇圧回路も入っているのでPIC焼きにも使えそうです。
    ただ、AVRとPIC両用ライタにすると差し間違いでチップが壊れそうで怖いです
    が。 -- iruka? : 2009-11-10 (Tue) 17:06:57

  • HIDSPIと勘違いしていたようです。HIDSPI2には昇圧回路があるようですね。
  • ただし、このオプション部分の説明が不足していて、詳細は不明です。もう少し、
    機能を理解した後で再度コメントしたいと思います。 -- senshu? : 2009-11-10 (Tue) 17:13:48
    あなたの名前: 合言葉

usbRS232に関するお願い

senshu? (2009-11-06 (Fri) 22:26:58)

irukaさんが作成され、その後、たまたま私が保守しているusbRS232ですが、
kumanさんから、「Readme.txt の記述に作者の名前が欠けているなどの
不自然さがある」との指摘がありました。

http://www-ice.yamagata-cit.ac.jp/forum/viewtopic.php?t=217

そこで、お忙しいところ恐縮ですが、Readme.txtを再点検していただき、
irukaさんのサイトで公開していただくのがよいと思っています。

大変勝手ですが、作者や協力者を追記していただければ幸いです。

P.S.
実は、私はusbRS232の保守を続ける自信がありません。その理由は、1.1規格のCDC
クラスを安定に使えるのは、Windows XPに限られ、今後はそのOSも縮小傾向です。
また、同じ時間をかけるなら、PIC18F14k50辺りを改良する方が多くの方々に
幸せになってもらえると思っています。

  • senshuさん、こんばんは。kumanさんご指摘の通りReadmeには不備がありますので
  • rewrite致します。今しばらくお待ちください。 -- iruka? : 2009-11-07 (Sat) 00:28:19
    あなたの名前: 合言葉

エクセルでHIDmon-2550をテスト中

ogura? (2009-11-04 (Wed) 21:04:38)

Irukaさんの【picmon.exe】を使って、
エクセルをDos窓代わりにしみました。
エクセルなので高速動作は期待できませんが、
手作業のDosコマンドよりは早そうです。
使い方によってはBATファイルの方がよいかも・・・
http://homepage2.nifty.com/SEIDENSYA/Excel_PIC/
掲示板の使い方がよくわからず過去ログ1 に
書いてしまい引っ越しました。ゴメンなさい。

  • oguraさん、こんにちは。HP拝見いたしました。これからもPICmonをよろしく
  • おねがいします。 -- iruka? : 2009-11-04 (Wed) 22:35:11

  • AVR用のHIDmonのようにDLLを用意すれば、ちゃんとVBAからドライブ出来る
  • ようになるのですが、まだ手をつけていません。 -- iruka? : 2009-11-04 (Wed) 22:36:38

  • 既にpicmon.dllを作成し使っていますが、暫定公開してみましょうか。 -- senshu? : 2009-11-05 (Thu) 01:18:50

  • irukaさん、これからも宜しくお願い致します。~ -- ogura? : 2009-11-05 (Thu) 08:44:08

  • senshuさんのHPも拝見しております。
  • 千秋さんのDLL(PICMON-DLL-0514.zip)をためして見ましたが、私の理解不足のため
    使いこなせていません・・・()
    http://homepage2.nifty.com/SEIDENSYA/Excel_PIC/PIC_HID.lzh
    新しいバージョンがありましたらよろしくお願いいたします。-- ogura? : 2009-11-05 (Thu) 08:49:16

  • 公開済みだったことを忘れていました。PICMON-DLL-0514.zipが最新版です。
  • 私のところでは正常なので、VBAの書き方の問題だと思います。もう少し、奮闘
    してみてください。 -- senshu? : 2009-11-05 (Thu) 12:21:31

  • senshuさん、どうも有り難う御座います。
  • DLLでかなり高速にモニタできるようになりました。 -- ogura? : 2009-11-07 (Sat) 11:16:36

  • 動作したようですね。お疲れ様でした。picmonを操作するよりも、DLLを使う方がコーディング
  • 自体は容易で、USB-HUBを経由すると更に速度が向上できます。 -- senshu? : 2009-11-07 (Sat) 17:24:06

あなたの名前: 合言葉

irukaさんありがとう!

海苔三郎? (2009-10-21 (Wed) 02:19:48)

VUSBリファレンスプロジェクトってサンプルいっぱいですね。
COM5と認識はされましたが、テラタームでCOMオープンできませんでした。
とりあえずUSBシリアルは保留しといて、VUSBのサンプルでも実行したり
改造したりして楽しんでみようかなーと思っています。VUSBリファレンス
プロジェクトでワンチップAVRライタ兼USBシリアル変換モジュールを誰か
早くつくってほしいものです!

  • シリアルが動かない原因は大抵USB2.0HUBのせいです。HUB無し直結しないと
  • 動きません。 -- iruka? : 2009-10-21 (Wed) 22:56:15

  • USB 1.1のCDCは例外的な扱いですので、HUBは使えなかったのですね。思い出しました。
  • 私は、これを理由に開発を断念しました。 -- senshu? : 2009-10-21 (Wed) 22:58:58

  • みなさん、いろいろとアドバイスありがとうございます。また、週末に作業を再開したいと
  • 思います。やっぱり今度は、MEGA328でAVRライター兼USBシリアル変換ボードを
    作ろうかなと思ってます。USBのプログラムって難しそうだったけど、ターゲット側のプロ
    グラムって基本的にはエンドポイントの読み書きぐらいしかしてないことが分かり自分でプロ
    グラム作る気になりました。 -- 海苔三郎? : 2009-10-23 (Fri) 00:06:31

  • 海苔三郎さん、こんにちは。そうですね。USBはセットアップ系は大変ですが雛形を使ってしま
  • えば特に難しくありません。エンドポイントの読み書きはunixのpipeだと思えば簡単です。
    サイズ制限はきついですが。 -- iruka? : 2009-10-23 (Fri) 10:45:08

  • V-USBを極めてしまったら、USB-PICでfull-speedデバイスにも挑戦されると面白いです
  • よ。 -- iruka? : 2009-10-23 (Fri) 10:46:30

  • V-USBのCDCは、Windows XPでしか上手く動作せず、かつHUBを通過できないことを理解した上で
  • 作成してください。HIDaspxはUSB-HUB経由で高速に機能するので、HUBが使えないのは大きな痛手
    です。この制限がなければ、魅力的なのですが、 -- senshu? : 2009-10-23 (Fri) 21:57:58

  • V-USBのプログラムMEGA328で挑戦したけど、結果はさんざんでした
  • (やればやるほど分けわからん)。最終的な開発環境はMEGA328で
    Arduinoです(サンプルスケッチが大量にあり初心者には助かります。)
    ブートローダをHidaspで書きこみ、秋月のUSBシリアル変換モジュールで
    スケッチの書き込みとシリアルデバッグをするという感じです。
    USBケーブルの抜き差しをほとんどしなくてもいいので、ストレスなくAVR
    プログラミングを楽しんでます。 -- 海苔三郎? : 2009-11-02 (Mon) 22:41:49

  • 海苔三郎さん、こんにちは。最近ではsenshuさんがavrdude wrapperを開発された
  • ので、ArduinoからHIDasp経由でスケッチを実行することも出来るようです。 -- iruka? : 2009-11-02 (Mon) 22:58:24

  • V-USBのサンプルプロジェクトは大抵mega8とかmega88のビルドになっているので、
  • 328に持っていくだけでもちょっとした移植作業が必要なことがあります。
    むしろmega8とmega88を買ったほうが楽ですよ。 -- iruka? : 2009-11-02 (Mon) 23:00:20

  • senshuさんのavrdudeラッパーでブートローダの書き込みを実行すると
 #=> hidspx -d4 -ph --new-mode -d4 -e -l0xFF -fX0xff -fH0x9d -fL0xe4 
  Detected device is ATtiny2313.  
  Erased.  
  Fuse Low byte was programmed (0xE4).  
  Fuse High byte was programmed (0x9D).   
  Fuse Extend byte was programmed (0x01).  
  Lock bits are programmed (0xFF).  
 #=> hidspx -d4 -ph --new-mode -d4 -l0xCF Detected device is ATtiny2313. 
 Lock bits are programmed (0xCF). 
上記メッセージが表示されました。その後、FlashMemoryをSaveしてみると
hexファイルに":00000001FF"が書き込まれていました。スケッチを書き込む場合、ブート
ローダの書き込みだけでは作業が足りないのでしょうか? -- 海苔三郎? : 2009-11-03 (Tue) 06:31:43

  • Arduino IDEでは、ブートローダの書き込みに先立って(dude-wrapに限りません)、ボード
  • を正しく選択する必要があります。上の場合はtiny2313が選択されているようで、ブートローダは
    何も書き込まれません(Flashが消去され、FUSEが適正に設定されるのみ)。
    なお、適合しないブートローダの書込み(FUSE設定)はAVRマイコンを使用不能にすることが考え
    られるため、十分な注意が必要です。また":00000001FF"は、AVRマイコンの全ての番地が0xffに
    なっていることを意味します。 -- senshu? : 2009-11-03 (Tue) 14:03:15

  • irukaさんも書いていますが、V-USBで各種のプロジェクトを試すには、できるだけ原本と
  • 同じ構成で試してください。私も、できる限り同じ構成で動作を確認後に移植に取り組んで
    います。異なる構成を採る場合には自前で問題を解決できるスキルが求められます。 -- senshu? : 2009-11-03 (Tue) 17:57:03
    あなたの名前: 合言葉

avrdoper.infはどこでダウンロードできますか?

海苔三郎? (2009-10-20 (Tue) 02:02:41)

avrdoper.infはどこでダウンロードできますか?
AVRDOPER社のAVRUSB−20081126.ZIPを解凍しましたが
見当たりませんでした。
HIDaspxライタの作成の成功に気をよくして、HIDaspxに2313を2個乗っけて、
AVRライタとUSBシリアル変換をスライドスイッチで切り替えられる基板を
作成したのですが、USBシリアル変換ドライバが見つからず途方にくれています。
どうか、よろしくお願いします。

  • 海苔三郎さんこんばんは。

avrdoperは以下のページからDLしてみてください。

http://www.obdev.at/products/vusb/avrdoper.html

  • AVR-Doper.2008-11-27.zip

 Archive:  AVR-Doper.2008-11-27.zip
  Length   Method    Size  Ratio   Date   Name
 --------  ------  ------- -----   ----   ----   ------    ----
       0  Stored        0   0%  08-11-27 AVR-Doper.2008-11-27/
       0  Stored        0   0%  08-11-27 AVR-Doper.2008-11-27/avrdebug/
   11324  Defl:X     3689  67%  08-11-27 AVR-Doper.2008-11-27/avrdebug/avrdebug.c
   12800  Defl:X     6256  51%  08-11-27 AVR-Doper.2008-11-27/avrdebug/avrdebug.exe
    4264  Defl:X     1814  58%  08-11-27 AVR-Doper.2008-11-27/avrdebug/avrdoper.py
    1244  Defl:X      681  45%  08-11-27 AVR-Doper.2008-11-27/avrdebug/Makefile
     511  Defl:X      348  32%  08-11-27 AVR-Doper.2008-11-27/avrdebug/Makefile.windows 
===XPの場合、これは消しておきます。(↓)
    1662  Defl:X      685  59%  08-11-27 AVR-Doper.2008-11-27/avrdoper-vista.inf 
===こいつです。(↓)
    1656  Defl:X      684  59%  08-11-27 AVR-Doper.2008-11-27/avrdoper.inf 
       0  Stored        0   0%  08-11-27 AVR-Doper.2008-11-27/avrdude/

以下略です。

  • 他にもv-usbのリファレンスプロジェクトは非常に参考になりますので、いろいろ
  • 見ていくと楽しいですよ。 -- iruka? : 2009-10-20 (Tue) 20:24:27
    あなたの名前: 合言葉

過去ログ

掲示板-過去ログ1


Counter: 42.77, today: 1, yesterday: 42.77

Last-modified: 2010-03-21 22:47:48