หมวดหมู่: 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