私が現在メインで使用しているノートパソコンであるLaVie RXにはUSBポートが3つついています。これに外出中はFOMA N901iS、マウス、IrDAドングル、自宅ではMPEG2キャプチャユニット、マウス、ゲームコントローラ(またはFOMA N901iSとIrDAドングル、USBフルキーボードのいずれかを付け替え)を接続しています。これにBluetoothドングルを導入すると明らかにUSBポートが足りないため、Bluetoothドングルの導入に備えてUSBハブを購入しました。
特に予備知識もなく店頭に行き、なんとなく手にとって購入したのはシグマA・P・Oシステム販売のSHBH75V 065です。選んだ際の条件は「USB2.0に対応していて、セルフパワーに対応、ポート数が多目のもの」ということで、その条件に合致するものの中から選択しました。ちなみにUSBハブを購入するのはこれが初めてでした。もちろん、使うのも。
自宅に帰ってから早速接続してみるとまったく認識しません。あれこれ試していると付属のUSBケーブルが不良品であることが原因であるとわかりました(接触不良)。別のUSB2.0対応ケーブルで接続してみるとようやく「汎用USBハブ」として認識されました。デバイスマネージャで見てみると2個のハブであると認識されていました。
この状態でいろいろとUSBデバイスを接続してみたのですが、認識しないもの、認識しても正常に動作しないもの、認識して正常に動作するもの、認識して一見正常に動作しているように見えるが負荷をかけると動作が不審になるものがあることがわかりました。また挿すポートによって動いたり、動かなかったり、動作が不審になったりと挙動が変わるものも見られました。
いろいろと検索エンジンで検索して調べてみるとUSBハブとUSBデバイスの間に相性があるらしいことがわかってきました。どうやらNECのチップを搭載しているものが概ね問題が少ないようです。
そこでこのUSBハブに使用しているチップはいったい何なのか、Windows DDKにソースの形で付属しているツール「usbview」をmakeして見てみました。USBハブに何も接続しない状態で、USBハブの部分のみを切り出した結果を下に示します。
これを見るとわかるように、この7ポートUSBハブは内部的には4ポートのUSBハブを2個接続した形になっていることがわかります。つまり挿すポートによってそのUSBデバイスに到達するまでのハブの段数が異なるわけです。いろいろと接続しているときにポートによって挙動が変わるものがあったのはこの段数の違いに起因しそうです。そして注目の使用チップについての情報を以下に示します。
Device Descriptor:bcdUSB: 0x0200 bDeviceClass: 0x09 bDeviceSubClass: 0x00 bDeviceProtocol: 0x01 bMaxPacketSize0: 0x40 (64) idVendor: 0x05E3 (Genesys Logic Inc.) idProduct: 0x0605 bcdDevice: 0x060B iManufacturer: 0x00 iProduct: 0x01 iSerialNumber: 0x00 bNumConfigurations: 0x01 |
この情報からチップのベンダーは台湾のGenesys Logic Inc.であるようです。なお、2段のハブともに同じチップでした。評判については検索してみてください。私からは特にいうことはありません(^^;
残る疑問は2段あるUSBハブの各論理ポートとUSBハブに印刷されている各物理ポート(1~7)の対応です。これがわかれば挿すポートを変えたことによって動作したりしなかったりするデバイスを使える可能性が出てきます。というわけで全部のUSBポートに手持ちのUSBデバイスを挿してみました。
全部のポートにデバイスを接続するとなかなか迫力ありますね。ちょっとこの写真では見難いかも知れませんが、左から順番に1~7の番号が印刷されています。この1~7のポートに接続したデバイスの一覧を以下に示します。
ポート | 種別 | デバイス |
---|---|---|
1 | マウス | Microsoft IntelliMouse Optical |
2 | コントローラ | サンワサプライ USBゲームパッド JY-PFFUR |
3 | CD-ROMドライブ | 日本IBM ThinkPad USB Portable CD-ROM Drive |
4 | 携帯電話 | NTTドコモ FOMA N901iS |
5 | PS/2マウスポート付キーボード | QTRONIX SCORPIUS 980N plus/980 |
6 | IrDAドングル | リンクエボリューション IrSTICK |
7 | 携帯電話 | NTTドコモ FOMA N2051 |
この状態で再度usbviewを実行した結果(関連部分のみ抜粋)を以下に示します。
ちょっとわかりにくい表示のものがありますね。「SigmaTel USB-IrDA Dongle」は「IrSTICK」、「USB複合デバイス」は「PS/2マウスポート付キーボード」、「USBヒューマンインターフェイスデバイス」は「ゲームコントローラ」です。これらのデバイスと印刷されているポート番号を突き合わせると以下のようになります。
印刷ポート | ハブ段数 | ハブポート |
---|---|---|
1 | 2 | 1 |
2 | 2 | 2 |
3 | 2 | 3 |
4 | 2 | 4 |
5 | 1 | 3 |
6 | 1 | 1 |
7 | 1 | 2 |
このように印刷されているポート番号1~4は2段目のハブの1~4に対応し、印刷されているポート番号の5~7は1段目に変則的に接続されていることがわかります。というわけで、USBハブに敏感なUSBデバイスは印刷されているポートの5~7に接続した方が使える可能性が高い、かもしれません。そもそもどのポートにつないでも動かないものもあるのですが・・・。OSがUSBデバイスを認識した上でちゃんと動作しないものが多いのが厄介です。最初、こんな現象が起こるということを意識していなかった私はアプリケーションがバグったのか、OSがおかしくなったのか、など、いろいろと疑ってしまいました(^^;
ちなみにFOMA N901iS(N2051はテストしてません)もこのUSBハブを経由して接続すると認識した状態でまともに動作しないので注意が必要です。この状態でIrShotでシリアルポートにアクセスするとハングアップすることがあるので注意してください。このハングアップはIrShotの不具合ではありません(システムコールの中で固まってしまっていますので)。
今回の経験で市販のUSBデバイスがハブを経由した接続に対して動作保証をしないとしている理由が理解できました。そのうち他のUSBハブ(NECチップ搭載のものを予定)を購入したときにでもまた相性チェックをしてみたいな、と思います。