Как я могу быть уверен, что подключил устройство к порту USB 3?

Как я могу быть уверен, что подключил устройство к порту USB 3?

На моем компьютере есть несколько портов USB, некоторые USB 2 и некоторые USB 3. Я хочу подключить устройство к порту USB 3. К сожалению, они все черные, поэтому я не могу воспользоваться обычным правилом «порты USB 3.0 синие».

Это устройство на базе Linux, так есть ли способ узнать, подключено ли устройство к порту USB 3, может быть, с помощью какой-нибудь утилиты командной строки или путем проверки сообщений ядра?

решение1

Вы можете определить версию USB, запустивlsusb

  • 12M = 12Мбит/с = USB1
  • 480M = 480Мбит/с = USB2
  • 5000M = 5000MBit/s = USB3.0 или USB3.1 gen. 1
  • 10000M = 10000Мбит/с = USB3.1 gen. 2

Попробуйте использовать что-то вроде:

lsusb -D /dev/bus/usb/002/005

USB 2.00/3.00 соответствует USB 2.0 / 3.0

Возможно, даже попробовать использоватьlsusb -t

Первая таблица преобразования поможет вам определить версию USB.

Взгляни наЭТОТссылка для большего количества примеров.

решение2

Как отметили @MarkHu и @Matthew, принятый в настоящее время ответ (lsusb -D) может быть потенциально вводящим в заблуждение, поскольку он перечисляет поддерживаемые устройством скорости, а не фактическую скорость. Или, по крайней мере, я не смог использовать его вывод, чтобы узнать текущую скорость устройства.

Имеет ли значение, является ли порт USB 3, если он не поддерживает скорости USB 3?

Просмотр фактической скорости на Linux-компьютере — это немного хлопотно; lsusb, похоже, не предлагает сейчас готового решения. Я обнаружил, что это работает. Сначала перечислите все подключенные устройства и концентраторы, чтобы идентифицировать ваше устройство:

> lsusb
Bus 002 Device 003: ID 0424:2660 Microchip Technology, Inc. (formerly SMSC) Hub
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 004: ID 1058:25ee Western Digital Technologies, Inc.
Bus 001 Device 003: ID 051d:0002 American Power Conversion Uninterruptible Power Supply
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

В моем случае я смотрю на скорость моего внешнего диска WD MyBook. Отсюда интересная строка:

Bus 001 Device 004: ID 1058:25ee Western Digital Technologies, Inc.

Но, похоже, что часть "Bus 001 Device 004" бесполезна для нас, чтобы узнать текущую скорость устройства. Вместо этого нам нужны два числа, разделенные двоеточием 1058:25ee, идентификатор поставщика и идентификатор продукта для такого устройства.

Теперь вам следует проверить /sys/devicesкаталог на наличие содержимого файла idVendor, ища идентификатор поставщика, указанный выше (замените 1058 на свой собственный идентификатор поставщика).

> find /sys/devices/ -name idVendor -print -exec cat {} \; | grep -B 1 1058
./pci0000:00/0000:00:1a.0/usb1/1-1/1-1.6/idVendor
1058

Теперь возьмите указанный выше выходной путь, замените idVendorего на speedи посмотрите на его содержимое:

> cat ./pci0000:00/0000:00:1a.0/usb1/1-1/1-1.6/speed
480

Таким образом вы обнаружите соединение USB 2.0 со скоростью 480 Мбит/с.

Если у вас есть несколько подключенных устройств, вы idProductтакже можете проверить содержимое. Если у вас есть несколькоидентичныйserialустройства, также ищите содержимое .

решение3

Мой опыт показывает, что lsusb -Dкоманда может быть обманчивой, если она сообщает о «возможностях», которые в данный момент не включены типом гнезда, к которому подключено ваше устройство. Ниже приведен пример отфильтрованного вывода (весь вывод составил sudo lsusb -D ${USB_DEVICE_PATH}более 80 строк). В этом примере я делаю вывод, bcdUSB 3.00что должно подразумеваться Device can operate at SuperSpeed (5Gbps)--хотя эта строка все еще присутствовала, когда я подключал свой диск к гнезду USB 2 для сравнения.

$ lsusb -D /dev/bus/usb/007/003 | egrep -i 'usb|speed|version|Mbps|gbps|id|speed'

Device: ID 174c:1153 ASMedia Technology Inc. ASM2115 SATA 6Gb/s bridge
  bcdUSB               3.00
  idVendor           0x174c ASMedia Technology Inc.
  idProduct          0x1153 ASM2115 SATA 6Gb/s bridge

  SuperSpeed USB Device Capability:
    wSpeedsSupported   0x000e
      Device can operate at Full Speed (12Mbps)
      Device can operate at High Speed (480Mbps)
      Device can operate at SuperSpeed (5Gbps)
      Lowest fully-functional device speed is Full Speed (12Mbps)

Обратите внимание, что в idProductстроке содержится некий рекомендательный/маркетинговый текст, 6Gb/sкоторый не следует интерпретировать как достижимую скорость.

Альтернативная короткая команда, которая может быть более полезной:

$ sudo lsusb -t | egrep -i "storage" -B1

/:  Bus 07.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 5000M
    |__ Port 1: Dev 3, If 0, Class=Mass Storage, Driver=usb-storage, 5000M

решение4

Если вы хотите узнать фактическую скорость соединения (в отличие от возможностей, сообщаемых lsusb), вы можете прочитать файлы "speed" из /sys/devices. Предполагая, что вы можете свободно подключать и отключать устройство, вы можете использовать следующий скрипт, чтобы сделать процесс полуавтоматическим. Другой скрипт для получения полного списка описан ниже.

  1. Отключите устройство
  2. Запустите скрипт. Он попросит подключить устройство и нажмите ENTER
  3. Подключите устройство
  4. Нажмите Ввод
  5. Скрипт сообщает соответствующую скорость соединения:
