If you’re like me, you have dozens of USB-A and USB-C cables. There are all of various quality, but I have no idea the history of each one. A lot of them came with other products and are total unknown quantity anyway.

Is there a tool to quickly test how good each cable is? Either a software or a hardware tool. Ideally it’d be nice to see something that can measure the power as well. Some charging cables are capable of fast charging, and some are not.

  • tal
    link
    fedilink
    English
    arrow-up
    17
    arrow-down
    1
    ·
    edit-2
    4 months ago

    Linux lets you see your USB tree with lsusb -t. That includes negotiated data transfer speeds.

    This doesn’t, strictly-speaking, give you the cable speed, but it does give you the link speed to another USB device, so if you have a computer with a fast USB controller and a fast USB device (probably a new hub would work well here), such that any limiting factor is the cable, you can see what speed they have negotiated over the cable, which I suppose effectively tells you what speed the cable can support.

    A snippet of mine:

    /:  Bus 004.Port 001: Dev 001, Class=root_hub, Driver=xhci_hcd/5p, 20000M/x2
        |__ Port 005: Dev 005, If 0, Class=Hub, Driver=hub/4p, 5000M
            |__ Port 003: Dev 006, If 0, Class=Hub, Driver=hub/4p, 5000M
            |__ Port 004: Dev 007, If 0, Class=Hub, Driver=hub/4p, 5000M
                |__ Port 001: Dev 008, If 0, Class=Mass Storage, Driver=usb-storage, 5000M
    /:  Bus 005.Port 001: Dev 001, Class=root_hub, Driver=xhci_hcd/2p, 480M
        |__ Port 002: Dev 002, If 0, Class=Hub, Driver=hub/4p, 480M
            |__ Port 004: Dev 003, If 0, Class=Hub, Driver=hub/4p, 480M
                |__ Port 001: Dev 004, If 0, Class=Human Interface Device, Driver=usbhid, 12M
                |__ Port 001: Dev 004, If 1, Class=Human Interface Device, Driver=usbhid, 12M
                |__ Port 002: Dev 005, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
                |__ Port 003: Dev 006, If 0, Class=Audio, Driver=snd-usb-audio, 12M
                |__ Port 003: Dev 006, If 1, Class=Audio, Driver=snd-usb-audio, 12M
                |__ Port 003: Dev 006, If 2, Class=Human Interface Device, Driver=usbhid, 12M
    

    Those numbers there (20000M, 5000M, 480M, 12M, 1.5M) are the data transfer rates supported to the device.

    • tal
      link
      fedilink
      English
      arrow-up
      1
      ·
      edit-2
      3 months ago

      @gedaliyah@lemmy.world The cables do have an “emarker”, which does let them indicate identifying information, but it apparently at least as of eight months back, that information wasn’t exposed by the Linux kernel:

      https://old.reddit.com/r/UsbCHardware/comments/qm34dj/how_to_check_usb_version_of_a_usbc_cable/

      Not yet. Some low-level changes need to be made to the Linux kernel and the underlying UCSI interface, so there’s not anything you can build at the moment to make it happen.

      If you happen to be a skilled linux kernel engineer with experience in USB specifications and more specifically the UCSI specification, and want to help, then contribute on this mailing list: linux-usb@vger.kernel.org

      Dunno about other OSes. There’s also dedicated diagnostic hardware, but unless you want that, the above approach I gave may be your best bet currently.