2018年7月29日日曜日

LinuxでUSBデバイスがUSB 3.0で接続されているか確認する方法

LinuxでUSBデバイスがUSB 3.0で接続されているか確認する
普段あまり気にしていなかったけど、Linux上でUSBデバイスがUSB 3.0で接続されているか確認する機会があったので、その方法を記事にしておく。

USBデバイスの名称は、USB 3.0, 2.0...以外にも色々あってややこしかったので、自分のためにも整理して記事に残しておく。今さら感はあるけど、参考にしていただければと思う。


USBの規格と名称のまとめ
USBのバージョンを調べる前に、規格と名称などをまとめておく。これを知らないと、コマンドのアウトプットを見ても何がなんだか分からない。

バージョン 別名 対応コントローラー 最大速度
USB 3.1 SuperSpeedPlus (Gen2) xHCI 1.1 10 Gbps
USB 3.0 SuperSpeed (Gen1) xHCI (eXtensible HCI) 5 Gbps
USB 2.0 High-Speed
(Low-Speedも存在)
EHCI (Enhanced HCI) 480 Mbps
USB 1.0 (1.1) Low-Speed, Full-Speed UHCI (Universal HCI) 1.5 Mbps, 12 Mbps
※HCI: Host Controller Interface
※コントローラーについては、デバイスが下位バージョンであっても接続可能。

ちなみに、Linuxカーネルのバージョンによっても、以下のようにUSBの対応バージョンが異なる。

  • Linux kernel 2.6.31~ (2009~):USB 3.0対応
  • Linux kernel 3.5~ (2012~):USB 3.0 (Attached SCSI mode) 対応


ハードウェアがUSB 3.0に対応しているかは、以下の画像のようにポートやケーブルの近くに「SS (=SuperSpeed)」と書いてあるかどうかで確認できる。



コマンドでUSBデバイスのバージョンを確認する
さて、ここから本題。接続したUSBデバイスがどのバージョンで動いているか確認する。

まず、lspciでパソコン上にどのバージョンのコントローラーが存在するか確認する。自分の環境では、USB 2.0 (EHCI)が2つ、USB 3.0 (xHCI, SS USB)が2つ存在していた。ここで、USB 3.0に対応する出力が無い場合は、パソコンやOS、BIOSがUSB 3.0に対応していない。

どのポートがどのコントローラーに対応しているかは、マザーボードの説明書などに書いてある。
$ lspci | grep USB

00:14.0 USB controller: Intel Corporation 7 Series/C210 Series Chipset Family USB xHCI Host Controller (rev 04)
00:1a.0 USB controller: Intel Corporation 7 Series/C216 Chipset Family USB Enhanced Host Controller #2 (rev 04)
00:1d.0 USB controller: Intel Corporation 7 Series/C216 Chipset Family USB Enhanced Host Controller #1 (rev 04)
04:00.0 USB controller: ASMedia Technology Inc. ASM1042 SuperSpeed USB Host Controller

次に、lsusbから接続されているUSBがどの速度で接続されているか確認する。デバイスをつなぐ前に現状の接続を確認しておく。

デバイス接続前
$ lsusb -t

/:  Bus 06.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 5000M
/:  Bus 05.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/3p, 12M
        |__ Port 1: Dev 4, If 0, Class=Human Interface Device, Driver=usbhid, 12M
        |__ Port 2: Dev 5, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
    |__ Port 2: Dev 3, If 0, Class=Hub, Driver=hub/4p, 12M
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 480M
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/8p, 480M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/6p, 480M


接続状態を確認したいデバイスを、パソコンに接続してみる。「5000M (USB 3.0)」の項目が増えているので、USB 3.0で接続されていることが確認できる。

USB 3.0デバイス接続後
$ lsusb -t

/:  Bus 06.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 5000M
/:  Bus 05.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/3p, 12M
        |__ Port 1: Dev 4, If 0, Class=Human Interface Device, Driver=usbhid, 12M
        |__ Port 2: Dev 5, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
    |__ Port 2: Dev 3, If 0, Class=Hub, Driver=hub/4p, 12M
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
    |__ Port 1: Dev 2, If 0, Class=Mass Storage, Driver=, 5000M ←新たに接続したデバイスが、5000M (USB 3.0) で接続されている
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 480M
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/8p, 480M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/6p, 480M

USB 3.0のポートに、USB 2.0対応デバイスを接続した場合の出力は以下のようになった。

