Colibri imx8x / Iris Carrier - set X12 Micro USB to host

Hello,

we are using a colibri imx8x with an iris carrier board. We want to use the micro-usb port as a usb-host and i have problems figuring out how to achieve this.

In the iris data sheet the micro-usb is marked as Host/Client (X12), with USBC_N and USBC_P connected tor SODIMM-Pin 145 and 143.

The data sheet for colibri marks those Pins as:

143 USB Client DP USB_OTG1_DP
145 USB Client DM USB_OTG1_DN

Is it possible to set this micro usb port to host mode?

From the Device Tree Customization page I know there is a solution to set a usb mode, via the device tree, so I looked for the nodes for the usb devices in the dtb files on the system. I could only find one node where the dr_mode is set to host, but i could not find another usb node (or maybe I just did not recognise it?).

the dtbs on our system are:
imx8qxp-colibri-aster.dtb
imx8qxp-colibri-dsihdmi-eval-v3.dtb
imx8qxp-colibri-eval-v3.dtb

and in imx8qxp-colibri-eval-v3.dtb I could find the following node:

		usb3@5b110000 {
			compatible = "Cadence,usb3";
			reg = <0x5b110000 0x10000 0x5b130000 0x10000 0x5b140000 0x10000 0x5b160000 0x40000 0x5b120000 0x10000>;
			interrupt-parent = <0x1>;
			interrupts = <0x0 0x10f 0x4>;
			clocks = <0xac 0x1 0xac 0x0 0xac 0x5 0xac 0x2 0xac 0x3>;
			clock-names = "usb3_lpm_clk", "usb3_bus_clk", "usb3_aclk", "usb3_ipg_clk", "usb3_core_pclk";
			assigned-clocks = <0x3 0x106 0x2 0x3 0x106 0x4 0x3 0x106 0x1>;
			assigned-clock-rates = <0x7735940 0xb71b00 0xee6b280>;
			power-domains = <0x17 0x106>;
			cdns3,usbphy = <0xad>;
			status = "okay";
			dr_mode = "host";
			phandle = <0x174>;
		}

So if it is even possible to reset the micro-usb port to host?
Where can i find the node or the identifier needed to set the host mode for X12 micro-usb port?

Thank you and best regards

Hello @GabriFr1,

Thanks for posting your question!

Would you mind sharing some more information:
What carrier board ( w/ version) are you using?
Are you using Torizoncore builder?

Here is a related article on USB Device mode that should shed some light.

Specifically:

With Colibri modules if you are using a OTG Micro-B cable (ID pin is grounded) this may give you the functionality you need (power driven to client). There is also software configurable solutions via a control signal USBC_DET that allows configuration. Do you know which solution fits your needs?

-Eric

Hello Eric,

thanks for your fast reply. A bit more info:

We are using the Iris Board V 2.0.
We using, for now, standard Torizon Core, only thing we did was applying device tree overlays to get our display running. (capacitive touch 10.1" LVDS)

We do not want to use the micro port to plug in clients that need to be powered, but we have a USV (unterbrechungsfreie Stromversorgung), which should communicate via serial communication.
When plugging this device directly into my development pc, I can find the device and a hardware address and talk to it (using minicom or similar).

Here is what i do:
connect cable from usb on USV to laptop
open temrinal
use dmesg | grep (or similar command)
i get an address ( …/ttyAMC0 )
communication between devices can be started

And that is what i want to achieve using X12 on the Iris board, but using this method, the dmesg command does not give anything for the manufacturer. So I thought the usb micro port could not recognize the device? And reading Colibri imx8x datasheet I thought the config of the port would be not as we need it to be?

Hello @GabriFr1 ,
Which USB cable are you using to connect the USV to your Iris board?
Are you using a normal USB cable or a USB-OTG one?

Best regards,
Josep

Hello Josep,

it took me a moment to evaluate our connection against a standard USB OTG cable. Here is what we found:
We do not use a ready to use USB OTG cable, but a micro USB connected to a pin header.
But according to the specifications of the USV the pin connecting to our ID is in fact grounded.
See following picture form the manual:

image

This would result in the following wiring:

So Sense and GND are both wired to GND. This should work as well as a “regular” OTG cable where the sense-gnd connection is in cable/plug?

Or are we missing something here?

Thanks again and best regards,
Franz Gabriel

Hello @GabriFr1,

just to exclude that your cable is the problem. Can you try an OTG cable?
How long is your cable? could be that GNDing it on the other side the cable has a too high resistance.

have you tried the minimal console image if it works there?

Best Regards,
Matthias Gohlke

Hello Matthias,

thank you for your answer. Just to be extra sure we will try an OTG cable (as soon as it gets here).

If this leads to no success, than we will try the minimal console image.

I will keep you updated.
Best regards,
Franz Gabriel