Abstract: For users of the redriver version of the Acroname USB Type C 5 Port Switch: if using USB 2.0 only or having troubles with USB 2.0 connections, disable the USB 3.1 redriver and disconnect the USB 3.1 data lines to restore function to the USB 2.0 data lines.
One of our customers ran into a bizarre issue with our USB C Switches during the testing of an automotive infotainment head unit. While testing the connectivity of iOS and Android devices to their infotainment head unit (presumably using CarPlay or Android Auto), one of their test devices was simply not connecting and additionally did not appear to be trying to connect. In other words, no connection - successful or unsuccessful - was being attempted by the test device.
Normally when we hear about a connection issue through a USB C Switch, we commonly recommend decreasing cable length and increasing the redriver strengths, assuming the lack of link is a signal integrity problem. In this particular situation, however, neither of these suggestions showed any change or improvement in the connection!
The root issue was a phone effectively being too smart for its own good. Upon connection to the switch, the phone was able to detect the termination resistance on the USB 3.1 datalines, and therefore decided to not even attempt a connection over USB 2.0. In the phone’s logic, it preferred the USB 3.1 lines it saw and so completely neglected USB 2.0 - after all, why would it connect on the slower bus if the faster bus is available? Since the automotive head unit was a USB 2.0 device, it saw no traffic on the USB 2.0 lines and therefore was reacting as if there was no device connected. The data speed negotiation mismatch, indirectly caused by the USB C Switch’s termination of the USB 3.1 data lines, was behind the data connectivity problem.
The solution was to disconnect the USB 3.1 data lines and disable the USB 3.1 redriver so it does NOT provide termination.
Who Is Impacted?
Any device that has both USB 2.0 and USB 3.1 connections can exhibit the issue described above. With both sets of data lines present, a device might detect the termination on the USB 3.1 lines and completely ignore the USB 2.0 lines.
Why Does This Happen?
The USB 3.1 redriver chip in the switch provides resistive termination because it’s ending and recreating a new cleaner signal as it passes through the switch. The USB 2.0 redriver works on a different concept and does not recreate the signal, instead only augmenting the signal’s rising edge and DC offset.
How Do I Know If I Am Having A Data Speed Negotiation Issue?
The issue exhibits itself as a device that is not attempting to connect through the USB C Switch. In contrast, a signal integrity issue normally shows as a constant cycle of easily seen attempts to connect/disconnect, or an incomplete discovery in the USB device tree.
How to Fix It!
For use cases that only test USB 2.0 when there are one or many connected devices that also are USB 3.1 capable, we would recommend disconnecting the USB 3.1 data lines and disabling the USB 3.1 redriver.
With StemTool open, under the “Data” section, uncheck the “SS1” and “SS2” boxes.
Unchecking these boxes will disconnect the Super Speed 1 lanes and the Super Speed 2 lanes.
Next, under the “USB-C” section, find the “Alt. Mode” selection box. The “Alt. Mode” setting is used to configure the four data lanes through the USB 3.1 redriver. By default, the switch is configured to “USB 3.1 Enabled”. To implement the fix, change the “Alt. Mode” setting to “USB 3.1 Disabled”, which disables the redriver on all super speed data lanes going through the switch.
While the above steps and images show the fix as implemented in StemTool, these changes can also be performed programmatically in any of our API’s. Look into the BrainStem USB entity and follow the setSuperSpeedDataDisable and setAltModeConfig methods.