USB 2.0デバイス接続後
$ lsusb -t

/:  Bus 06.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 5000M
/:  Bus 05.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/3p, 12M
        |__ Port 1: Dev 4, If 0, Class=Human Interface Device, Driver=usbhid, 12M
        |__ Port 2: Dev 5, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
    |__ Port 2: Dev 3, If 0, Class=Hub, Driver=hub/4p, 12M
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 480M
    |__ Port 2: Dev 3, If 0, Class=Mass Storage, Driver=, 480M ←新たに接続したデバイスが、480M (USB 2.0) で接続されている
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/8p, 480M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/6p, 480M

ちなみに、dmesgからも確認できる。

USB 3.0デバイス接続後
$ dmesg | tail -18

[  229.233726] usb 4-1: new SuperSpeed USB device number 2 using xhci_hcd
[  229.251434] usb 4-1: New USB device found, idVendor=152d, idProduct=0567, bcdDevice=92.01
[  229.251438] usb 4-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  229.251440] usb 4-1: Product: USB to ATA/ATAPI Bridge
[  229.251442] usb 4-1: Manufacturer: JMicron
[  229.251444] usb 4-1: SerialNumber: 0123456789ABCDEF
[  229.254053] scsi host8: uas
[  229.254710] scsi 8:0:0:0: Direct-Access     JMicron  Generic          9201 PQ: 0 ANSI: 6
[  229.255551] sd 8:0:0:0: Attached scsi generic sg6 type 0
[  229.255755] sd 8:0:0:0: [sdf] Spinning up disk...
[  230.263711] ..............ready
[  243.438660] sd 8:0:0:0: [sdf] 15628053168 512-byte logical blocks: (8.00 TB/7.28 TiB)
[  243.438662] sd 8:0:0:0: [sdf] 4096-byte physical blocks
[  243.438802] sd 8:0:0:0: [sdf] Write Protect is off
[  243.438804] sd 8:0:0:0: [sdf] Mode Sense: 53 00 10 08
[  243.439079] sd 8:0:0:0: [sdf] Disabling FUA
[  243.439082] sd 8:0:0:0: [sdf] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[  243.460501] sd 8:0:0:0: [sdf] Attached SCSI disk

USB 3.0のポートにUSB 2.0のデバイスを接続した場合。「new high-speed USB device number 2 using xhci_hcd」の行から、xHCI (USB 3.0ポート)を使ってHigh-Speed(USB 2.0)のデバイスを認識していると分かる。

USB 2.0デバイス接続後
$ dmesg | tail -18

[   24.276696] usb 3-1: new high-speed USB device number 2 using xhci_hcd
[   24.416849] usb 3-1: New USB device found, idVendor=0457, idProduct=0150, bcdDevice= 1.00
[   24.416853] usb 3-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[   24.459570] usb-storage 3-1:1.0: USB Mass Storage device detected
[   24.459742] usb-storage 3-1:1.0: Quirks match for vid 0457 pid 0150: 80
[   24.459788] scsi host8: usb-storage 3-1:1.0
[   24.459882] usbcore: registered new interface driver usb-storage
[   24.462001] usbcore: registered new interface driver uas
[   25.469600] scsi 8:0:0:0: Direct-Access     SiS-150a USB2FlashStorage 0.00 PQ: 0 ANSI: 2
[   25.470103] sd 8:0:0:0: Attached scsi generic sg6 type 0
[   25.471012] sd 8:0:0:0: [sdf] 1024000 512-byte logical blocks: (524 MB/500 MiB)
[   25.471556] sd 8:0:0:0: [sdf] Write Protect is off
[   25.471559] sd 8:0:0:0: [sdf] Mode Sense: 00 00 00 00
[   25.472095] sd 8:0:0:0: [sdf] Asking for cache data failed
[   25.472101] sd 8:0:0:0: [sdf] Assuming drive cache: write through
[   25.975526]  sdf: sdf1
[   25.978240] sd 8:0:0:0: [sdf] Attached SCSI removable disk
[   26.198869] FAT-fs (sdf1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.



参考:
[1]Linux 2.6.31がリリース、USB 3.0対応など - @IT
[2]How is USB 3.0 supported in Linux now? - Quora

スポンサーリンク

スポンサーリンク


関連コンテンツ


この記事をシェアする

0 件のコメント:

コメントを投稿