i.MX6 USB host and USB on-the-go driver registry settings
The i.MX6 USB host driver (used for the USB host controller and for the OTG controller when working in host mode) supports some additional registry entries that can be used to improve compatibility with previous hardware designs.
Force USB 1.1 behaviour
Some carrier boards (like EVB 2.0) may have USB external transceivers that can't support USB 2.0 operations. This will generate issues and lead to devices not being recognized by the system.
It is possible to disable USB 2.0 high-speed mode by adding the following keys:
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\HCD_HSH1]
"HighSpeed"=dword:0 ; Disables high-speed mode
; when the second host is used as host-only device
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\HCD_HSH2]
"HighSpeed"=dword:0 ; Disables high-speed mode
; when the second host is used for usb on-the-go
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\UsbOtg\Hcd]
"HighSpeed"=dword:0 ; Disables high-speed mode
Disable optional control signals
Both controllers use some additional signals to detect over-current (OC) and to enable power on an external hub (PEN). Those signals could be disabled if the signals are not connected or need to be used for a different purpose.
To do this you should set the EnablePEN or EnableOC keys to zero in the corresponding driver configuration.
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\HCD_HSH1]
"EnableOC"=dword:0 ; Disables over-current detection
"EnablePEN"=dword:0 ; Disables power enable
;when the second host is used as host-only device
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\HCD_HSH2]
"EnableOC"=dword:0 ; Disables over-current detection
"EnablePEN"=dword:0 ; Disables power enable
; when the second host is used for usb on-the-go
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\UsbOtg\Hcd]
"EnableOC"=dword:0 ; Disables over-current detection
"EnablePEN"=dword:0 ; Disables power enable
And additional signal named VDET is used by the On-The-Go controller. On Apalis this pin is a dedicated pin, on Colibri it may be used as GPIO, but it requires some additional GPIO pins states to be changed to be fully controllable by SW. Check the datasheet for additional information. In general is better to not use this pin as a regular GPIO, unless you are forced to do this for backward compatibility with old carrier boards.
Solve detection issues when multiple hubs are plugged in at boot
In some conditions multiple levels of hubs may lead to some devices not being detected at boot. We observed this issue with two second level hubs attached to the EVB. Some of the devices connected to one of the hubs were not detected on 10-20% of reboots.
To solve the issue you may add the following registry entry (work on image 1.3b4 or newer) :
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\HCD_HSH1]
"AttachDelay"=dword:<delay in MS>
You can start with a 1s delay and then decrease the time as long as you can't no longer reproduce the issue.