i.MX8MM & i.MX8MQ USB2.0 Design Without USB TYPE-C

Showing results for 
Show  only  | Search instead for 
Did you mean: 

i.MX8MM & i.MX8MQ USB2.0 Design Without USB TYPE-C

i.MX8MM & i.MX8MQ USB2.0 Design Without USB TYPE-C

      Since the release of i.MX8MQ and i.MX8M Mini, some customers have submitted questions
about the design of USB2.0 for these two processors: due to the needs of the project, there is no
need to use USB3.0 and USB TYPE-C. Therefore, these applications need to use a conventional
USB2.0 interface design similar to i.MX6Q.
      In order for customers with similar needs to complete the design smoothly, this document
summarizes the answers to previous customer responses and draws two USB2.0 design schematics.
At the same time, the i.MX expert hardware team member helped review these two drawings, and
the i.MX Expert software team gave suggestions on software adjustments.

      i.MX8MQ supports USB3.0 and is compatible with USB2.0, i.MX8M Mini only supports USB2.0,
not USB3.0. In both development boards, the USB TYPE-C design scheme is used. We must remove
the USB TYPE-C, PD chip and logic chip. At the same time, change the connector to MicroUSB and

No.1 Hardware Design

1. IOMUX list


2 、USB circuit design
(1) USB Power & OC control









[Comment] For i.MX8MQ

-USB1 is configured as Dual Role Mode, USB1 OTG ID is used for detection

-USB2 is configured as fixed Host mode, USB2 OTG ID is used for detection

-i.MX8M Mini USB2.0


                                       i.MX8M Mini


                                    i.MX8M Mini

[Comment] For i.MX8M Mini

-USB1 is configured as Dual Role Mode, USB1 OTG ID is used for detection

-USB2 is configured as fixed Host mode, USB2 OTG ID is used for detection

(3) Additional description

--About USB1_VBUS & USB2_VBUS of i.MX8M Mini

         According to i.MX8M Mini datasheet, USB1_VBUS & USB2_VBUS allows 0~3.9V input. See below, please!


Therefore, some customers have questioned the USB1_VBUS on the I.MX8M Mini-EVK. From the drawings, the external input voltage exceeds this range.

         In fact, customers do not need to worry about this problem. There are internal voltage-dividing resistors on the USB1_VBUS and USB2_VBUS pins. As long as the customer refers to the design method on the I.MX8M Mini-EVK, the input voltage of these 2 pins can be guaranteed Inside.

--About USBx OTG ID & USBx_ID


         USBx OTG ID is also called GPIO ID, which is the same as that of i.MX6Q. During the work process, the software changes the role between device and host according to the level of the ID pin from high to low or from low to high.


         USBx_ID is called USB PHY ID, which can also perform the same function as USBx OTG ID.

(3)Using USBx_OTG_ID or USBx_ID

         USBx_OTG_ID is recommended. But if customer wants to use USBx_ID, for i.MX8MQ, she can

configure USB_CTL0_ADDR[utmiotg_iddig_sel] register.

And for I.MX8M Mini, USBNC_n_CTRL2[DIG_ID_SEL] register.


         The configuration is got from reference manual of these 2 processors, due to no suitable board, this configuration is not validated on board. Customers can try it.

(4) About Flashing Images to the Storage of Board

         For an empty board or a board that requires an update image, we need to use the USB interface to program the image. At this time, we need the USB interface to work in device mode. For this, the ROM CODE inside the CPU will ensure that the USB works in device mode.

No.2 Tuning Software


According to the actual application, the signals to be used are multiplexed in the dts file. This step is relatively simple and will not be described here

2. Tuning USB configuration in u-boot / device tree

For i.MX8M Mini & i.MX8MQ, i.MX Expert softer team gives the following suggestions, I quote their suggestions here:

      Customer can try it by removing CONFIG_USB_TCPC in imx8mm_evk_defconfi and well as removing the typec_ptn5110_1/2 dependencies in the fsl-imx8mm-evk.dts. The uboot does check the state of the Type C ICs and crash or gets stuck if they are removed.

--i.MX8M Mini


Device Tree:

&usbotg1 {
    status = "okay";

&usbotg2 {
    status = "okay";





--Node of Device tree

&usb_dwc3_0 {       

      status = "okay";       

      /*extcon = <&typec_ptn5100>;*/       

      dr_mode = "otg";       




      maximum-speed = "high-speed";





If you encounter problems while using this document, please submit a ticket to me. Here are the steps to submit a ticket:

1. Open below SUPPORT site, click blue "Go to Tickets" in the middle.
2.Then you will be requested to Login, if you have no an account, please first Register with your business email.
3.After login, please "Create New Cases" button in the middle, then you can submit your question.

NXP TIC team

Weidong Sun



One little thing for IMX8M Mini in case if you still want use USBx_ID instead of USBx_OTG_ID:

USBNC_n_CTRL2[DIG_ID_SEL] in IMX8MMRM uses  IOMUXC_USB_OTG1_ID_SELECT_INPUT but this iomux for imx7 iirc.



Hi @weidong_sun ,

Can you share the BSP information on which this U-Boot changes are verified ?

Have you prepare the similar changes for kernel to use USB2.0 without USB TYPE-C on 8MM/8MQ/8MP HW ?

- Sanjay


I am using type B in USB1 of Imx8mm and follow the same modification in board u-boot device tree. But still i am seeing below message on board bootup.

Log :
In: serial
Out: serial
Err: serial
extcon_ptn5150_init: Can't find device id=0x3d
extcon_ptn5150_setup: port init failed, err=-19

I am not sure why "extcon_ptn5150_init:" is coming even if it's disabled. Below is my device tree detials.

&i2c2 {
clock-frequency = <100000>;
pinctrl-names = "default", "gpio";
pinctrl-0 = <&pinctrl_i2c2>;
pinctrl-1 = <&pinctrl_i2c2_gpio>;
scl-gpios = <&gpio5 16 GPIO_ACTIVE_HIGH>;
sda-gpios = <&gpio5 17 GPIO_ACTIVE_HIGH>;
status = "okay";

ptn5150: ptn5150@3d {
compatible = "nxp,ptn5150";
pinctrl-names = "default";
reg = <0x3d>;
i2c-bus = <0x1>;
status = "disabled";

and ,

&usbotg1 {
dr_mode = "peripheral";
/*extcon = <&ptn5150>;*/
status = "okay";

&usbotg2 {
dr_mode = "host";
/* Regulator requires jumper J3.12 to J3.18 */
vbus-supply = <&reg_usb_otg2_vbus>;
status = "okay";

Host is able to sense usb device but when board is boot up.Host unable to detect the device. Kindly help me to understand the problem.

No ratings
Version history
Last update:
‎03-29-2020 11:42 PM
Updated by: