![Как я могу быть уверен, что подключил устройство к порту USB 3?](https://rvso.com/image/1415053/%D0%9A%D0%B0%D0%BA%20%D1%8F%20%D0%BC%D0%BE%D0%B3%D1%83%20%D0%B1%D1%8B%D1%82%D1%8C%20%D1%83%D0%B2%D0%B5%D1%80%D0%B5%D0%BD%2C%20%D1%87%D1%82%D0%BE%20%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B8%D0%BB%20%D1%83%D1%81%D1%82%D1%80%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%BE%20%D0%BA%20%D0%BF%D0%BE%D1%80%D1%82%D1%83%20USB%203%3F.png)
На моем компьютере есть несколько портов 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. Предполагая, что вы можете свободно подключать и отключать устройство, вы можете использовать следующий скрипт, чтобы сделать процесс полуавтоматическим. Другой скрипт для получения полного списка описан ниже.
- Отключите устройство
- Запустите скрипт. Он попросит подключить устройство и нажмите ENTER
- Подключите устройство
- Нажмите Ввод
- Скрипт сообщает соответствующую скорость соединения:
/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, не содержит список всех устройств.