PICでUSBを!(知識ゼロからのスタートです)
PIC18F14K50のUSB機能を100%自前のソフトで制御する試みです。しかもアセンブラで!
当記事は2009年12月から「TTLでCPUをつくろう!」というタイトルの もとにほとんど毎日連載をしてきたものを再編集したものです。 |
2011.7.10 前へ 次へ 目次へ戻る ホームページトップへ戻る |
☆C++でUSB(HID)アクセスプログラムを作成 PIC側のプログラムはC18コンパイラを使わずPICアセンブラで作成しますが、パソコン側のUSB(HID)アクセスプログラムはBorland C++コンパイラで作成します。 しかしこれがまた難物で悪戦苦闘の連続でありました。 |
[第46回]
●HIDテストプログラム(HIDデバイスの検出)
前回までの説明でやっとHIDテストプログラムのコンパイルもエラーなく完了し、その結果作成されたEXEプログラムもどうやら正しく実行されるところまでできたようです。
いよいよ実際にHIDデバイスを接続して、それが正しく検出されるかどうか試してみることにしました。
前回までのソースプログラムから、さらに余分なところを削って、必要なところだけにして、実行してみました。
あ。まだ余計なところが残っていました。
indexの表示は不要でした。
上の画面は、USBコネクタにHIDデバイスを接続して、hidtest.exeを実行させたところです。
USBに接続されているHIDデバイスを全て検出し、そのVenderIDとProductIDを表示させています。
2番目に表示されている、VenderID=15ca、ProductID=c3は、USBマウスです。
3番目の、VenderID=4d8、ProductID=33は、秋月のPICプログラマです。
そして1番目に表示されている、VenderID=4d8、ProductID=aは、私が現在作成中のPIC18F4550テスト基板です。
うまく検出できたようです。
ここまでできたら、あとはこのようにして検出したVenderIDとProductIDからターゲットデバイスを確定し、それに対してWRITEFILE、READFILEを実行すればよい、ということになります。
そこで、ここまでの作業の締めくくりとして、簡単にソースプログラムの説明をしてから、いよいよ次の段階に進む、つもりだったのですけれど…。
またもや、問題が発生してしまいました。
●XPではUSBマウスを検出できません…
すでに何度も書いておりますように、私は普段の作業にWindowsXPは使っておりません。
いまだにWindows98SEを使っております。
しかしながら、当然のことに、皆様方のほとんどはWindowsXPをお使いのはずですから、となりますと、やっぱりXPでも一応は動作テストをしておく必要があります。
で、XPでも同じようにhidtest.exeを実行してみましたら…。
なんと、USBマウスを接続しているにもかかわらず、VenderIDもProductIDも検出してくれません。
だけではなくて、なんだか非常にいやーな結果になってしまいます。
なにがおきているのか、もう少し詳細を知りたいと思いましたので、余分な表示をカットしてしまって、indexとVenderIDとProductIDだけを表示するようにしたhidtest.exeではなくて、その前に作成したhidtest1_8_g.exeを実行してみました。
WindowsXPでHidtest1_8_g.exeを実行したところです。
さきほどお見せしたWindows98SEの画面と同じように、USBマウスとPICプログラマと試作中のPIC18F4550基板を接続してテストしてみました。
たしかにindex=0〜2ですから、HID装置を3つ検出しています。
しかしVenderIDとProductIDをよく見てみますと、2番目と3番目が同じになってしまっています。
どちらかがPICプログラマで、そしてどちらかがUSBマウスのはずです。
なのに、両方ともPICプログラマのVenderID、ProductIDになってしまっています。
VenderIDの前にそのデバイスへのデバイスパス情報を表示させていますので、それを見てみますと、2番目では、vid_04d8&pid_0033となっていて、VenderID、ProductIDと一致しています。これはPICプログラマに間違いありません。
3番目は、vid_15ca&pid_00c3になっていますから、これがUSBマウスです。
しかし、VenderIDとProductIDは、2番目のままです。
ううう。
困る。
これでは困ります。
どうしてWindows98でまっとうにできているものが、WindowsXPだとだめなのでしょうかねぇ。
ま。Windowsではこんなことは日常茶飯事でありますから、いまさらぼやいてみたってはじまりません。
とにかくは、なんとかしなければ、これでは使い物にはなりません。
うむむ。
デバイスパス情報にある、vid_xxxx&pid_xxxxをチェックするという手もあるかと思いますが。
ところが、逆にWindows98ですと、デバイスパス情報には、vid、pidは含まれていないのです。
ならば。
windows98用とWindowsXP用に2本立てでプログラムを用意する?
たかがHIDのプログラムで、それはないでしょうよ。
あ。本日は時間がなくなってしまいました。この続きは次回にいたします。
CPUをつくろう!第473回(2010.4.9upload)を再編集
PICでUSBを![第46回]
2011.7.10upload
前へ
次へ
目次へ戻る
ホームページトップへ戻る