前ページまでのスキルを身に着ければ個人的にPCでUSBを介して何かを制御するものを作成できますが、EZ-USBを用いた機器を商品として売るには、以下のようなハードルがあります。
USBケーブルを介してPCに接続する周辺機器にはすべてVendor IDとProduct IDという識別番号が割り振られています。PCはそれらに基づいてドライバーをインストールします。今回のEZ-USBについてはCypressのUSBコントローラ自体(EEPROMなしの状態)にはVendor
ID=04B4, Product ID=8613が、またEEPROMにファームウェアを書き込んで作成されたサンプルデバイスについてはVendor
ID=04B4, Product ID=1004が割り当てられています(数値は16進数)。
Vendor IDを世界的に管理しているのがUSB-IF(USB Implementers Forum)で、USB製品を販売するにはお金を払ってUSB-IFのメンバ(数レベルのメンバがある)になりVendor IDを割り振ってもらわなければなりません。弊社も最低レベルの(Vendor
IDを割り振ってもらう権利だけを有する)メンバになってVendor IDを所持しています。Product IDについてはVendor IDを持つものが自由に製品に割り振ることができます。04B4はUSB-IFがCypress社に割り振ったVendor
IDなので、これを持つUSB機器をCypress社以外が販売することはできません。Vendor IDの取得についてより詳しく知りたい方は弊社にお尋ね下さい。
仮に、Vendor ID=1234を取得することができ、製品にProduct ID=5678を割り振るとしましょう。これらのIDやその他の識別情報はファームウェアに書き込む必要があります。前ページで作成したButton.iicにこれらを書き込んでみましょう。ただし、すぐに元に戻せるように以下の作業を行う前にC:\GigatecEZ-USB\Firmware\Buttonフォルダのdscr.a51というファイルのコピーを取っておきましょう。
uVision2を立ち上げてdscr.a51というアセンブラコードを開いてください。それの49行にVendor IDが、50行にProduct
IDが書き込まれています。Vender1234/Product5678を書き込むには、
[49行] dw 3412H
[50行] dw 7856H
とします。それぞれ、見た目上位バイトと下位バイトが逆転しているのは、PC側のIntel系CPUに多バイトの数値は下位バイトから順に並べる(リトルエンディアンという)という規則があるからです。尚、数字列の先頭がAからFになってしまったときには、さらにその前に0を付け加えるのが習わしです。例えばCypressの04B4は並べ替えてB404Hになりますが、先頭がBのため、49行に書き込むときには0B404Hと書き込むことになります。また、51行目にProduct
Version IDというものも設定できます。同じ製品でもバージョンごとにインストールの方法を変更するする場合などを想定していますが任意です。
また、EZ-USB製品のVendor(製造者)名は、dscr.a51の末尾、196行からのStringDscr1とStringDscr1Endの間に記述します。そして、ドライバなしで初めてPCに接続したとき、およびデバイスマネジャーに登録される製品名は、208行からのStringDscr2とStringDscr2Endの間に記述します。それぞれ元々"Cypress" "EZ-USB"と指定されていますが、試しに後者を"Quick Press Detection System"に変更してみましょう。ただし、各文字に00を加える(文字をユニコード(16bit)で表現することになっているため)ことを忘れずに。
書き換えが終わったら、F7キーでビルドし、修正されたButton.iicをEZ-USBに書き込んでください。
[注意]
ここで作成したVendor ID=1234の早押しボタンも外には出さないでください(このIDを持つ企業様が存在するのかどうかも分かりかねますが)。
修正Button.iicを書き込んだEZ-USBのUSBケーブルを一旦外してから再接続します。
すると、右図のようにPCのデスクトップの右下にデバイスのセットアップと表示され、しばらくするとデバイスの準備ができましたと表示されます。Button.iicに書き込んだ"Quick Press Detection System"も認識されています。
ところが、デバイスマネージャを開いてみると、ほかのデバイスの項目にQuick Press Detection Systemがリストアップされていますが、それをダブルクリックしてデバイスの状態を見ると「このデバイスのドライバがインストールされていません」と表示されます。これは、Vendor IDとProduct IDを変更した当然の帰結です。
左図のように、詳細タブをクリックしてプロパティでハードウェアIDを選択すると、Vendor IDとProduct IDが正しく認識されていることがわかります。
そこで、全般タブに戻ってドライバーの更新ボタンを押し、ドライバーのインストールを試みます。
ドライバの検索方法として、→ コンピュータを参照してドライバーソフトウェアを検索を選択します。
コンピュータ上のドライバーを参照しますで、C:\Cypress\USB\CY3684_EZ-USB_FX2LP_DVK\1.1\Drivers\Win8.1\x64を、参照ボタンを使いつつ入力し、次へをクリックします。
すると、最終的に右図のようにインストールできないという結果になります。
PCがドライバーをインストールするとき、それに付随する.infファイルの情報に従います。Cypress社がEZ-USBに対して商用頒布を認めているドライバはcyusb3.sys(と付随ファイル)で、インストール時の情報はcyusb3.infに記述されています。上記のインストール失敗はcyusb3.infにVendor ID=1234とProduct ID=5678のセットが登録されていないことに起因しています。
そこで、cyusb3.infに2つのIDを登録しましょう。C:\Cypress\USB\CY3684_EZ-USB_FX2LP_DVK \1.1\Drivers\Win8.1\x64にオリジナルのドライバ関連ファイルがありますが、オリジナルを編集するのはやめ、この4つのファイルをC:\GigatecEZ-USB\Driverというフォルダを作ってそこにコピーしてから編集することにします。
cyusb3.infファイル(「メモ帳」で編集できます)は複雑なファイルですが、編集すべきところは右の5か所です。編集を間違うとPCに予期せぬ結果を与える可能性もある危険な行為であることを肝に銘じながら編集作業を行います。
[String]のCYUSB3_Providerは、デバイスの製造元を表示すべきところに引用されますので、皆さんが商用デバイスを開発したときには、皆さんの名前をここに記述しましょう。追加した部分(IDに応じて値を変更する)は、PCがデバイス名を端的に表示する際に多くの場所で使用されますので適切に指定します。
以上の編集後cyusb3.infを保存し、前項と同様にドライバーのインストールを試みます。ただし、コンピュータ上のドライバーを参照しますでは、C:\GigatecEZ-USB\Driverを指定します。
すると、「ドライバーは存在するけれども署名がない」という内容の表示が出てやはりドライバーのインストールに失敗します。ただし、前項とは失敗の理由が異なります。
ドライバーソフトウェアはPCのカーネルモードと呼ばれる状態で動作する危険なソフトウェアで、悪意のあるソフトウェアによりPCが第三者に支配される可能性もあります。そこで、Microsoft社は署名というセキュリティをドライバーソフトウェアに付加しました。Cypress社はcyusb3.sysというドライバを開発し、Cypress社が関与しているデバイス(Cypress社が認識しているIDを持つもの)にのみドライバの安全性を保障する署名を与えていますが、Cypress社にとって未知のデバイスにまで署名を与えていません(署名情報はcyusb3.catに記述されています)。
そこでこれを突破する方法は、「Cypress社に依頼して署名をもらう」「Cypress社が公表しているハードウェア情報を基に独自にドライバを開発する(自分で署名できる)」「署名なしでドライバをインストールする」などがありますが、個人や弱小企業がとれる道は3番目となります。
以下の方法を取るとPCは署名がなくてもドライバをインストールできる状態になります。しかし、この状態でPCを起動すると上述のようなドライバの危険性に対して無防備となりますので、今回の目的が終わったら速やかにシャットダウンか再起動を行って元の安全な状態に戻して下さい。
Window | 操 作 | |
1 | デスクトップ(左下) | ウィンドウズマークを右クリック(「右」です)し、シャットダウンまたはサインアウト → サインアウトの実行 |
2 | サインイン画面 | 画面を左クリック。中央にサインインアイコンが出る |
3 | サインイン画面 | 右下の電源アイコンを左クリックする、スリープ/シャットダウン/再起動 というメニューが表示されるので、Shiftキーを押しながら再鼓動コマンドを左クリックする。 |
4 | オプションの選択 | トラブルシューティングを選択 |
5 | トラブルシューティング | 詳細オプションを選択 |
6 | 詳細オプション | その他の詳細オプションを選択 |
7 | 詳細オプション | スタートアップ設定を左クリック |
8 | スタートアップ設定 | 再起動ボタンを左クリック |
9 | ... 再起動。しばらく待つ | |
10 | 番号選択画面 | 7キー(テンキーでない方)を押す( 7) ドライバー署名の強制を無効にする の選択)。 |
以上で見かけ上通常通り立ち上がります。
そして、もう一度C:\GigatecEZ-USB\Driverのドライバーのインストールを試みます。すると途中で右図のように、「ドライバーソフトウェアの発行元を検証できません」と出ますが、→
このドライバーソフトウェアをインストールします を選択すると、最終的にドライバーのインストールに成功します。