PlusMagi's Blog By Pitt Phunsanit Technology วิธีตรวจสอบสถานะความเร็วพอร์ต USB บน Linux อย่างละเอียด

วิธีตรวจสอบสถานะความเร็วพอร์ต USB บน Linux อย่างละเอียด

บน Linux สามารถตรวจสอบสถานะความเร็วและการเจรจาโปรโตคอล (Negotiated Speed) ของอุปกรณ์ USB ได้อย่างละเอียดผ่าน Kernel Sysfs, เครื่องมือกลุ่ม usbutils และ Kernel Log โดยไม่ต้องติดตั้งซอฟต์แวร์เสริมขนาดใหญ่


วิธีที่ 1: ตรวจสอบผ่าน lsusb -t (เร็วและเห็นภาพลำดับ Tree ชัดเจนที่สุด)

คำสั่ง lsusb -t แสดงแผนผังโครงสร้างพอร์ต (Topology Tree) พร้อมบอกค่าความเร็วในการทำงานจริงของแต่ละอุปกรณ์ทันที

  1. เปิด Terminal แล้วรันคำสั่ง

Bash

BASH / Shell

lsusb -t
  1. สังเกตเอาต์พุตที่แสดงผล

Plaintext

Plain Text

Plain Text

/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/6p, 10000M
    |__ Port 1: Dev 2, If 0, Class=Mass Storage, Driver=usb-storage, 5000M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/12p, 480M
    |__ Port 2: Dev 3, If 0, Class=Human Interface Device, Driver=usbhid, 12M
  1. สังเกตตัวเลขความเร็วด้านหลังสุด
    • 480M
      USB 2.0 (High-Speed)
    • 5000M
      USB 3.0 / USB 3.1 Gen 1 (SuperSpeed – 5 Gbps)
    • 10000M
      USB 3.1 Gen 2 / USB 3.2 (SuperSpeedPlus – 10 Gbps)
    • 20000M
      USB 3.2 2×2 (20 Gbps)

หากอุปกรณ์ของคุณรองรับ 5000M แต่ขึ้นโชว์ว่าวิ่งอยู่ที่ 480M แสดงว่าตัวอุปกรณ์ตกไปจับคู่ที่โปรโตคอล USB 2.0 เรียบร้อยแล้ว


วิธีที่ 2: อ่านค่าตรงจาก Virtual Filesystem (/sys/bus/usb/devices/)

วิธีนี้ไม่ต้องพึ่งพาแพ็กเกจภายนอก เหมาะสำหรับนำไปเขียน Bash Script อัตโนมัติ โดยเคอร์เนลของ Linux จะจัดเก็บความเร็วลิงก์จริงไว้ในไฟล์ speed

รันคำสั่ง One-liner เพื่อดึงรายชื่ออุปกรณ์พร้อมความเร็ว

Bash

BASH / Shell

for dev in /sys/bus/usb/devices/*; do
  if [ -f "$dev/product" ]; then
    echo "$(cat "$dev/product" 2>/dev/null) [$(basename "$dev")]: $(cat "$dev/speed" 2>/dev/null) Mbps"
  fi
done

ผลลัพธ์ที่ได้

Plaintext

Plain Text

Plain Text

USB SanDisk 3.2Gen1 [2-1]: 5000 Mbps
USB Optical Mouse [1-2]: 1.5 Mbps
Generic USB Hub [1-4]: 480 Mbps

ค่าที่อ่านได้จะแสดงเป็น Mbps โดยตรง เช่น 480 (USB 2.0) หรือ 5000 / 10000 (USB 3.x)


วิธีที่ 3: ตรวจสอบ Log การเสียบสด ๆ ผ่าน dmesg

วิธีนี้ช่วยวิเคราะห์จังหวะที่เสียบสายได้ดีที่สุด ว่าคอนโทรลเลอร์ตรวจจับพินและเจรจาความเร็วได้เท่าใดในเสี้ยววินาทีแรก

  1. เปิด Terminal แล้วสั่งมอนิเตอร์ Log ล่วงหน้า

Bash

BASH / Shell

sudo dmesg -w
  1. ทำการเสียบอุปกรณ์ USB เข้ากับพอร์ต แล้วสังเกตข้อความบรรทัดใหม่ที่ปรากฏขึ้น:
    • กรณีเสียบติดเป็น USB 3.0 (SuperSpeed)
      usb 2-1: new SuperSpeed USB device number 2 using xhci_hcd usb-storage 2-1:1.0: USB Mass Storage device detected
    • กรณีเสียบช้าแล้วตกไปเป็น USB 2.0 (High-Speed)
      usb 1-1: new high-speed USB device number 3 using xhci_hcd
    • หากขึ้นข้อความ SuperSpeedPlus แสดงว่าเชื่อมต่อได้ในระดับ 10 Gbps ขึ้นไป

วิธีที่ 4: ตรวจสอบ Descriptor เชิงลึกผ่าน lsusb -v

หากต้องการตรวจสอบว่าตัวอุปกรณ์เองรองรับความเร็วสูงสุดเท่าใด (Hardware Capability) เทียบกับที่ระบบมองเห็น

  1. หา Device ID ก่อนด้วยคำสั่ง lsusb ทั่วไป

Bash

Plain Text

Plain Text

lsusb

(สมมติได้ ID เช่น 0781:5583)

  1. ดึงข้อมูล Descriptor เฉพาะอุปกรณ์นั้น:

Bash

Plain Text

Plain Text

sudo lsusb -d 0781:5583 -v | grep -E "bcdUSB|wSpeedSupported"
  • bcdUSB 3.20 (หรือ 3.00, 2.10)
    คือมาตรฐานฮาร์ดแวร์สูงสุดที่ตัวอุปกรณ์ถูกสร้างมารองรับ
  • หากตัวอุปกรณ์ระบุ bcdUSB 3.x แต่เมื่อเช็กใน lsusb -t ได้เพียง 480M แสดงว่าเกิดปัญหาการ Handshake จากการเสียบช้า สายสัญญาณมีปัญหา หรือพอร์ตต้นทางไม่รองรับ

สรุปค่าเปรียบเทียบใน Linux

ตัวเลขใน lsusb -tข้อความใน dmesgค่าใน Sysfs (/sys)มาตรฐาน USB
480Mhigh-speed480USB 2.0
5000MSuperSpeed5000USB 3.0 / USB 3.1 Gen 1
10000MSuperSpeedPlus10000USB 3.1 Gen 2 / USB 3.2
20000MSuperSpeedPlus20000USB 3.2 Gen 2×2