0
\$\begingroup\$

I am experiencing problems with USB communications which seems driver related. My setup involves an embedded device set up as a virtual com port (CDC/ACM) with which I communicate over USB. The problem is that the data rates are very slow on a certain computer. I have tested the embedded device on various Linux computers and found the problem to be specific to that pc (the one that matters).

From the output of dmesg the only noticeable difference is the driver being loaded on the different computers. The troublesome pc uses uhci-hcd, whereas others use either ehci-hcd or xhci-hcd. With ehci being available on the slow pc, I tried to dictate which driver is loaded but that seems easier said than done on Linux. Others have suggested blacklisting uhci-hcd, but rmmod returns with an error saying the 'module is built-in'.

The OS on the pc was upgraded from a 32-bit Ubuntu 12 to Ubuntu 14.04 64-bit (processor is 64 bit). Wikipedia mentions that uhci only supports 32-bit memory addressing, requiring an expensive bounce buffer to work with a 64-bit OS. Could this be the reason for the slow data rates?

The embedded processor (Infineon XMC4400) supports full speed (12 Mbps) transfers which I understand corresponds to USB 1.0. Am I correct in assuming that certain drivers for USB 1 outperform others?

I am a bit of a hardware noob and would appreciate any advice in aid of a solution or comprehension of the problem. Should I attempt to force certain drivers for the device, and if so, how? Should I revert to a 32-bit OS, or am I maybe limited by the hardware?

The motherboard on the pc is a Versalogic Mamba EBX-37.

\$\endgroup\$
4
  • \$\begingroup\$ Why do you mention the upgrade? And why didn't you upgrade to some current kernel version? \$\endgroup\$
    – CL.
    Commented May 27, 2016 at 10:41
  • \$\begingroup\$ I wondered whether the 64-bit OS might be causing problems with the uhci-hcd driver. The kernel has been upgraded to version 3.13.0-86-generic. \$\endgroup\$
    – Frik
    Commented May 27, 2016 at 10:57
  • \$\begingroup\$ Performance depends on the details of the machine; you have to test this yourself. And "current" does not mean "over two years old". \$\endgroup\$
    – CL.
    Commented May 27, 2016 at 11:16
  • \$\begingroup\$ Originally apt-get dist-upgrade wouldn't take it further than 3.13.0-86. I have now upgraded it to version 3.19.0-59-generic. Some of the other computers where I have tested successfully have kernels older than this. \$\endgroup\$
    – Frik
    Commented May 27, 2016 at 12:58

1 Answer 1

1
\$\begingroup\$

Seems as though my suspicion regarding the driver was correct. When the device is connected through a USB 2.0 hub, the ehci driver gets loaded and transfer speed increases drastically. Reverting to a 32-bit OS had no effect on the performance.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.