MC9S08JS8 にGUIアプリケーションを書く (2) [USB]
ハードウェアが出来た。 In-Circuit Program も出来た。 次は、 USB アプリケーションに挑戦です。
前回の記事では、MC9S08JS8でUSBデバイスを作成しました。 今回は、PCにこのUSBデバイスを認識させます。
STEP2 : デバイス・ドライバの作成
これまでの GUI アプリケーション開発で最大の難関は、デバイス・ドライバの作成でした。 Window$の仕様を正しく理解して、それなりのプログラムを書く必要があります。 最初にDEMOJM向けのサンプルアプリケーションを見つけた時からデバイス・ドライバとその記述がネックになっていました。
トレーニング資料で使用しているのは、WinUSBでした。 WinUSBなら、以前USB プロジェクト - 懲りずにWinUSBに手を出すでかじった事があります。 その時は、アプリケーションにデバイス・ドライバ並みの記述量が必要になるので、深追いしなかったのでした。 今回は、できるようになるのかな。
トレーニング資料によると、
USBデバイスをPCにつなぐと「新しいハードウェアの検出ウィザード」が動き出します。
ここでは、自前のデバイスドライバを使います。
私が改造したファームウェアは、最低限の改造しかしていません。 デバイス・デスクリプタもそのままなので、 PC からはトレーニング資料のものと同じデバイスとして認識されます。 トレーニング資料には、出来上がった INF ファイルもあります。 今回は、これをそのまま使ってインストールを続けます。
デバイス・ドライバがインストールされるのを待ちます。 理由はわかりませんが、インストールには数分の時間がかかりました。 ちょっと、長すぎるんじゃないの?
つづく
参考サイト
- USBJM_TRAINING: How to make a graphical user interface (GUI) for USB communication
- 今回の記事は、ここで見つけたお話を基にしています。
参考文献
USBハード&ソフト開発のすべて―USBコントローラの使い方からWindows/Linuxドライバの作成まで (TECHI―Bus Interface)
- 作者: インターフェース編集部
- 出版社/メーカー: CQ出版
- 発売日: 2006/07
- メディア: 単行本
USBターゲット機器開発のすべて―各種USBコントローラの使い方と基本ソフトウェアの作成法 (TECHI―Bus Interface)
- 作者:
- 出版社/メーカー: CQ出版
- 発売日: 2005/08
- メディア: 単行本
Usb Complete: Everything You Need To Develop Custom Usb Peripherals (Complete Guides Series)
- 作者: Jan Axelson
- 出版社/メーカー: Lakeview Research
- 発売日: 2005/06/15
- メディア: ペーパーバック
> トレーニング資料によると、WinUSBを使うときの難関は、アプリケーションの開発などではなく、INFファイルの作成なのだそうです。
私も、「へ~、そうなんだ。」と思ってしまいました。:-)
きっと教材を作成された方は、あのINFファイルの変態的な文法規則に悩まされたんでしょう。INFを一から作るのは確かに大変です。
普通は、WinUSBにサンプルでついてくるINFをそのまま使うか、変えても、
- デバイスID (VID/PID等)の変更・追加
- デバイスの名称等ストリングの変更
- インターフェースGUIDの変更
など、数行いじってお終いにすると思います。
Tsuneo
by Tsuneo (2009-04-29 11:35)
> デバイス・ドライバがインストールされるのを待ちます。 理由はわかりませんが、インストールには数分の時間がかかりました。 ちょっと、長すぎるんじゃないの?
WinUSBはINF ファイル内で使用するバージョンに適合するKMDFやWinUSB用のco-installer DLLを指定します。これは、WinUSB(およびKMDF)はまだバージョンが時折アップデートされ、バージョン間の互換性の問題があるためです。そこで、INFファイルとco-installer DLL含むフォルダを、インストールセットとして同一のフォルダに置いておいて、インストールをかけます。おそらくnoritan さんの場合は、INFファイルのみをコピーされて、co-installer DLLフォルダがINFファイルと同じフォルダ内に無かったんでしょう。
この場合インストーラは、PCがネットにつながっていればMSから必要なDLLをダウンロードします。そのためインストールに時間がかかったのではないでしょうか。ネットからのダウンロードでも、特にインストーラが文句を言っていなければ問題ありません。
Tsuneo
by Tsuneo (2009-04-29 12:02)
Tsuneoさん、お帰りなさい。
INFファイルを作るプログラムでは、ManufacturerやProduct名を入れないと先に進めないようになっています。もしかしたら、名前が違うと認識しないのではないか。と思いながら、まだ、実験はしていません。
そんなに変更すべき項目も無いとは思うのですが。
INFが存在するディレクトリには、i386とamd64というディレクトリがあって、その下にco-installerがありました。ネットワークアクセスが必要になったとしても、やはり数分はかかりすぎだと思います。
トレーニング資料に付いていたco-installerはWdfCoInstaller01005.dllで、最新のWinDdkには01007が付いていました。バージョンの違いで問題が起こったりしないのでしょうか。今ひとつ、信用ならないな。
by noritan (2009-04-30 23:16)
ただいま、って :-)
> INFが存在するディレクトリには、i386とamd64というディレクトリがあって、その下にco-installerがありました。
そうすると、上記とは別の原因ですね。
WinUSBではないですが、別のドライバのインストールで、やはりインストールに5分近くかかったことがありました。この場合は、インストーラが古いバージョンのインストールを削除しようとして、デバイスレコードをすべてをスキャンしていました。setupapi.log にスキャンした履歴が残っていたのでそう判明しました。
setupapi.log に何か手掛かりがあるかもしれません。
ただ、XPだとログのどこからどこまでがこのインストーラに関わるものかタイムスタンプでみるしかないので、ログの解析も大変です。Vista ではこの点は多少ましになりました。
by NO NAME (2009-05-02 06:27)
setupapi.log を読みました。
挫折しました。
LOGを取り直そうとデバイスを削除してインストールしなおすと、今度は、さほど時間もかからず終わりました。
# さすがに、クリーン・インストールから始める元気はありません。
by noritan (2009-05-08 09:04)