/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/speed    480

Или:

/sys/devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3.3/2-3.3.1/speed    5000

Вот возможные скорости в Мбит/с:

  • 1.5 = USB 1.0/низкоскоростной
  • 12 = USB 1.1/Полноскоростной
  • 480 = USB 2.0/высокоскоростной
  • 5000 = USB 3.0/SuperSpeed
  • 10000 = USB 3.1/SuperSpeed

А вот и сценарий. Я его называю usbspeed-get:

#!/bin/bash
# https://superuser.com/a/1780101/
set -e

LIST1=`mktemp`
LIST2=`mktemp`
echo "Getting list of current devices..."
find /sys/devices -name speed | sort > "$LIST1"
echo -n "Now plug the relevant USB device and press ENTER..."
read dummy
find /sys/devices -name speed | sort > "$LIST2"

comm -3 "$LIST1" "$LIST2" | while read f ; do
echo -n "$f" " "
cat "$f"
done | column -t -s' '

rm  "$LIST1" "$LIST2"

Если вы предпочитаете иметь обзор всех устройств и соответствующие скорости, вы можете использовать следующий скрипт. Я называю его usbspeed-list.

#!/bin/bash
# https://superuser.com/a/1780101/

sep="|"
find /sys/devices -name speed | grep usb  | while read f ; do
  dir=`dirname "$f"`
  for name in speed manufacturer product ; do
     cat "$dir/$name" 2>/dev/null | tr '\n' ' ' 
     echo -n "$sep"
  done
  echo -n "$dir$sep"
  echo
done | column -t --separator "$sep"

По умолчанию он выведет устройства в том порядке, в котором они находятся в /sys/devices. Если вы хотите отсортировать их по скорости, вы можете объединить это с sort -n:

usbspeed-list | sort -n
1.5                                        Keyboard                    /sys/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3.4/1-3.4.4/1-3.4.4.2              
1.5     Texas Instruments                  TPS65983B                   /sys/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3.3/1-3.3.2                        
12      Silicon Laboratories               EFM8 HID ISP                /sys/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3.3/1-3.3.3                        
12                                                                     /sys/devices/pci0000:00/0000:00:14.0/usb1/1-14                                     
480     GenesysLogic                       USB2.0 Hub                  /sys/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3.4/1-3.4.4                        
480     GenesysLogic                       USB2.0 Hub                  /sys/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3.4/1-3.4.4/1-3.4.4.4              
480     Linux 5.19.0-38-generic xhci-hcd   xHCI Host Controller        /sys/devices/pci0000:00/0000:00:14.0/usb1                                          
480     Sonix Technology Co., Ltd.         USB2.0 Camera               /sys/devices/pci0000:00/0000:00:14.0/usb1/1-8                                      
480                                        USB2.0 Hub                  /sys/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3.4/1-3.4.4/1-3.4.4.1              
480     VIA Labs, Inc.                     USB2.0 Hub                  /sys/devices/pci0000:00/0000:00:14.0/usb1/1-3                                      
480     VIA Labs, Inc.                     USB2.0 Hub                  /sys/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3.3                                
480     VIA Labs, Inc.                     USB2.0 Hub                  /sys/devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3.4                                
1000                                                                   /sys/devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3.1/2-3.1:1.5/net/enx806d9711f2b1  
5000    DisplayLink                        USB-C Triple-4K Dock        /sys/devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3.1                                
5000    Generic                            USB Storage                 /sys/devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3.4/2-3.4.4/2-3.4.4.4/2-3.4.4.4.4  
5000    GenesysLogic                       USB3.0 Hub                  /sys/devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3.4/2-3.4.4                        
5000    GenesysLogic                       USB3.0 Hub                  /sys/devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3.4/2-3.4.4/2-3.4.4.4              
5000    Prolific Technology Inc.           ATAPI-6 Bridge Controller   /sys/devices/pci0000:00/0000:00:14.0/usb2/2-2                                      
5000    Seagate                            BUP Portable                /sys/devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3.2                                
5000    Space keys                         USB3.1 Storage Device       /sys/devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3.3/2-3.3.1                        
5000    VIA Labs, Inc.                     USB3.0 Hub                  /sys/devices/pci0000:00/0000:00:14.0/usb2/2-3                                      
5000    VIA Labs, Inc.                     USB3.0 Hub                  /sys/devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3.3                                
5000    VIA Labs, Inc.                     USB3.0 Hub                  /sys/devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3.4                                
10000   Linux 5.19.0-38-generic xhci-hcd   xHCI Host Controller        /sys/devices/pci0000:00/0000:00:14.0/usb2 

Здесь клавиатура подключена на очень низкой скорости (1,5), что является нормой, а док-станция жесткого диска USB (контроллер моста ATAPI-6) подключена на скорости 5000 Мбит/с.

Другой способ получения списка устройств и их скорости — скрипт «usb-devices», предоставленныйusbutilsи устанавливается по умолчанию некоторыми дистрибутивами. Он более общий, но также очень многословный. Он сообщает скорость в первой строке описания устройства:

T:  Bus=02 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 44 Spd=5000 MxCh= 0
D:  Ver= 3.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 9 #Cfgs=  1
P:  Vendor=067b ProdID=2773 Rev=01.00
S:  Manufacturer=Prolific Technology Inc.
S:  Product=ATAPI-6 Bridge Controller
S:  SerialNumber=0123456789000000005
C:  #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr=96mA
I:  If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
E:  Ad=01(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
E:  Ad=84(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms

Убедитесь, что вы используете последнюю версию. Версия, поставляемая с Ubuntu 22.04, не содержит список всех устройств.

Связанный контент