The i.MX91 CPU has two USB 2.0 OTG ports with integrated PHY.

USB interfaces on the ConnectCore 91

On the ConnectCore 91 system-on-module:

  • USB_OTG1 is available on the castellated pads and the LGA pads.

  • USB_OTG2 is available on the LGA pads. Only the differential data lines are available on the castellated pads.

On the ConnectCore 93 Development Kit:

  • USB_OTG1 is connected to a USB Type-C connector.

  • USB_OTG2 is connected to a four-port USB hub that makes it available at:

    • both ports of the stackable dual USB A-type connector.

    • the PCIe connector.

    • the XBee Cellular socket.

Some lines of USB_OTG1 are multiplexed with other functionality through a group of jumpers on the ConnectCore 93 Development Kit. Make sure the appropriate jumpers are connected when using USB_OTG1 on the ConnectCore 93 Development Kit.

See Hardware reference manuals for information on the jumper connections and the multiplexed functionality they select.

Kernel configuration

You can manage the USB 2.0 support through the kernel configuration options:

  • Support for Host-side USB (CONFIG_USB)

  • EHCI HCD (USB 2.0) support (CONFIG_USB_EHCI_HCD)

  • ChipIdea Highspeed Dual Role Controller (CONFIG_USB_CHIPIDEA)

  • ChipIdea device controller (CONFIG_USB_CHIPIDEA_UDC)

  • ChipIdea host controller (CONFIG_USB_CHIPIDEA_HOST)

  • Freescale MXS USB PHY support (CONFIG_USB_MXS_PHY)

  • OTG support (CONFIG_USB_OTG)

  • Type-C Port (CONFIG_TYPEC_TCPCI)

All of these kernel configuration options are enabled as built-in on the default ConnectCore 91 kernel configuration file.

The USB device driver provides the functionality for the USB gadget drivers. The USB gadget drivers implement one or more "functions", each providing a different capability.

The following gadget drivers are supported and enabled as loadable modules on the default ConnectCore 91 kernel configuration file.

  • Mass Storage Gadget (CONFIG_USB_MASS_STORAGE)

  • Ethernet Gadget with CDC Ethernet support (CONFIG_USB_ETH)

  • Serial Gadget with ACM and CDC OBEX support (CONFIG_USB_G_SERIAL)

Gadget drivers are enabled as loadable modules because only one gadget function can be used at a time. Before using a gadget driver, you must first make sure no other gadget driver is loaded.

Kernel driver

The i.MX91 universal serial bus (USB) driver implements a standard Linux driver interface to the CHIPIDEA USB-HS On-The-Go (OTG) controller. The CHIPIDEA USB controller is enhanced host controller interface (EHCI) compliant.

The i.MX91 USB drivers are located at drivers/usb/.

File Description

chipidea/core.c

Chipidea IP core driver

chipidea/udc.c

Chipidea peripheral driver

chipidea/host.c

Chipidea host driver

chipidea/ci_hdrc_imx.c

i.MX glue layer

chipidea/otg.c

Chipidea OTG driver

chipidea/otg_fsm.c

Chipidea OTG HNP and SRP driver

chipidea/usbmisc_imx.c

i.MX SoC abstract layer

phy/phy-mxs-usb.c

i.MX USB physical driver

tcpm/tcpci.c

Type-C Port Controller Interface driver

Device tree bindings and customization

The i.MX91 USB controller device tree bindings are documented at Documentation/devicetree/bindings/usb/ci-hdrc-usb2.txt.

Example: ConnectCore 93 Development Kit

USB_OTG1 port is configured by default to work as USB Type-C connector. USB_OTG2 port is configured by default to work as host.

ConnectCore 93 Development Kit device tree
/* USB_OTG1 - USB TypeC */
&usbotg1 {
	dr_mode = "otg";
	hnp-disable;
	srp-disable;
	adp-disable;
	usb-role-switch;
	disable-over-current;
	samsung,picophy-pre-emp-curr-control = <3>;
	samsung,picophy-dc-vol-level-adjust = <7>;
	status = "okay";

	port {
		usb1_drd_sw: endpoint {
			remote-endpoint = <&typec1_dr_sw>;
		};
	};
};

/* USB_OTG2 connected to usb hub */
&usbotg2 {
	dr_mode = "host";
	disable-over-current;
	status = "okay";
};

Use the USB port

See the following topics for information on how to use the USB port.