Work-around for USB-Host issue
Description of the limitations
The issue is encountered when trying to connect a high speed USB device to a snowball in Host mode:
- Bus powered Mass storage does not correctly enumerate
- Mass storage with self powered Hub shows some copy failure
- Results of the USB enumeration:
|Bus-powered Mass storage||KO|
|HID + Self-powered Hub||OK|
|Mass storage + Self-powered Hub||OK|
Reason is that USB data are corrupted: The USB bus contains spurious data which halt further activity.
In HOST mode, the eye diagram is facing high distortion in high speed use cases. This appears with and without load on Vbus, whatever the AB8500 versions (V3.1, V 3.2, V3.3).
=> AB8500 and USB devices work correctly except that we face spurious data in high speed mode
These spurious data result from noise generation on Vbus:
- The internal step-up of AB8500 requires a careful layout: VDD_USB_DIG / GND_USB_DIG and VDDPHY / GNDVBUS are very sensitive to noise and have a direct impact on data quality especially in High Speed mode.
=> The USB host issue results from a layout weakness in the current PCB
For existing boards there are solutions to support high speed devices.
The complete workaround requires both a Software patch AND a Hardware add-on.
- The AB8500 needs to be configured to use an external charge pump instead of the internal one when externally generating the Vbus voltage. A software patch is being proposed as a sysfs. It can be enabled at runtime with specific command line. You can find the patch here.
- Command line to enable external Vbus:
$ echo 1 > /sys/devices/platform/musb-ux500.0/musb-hdrc/extvbus
- Command line to use the internal Vbus generation (default):
$ echo 0 > /sys/devices/platform/musb-ux500.0/musb-hdrc/extvbus
Hardware fix - Option 1
- A possible solution is to provide a host add-on adapter acting as a A to Mini-A converter and supplying the EXT VBUS.
- The 5v supply can be derived from the existing Snowball power management
Hardware fix - Option 2
- An other solution would be to cut the USB cable and supply VBUS through the cable from an external power supply. Similar approaches using a Y cable may be considered too.
How to use a USB Y cable for connecting High speed devices to snowball
- Connect the
- Standard A power plug of the Y cable (plug with the shorter end) to the PC to draw the 5V from the PC
- Standard A plug of the Y cable to the Mini A cable of snowball
- Standard A receptacle of the Y cable to the device
- Set the extvbus sysfs entry to ensure the 5V is drawn from the PC using
echo 1 > /sys/devices/soc0/musb-ux500.0/musb-hdrc/extvbus
- Connect the MiniA cable to the snowball OTG USB port
To revert the change and draw 5V from snowball do
echo 0 > /sys/devices/soc0/musb-ux500.0/musb-hdrc/extvbus
OR reboot the board.