SSブログ

MC9S08JS8 にGUIアプリケーションを書く (2) [USB]このエントリーを含むはてなブックマーク#

2729707

ハードウェアが出来た。 In-Circuit Program も出来た。 次は、 USB アプリケーションに挑戦です。

前回の記事では、MC9S08JS8でUSBデバイスを作成しました。 今回は、PCにこのUSBデバイスを認識させます。

STEP2 : デバイス・ドライバの作成

これまでの GUI アプリケーション開発で最大の難関は、デバイス・ドライバの作成でした。 Window$の仕様を正しく理解して、それなりのプログラムを書く必要があります。 最初にDEMOJM向けのサンプルアプリケーションを見つけた時からデバイス・ドライバとその記述がネックになっていました。

トレーニング資料で使用しているのは、WinUSBでした。 WinUSBなら、以前USB プロジェクト - 懲りずにWinUSBに手を出すでかじった事があります。 その時は、アプリケーションにデバイス・ドライバ並みの記述量が必要になるので、深追いしなかったのでした。 今回は、できるようになるのかな。

トレーニング資料によると、WinUSBを使うときの難関は、アプリケーションの開発などではなく、INFファイルの作成なのだそうです。 へ~、そうなんだ。 INFファイルは、Window$にデバイス・ドライバのインストール方法を知らせるための手がかりが書いてあるファイルであると認識しています。 そのため、機械にやさしく、人間には厳しい記述が並んでいます。 トレーニング資料では、freescaleが作成した INF ジェネレータというアプリケーションを使って簡単にINFファイルを作成していました。 こりゃあ、ラクチンだ。

WS000250.png

USBデバイスをPCにつなぐと「新しいハードウェアの検出ウィザード」が動き出します。


WS000251.png

ここでは、自前のデバイスドライバを使います。


WS000252.png

私が改造したファームウェアは、最低限の改造しかしていません。 デバイス・デスクリプタもそのままなので、 PC からはトレーニング資料のものと同じデバイスとして認識されます。 トレーニング資料には、出来上がった INF ファイルもあります。 今回は、これをそのまま使ってインストールを続けます。


WS000253.png

デバイス・ドライバがインストールされるのを待ちます。 理由はわかりませんが、インストールには数分の時間がかかりました。 ちょっと、長すぎるんじゃないの?

つづく

参考サイト

USBJM_TRAINING: How to make a graphical user interface (GUI) for USB communication
今回の記事は、ここで見つけたお話を基にしています。

参考文献

USBハード&ソフト開発のすべて―USBコントローラの使い方からWindows/Linuxドライバの作成まで (TECHI―Bus Interface)

USBハード&ソフト開発のすべて―USBコントローラの使い方からWindows/Linuxドライバの作成まで (TECHI―Bus Interface)

  • 作者: インターフェース編集部
  • 出版社/メーカー: CQ出版
  • 発売日: 2006/07
  • メディア: 単行本
Usb Complete: Everything You Need To Develop Custom Usb Peripherals (Complete Guides Series)

Usb Complete: Everything You Need To Develop Custom Usb Peripherals (Complete Guides Series)

  • 作者: Jan Axelson
  • 出版社/メーカー: Lakeview Research
  • 発売日: 2005/06/15
  • メディア: ペーパーバック


nice!(0)  コメント(5)  トラックバック(0)  このエントリーを含むはてなブックマーク#

nice! 0

コメント 5

Tsuneo

> トレーニング資料によると、WinUSBを使うときの難関は、アプリケーションの開発などではなく、INFファイルの作成なのだそうです。

私も、「へ~、そうなんだ。」と思ってしまいました。:-)
きっと教材を作成された方は、あのINFファイルの変態的な文法規則に悩まされたんでしょう。INFを一から作るのは確かに大変です。
普通は、WinUSBにサンプルでついてくるINFをそのまま使うか、変えても、
- デバイスID (VID/PID等)の変更・追加
- デバイスの名称等ストリングの変更
- インターフェースGUIDの変更
など、数行いじってお終いにすると思います。

Tsuneo
by Tsuneo (2009-04-29 11:35) 

Tsuneo

> デバイス・ドライバがインストールされるのを待ちます。 理由はわかりませんが、インストールには数分の時間がかかりました。 ちょっと、長すぎるんじゃないの?

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) 

noritan

Tsuneoさん、お帰りなさい。

INFファイルを作るプログラムでは、ManufacturerやProduct名を入れないと先に進めないようになっています。もしかしたら、名前が違うと認識しないのではないか。と思いながら、まだ、実験はしていません。
そんなに変更すべき項目も無いとは思うのですが。

INFが存在するディレクトリには、i386とamd64というディレクトリがあって、その下にco-installerがありました。ネットワークアクセスが必要になったとしても、やはり数分はかかりすぎだと思います。
トレーニング資料に付いていたco-installerはWdfCoInstaller01005.dllで、最新のWinDdkには01007が付いていました。バージョンの違いで問題が起こったりしないのでしょうか。今ひとつ、信用ならないな。

by noritan (2009-04-30 23:16) 

NO NAME

ただいま、って :-)

> INFが存在するディレクトリには、i386とamd64というディレクトリがあって、その下にco-installerがありました。

そうすると、上記とは別の原因ですね。

WinUSBではないですが、別のドライバのインストールで、やはりインストールに5分近くかかったことがありました。この場合は、インストーラが古いバージョンのインストールを削除しようとして、デバイスレコードをすべてをスキャンしていました。setupapi.log にスキャンした履歴が残っていたのでそう判明しました。

setupapi.log に何か手掛かりがあるかもしれません。
ただ、XPだとログのどこからどこまでがこのインストーラに関わるものかタイムスタンプでみるしかないので、ログの解析も大変です。Vista ではこの点は多少ましになりました。


by NO NAME (2009-05-02 06:27) 

noritan

setupapi.log を読みました。
挫折しました。

LOGを取り直そうとデバイスを削除してインストールしなおすと、今度は、さほど時間もかからず終わりました。

# さすがに、クリーン・インストールから始める元気はありません。

by noritan (2009-05-08 09:04) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。