ジャンル不定の日記です。

eBayで買った中華のUSB2.0ハブが実はUSB1.1だった・・・

今まで卓上のUSBポートが古い日立のディスプレイについてるUSB1.1のポートだけで、大きいデータ転送する時に遅いから先日eBayでUSBハブ買ったわけだが、
中華USBハブと日立のUSB1.1ハブをカスケード接続する計画だったのだが混在させて2.0になるのか?
という疑問が生じたので調べてみた。

普通にlsusbすると、
$ lsusb
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 007: ID 058f:6258 Alcor Micro Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 003: ID 046d:c52b Logitech, Inc. Unifying Receiver
Bus 005 Device 005: ID 03eb:3312 Atmel Corp. 4-Port Hub
Bus 005 Device 006: ID 03eb:3312 Atmel Corp. 4-Port Hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 003: ID 05e3:0606 Genesys Logic, Inc. USB 2.0 Hub / D-Link DUB-H4 USB 2.0 Hub
Bus 003 Device 002: ID 25a7:2433 
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
こんな感じ。
中華のUSBハブは2個買ったが両方共 Genesys Logic, Inc. USB 2.0 Hub / D-Link DUB-H4 USB 2.0 Hub で同じ。
で、最初別のポートに繋いでいたのだが、Linux Foundation 1.1 root hub のBusに繋がってたので1.1になってることに気づいた。
日立の1.1ハブと混在させていることが原因かと思ったのだが、違うことに気づいた。

まず、root hubが1.1と2.0と3.0があるが、
Bus 001 = USB 2.0
Bus 002 = USB 2.0
Bus 003 = USB 2.0
Bus 004 = USB 3.0
Bus 005 = USB 1.1
Bus 006 = USB 1.1
となっている。
機器を繋ぎ変えて理解したが、
PCのポートは背面に4ポートでうち2ポートがUSB3.0のポート。
内部ピンから前面に2ポート出して背面に2ポート出してるので計8ポートある。
Bus 001とBus 002はUSB2.0だが、内部ピンから出したポートはBus 001で背面のUSB3.0ではないポートがBus 002になっているのだが、このポートにUSB1.1以下の機器を繋いだ場合はBus 005とBus 006につながる。
USB3.0のポートにUSB2.0以下の機器を繋いだ場合はBus 004ではなくBus 003につながる模様。

PC直下に繋いだ機器のUSBバージョンによってつながるroot hubが切り替わるわけだね。

で、lsusbに-tオプションをUSBの速度が表示されるのね。
$ lsusb -t                                                                                                                                
/:  Bus 06.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/4p, 12M                                                                                                           
/:  Bus 05.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/4p, 12M                                                                                                           
    |__ Port 1: Dev 6, If 0, Class=Hub, Driver=hub/4p, 12M                                                                                                                  
    |__ Port 2: Dev 5, If 0, Class=Hub, Driver=hub/4p, 12M
    |__ Port 4: Dev 3, If 0, Class=Human Interface Device, Driver=usbhid, 12M
    |__ Port 4: Dev 3, If 1, Class=Human Interface Device, Driver=usbhid, 12M
    |__ Port 4: Dev 3, If 2, Class=Human Interface Device, Driver=usbhid, 12M
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 5000M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 12M
    |__ Port 1: Dev 2, If 1, Class=Human Interface Device, Driver=usbhid, 12M
    |__ Port 2: Dev 3, If 0, Class=Hub, Driver=hub/4p, 12M
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/4p, 480M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/4p, 480M
    |__ Port 3: Dev 7, If 0, Class=Hub, Driver=hub/4p, 480M
Bus 05のPort 1と2に繋がってるAtmel Corp. 4-Port Hubは日立の液晶ディスプレイなのでUSB1.1の12Mで正しい。
Bus 01のPort 3に繋がってるAlcor Micro Corp.はセリアの100円USBハブ。これは480MのUSB2.0になってる。
で、Bus 03のPort 2に繋がってるのがGenesys Logic, Inc. USB 2.0 Hub / D-Link DUB-H4 USB 2.0 Hubで中華ハブ。USB2.0のはずが12Mになってる・・・

ポート変えたりしてみても同じ。
セリアのUSBハブはどこに繋いでも480Mになるが、中華ハブはどこに繋いでも12M。
先日8GBのmicroSDをeBayで買ったら200MBちょいしか無くて捨てたが、また詐欺られた・・・

当初の疑問であった2.0と1.1の混在だが、根元側が2.0ならやはり問題無さそうではある。
しかし、根元に使う予定だったケーブルタイプの中華ハブが1.1だからその先に2.0ハブ繋いだら1.1になっちゃうからダメ。
セリアのUSBハブは2ポートだが内部的には4ポートみたいだから、中華ハブの中身をセリアハブに入れ替える改造するってのも考え中・・・