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.