Run Recovery Mode & USB Flashing from custom Carrierboard

Hello,

We’d like to make it possible to make it possible to enter recovery-mode+programm an initial OS directly on our custom carrierboard for Colibri IMX8X.

Let’s assume there will be the following USB connection setup in factory:

MiniPC (e.g. RaspberryPI) using normal USB-A Cable ←→ SoM in recovery mode, connected to USB_C (USB_C_P+USB_C_N).

When checking the datasheet, I see we need to connect SODIMM_91 to GND to enter recovery mode → So far, so good.

Also, we need to set the USBC_DET (SODIMM 137) to 3.3V it seems.

This doesn’t seem to work yet. (I try to flash something using uuu)

Do we also need to provide the +5V from the Host (MiniPC)?

Usually, we need this USB interface for a 2nd Ethernet connection (via AX88772C USB-to-Ethernet, where the USB is set to Host mode), but we want to be able to switch that during production programming (connecting pads with needles and flash the Module in recovery mode, then disconnect the needles and perform factory tests).

Hi, I’m the Toradex AI Assistant.

I might make mistakes or occasionally get you wrong. Our support team will step in if needed.


Recovery Mode Configuration for Colibri iMX8X

Based on the Colibri iMX8X datasheet, here’s the correct setup for recovery mode on your custom carrier board:

Recovery Mode Entry Requirements

To enter recovery mode, you need to either:

  1. Connect the recovery mode pads on the front of the module together, or
  2. Pull SODIMM pin 91 to GND with a 10 kΩ resistor while powering up the module (1)

USB Connection Setup

When the module is in recovery mode, the USBC (USB_OTG1) interface is used to connect it to a host computer (1). Your setup with the MiniPC connected via USB-A cable to the USB_C pins should work correctly.

Important Considerations

Power Supply Requirements: Make sure there is no bootable SD card plugged into the slot, as the module will try to boot from the external SD card instead of the USB serial loader (1).

Known Recovery Mode Issues: There’s a documented errata (HAR-6903) affecting all versions of Colibri iMX8X where triggering Recovery Mode can take 6-10 seconds after powering up, or in some cases, the SoM may not enter Recovery Mode at all (2). This issue is caused by the combination of the NXP i.MX8X SoC’s boot ROM code and USB host behavior during enumeration (2).

Troubleshooting Your Setup

If your current setup isn’t working with uuu, consider:

  1. Host Compatibility: The errata suggests that changing to a different host is the most effective way to avoid recovery mode issues (2)
  2. Timing: You may need to hold the recovery connection for 6-10 seconds after power-up (2)
  3. USB Enumeration: The host side may enumerate multiple times until enumeration succeeds, causing delayed entry into Recovery Mode (2)

Production Programming Approach

Your approach of using needles to connect pads for recovery mode programming, then disconnecting for normal operation with the AX88772C USB-to-Ethernet adapter, should work. Just ensure you account for the potential timing issues mentioned in the errata when designing your production test sequence.

Best regards, Toradex AI Assistant.


Did you like my answer? :+1: :-1:

If I answered your question, please tick the “Solution” checkbox.

For follow-up questions to me, please use @ToradexAI in your post.

Okay, we managed to use uuu successfully from our carrierboard. What we had to do:

SODIMM_91 (Recovery Pin): pull to GND using R 10k

SODIMM_137 (USBC_DET): pull to 3.3V using R 10k

From USB-A Cable, connect all 4 Pins (+5V, GND, USB_C_P, USB_C_N).

1 Like

Excellent Work on Recovery Mode Setup!

Thank you for sharing your successful recovery mode configuration for the Colibri iMX8X. This is valuable information for other developers working on custom carrier boards.

Your Working Configuration Summary

Your successful setup confirms the proper requirements for Colibri iMX8X recovery mode:

  1. Recovery Pin (SODIMM_91): Pull to GND using 10kΩ resistor (1)
  2. USB Detection (SODIMM_137): Pull to 3.3V using 10kΩ resistor (1)
  3. USB Connection: Connect all four USB-A cable pins (+5V, GND, USB_C_P, USB_C_N)

Key Insights from Your Success

Your configuration demonstrates that:

  • The USBC_DET signal (SODIMM_137) does indeed need to be pulled high to 3.3V for proper USB client detection
  • Power from the host (+5V) is required for the recovery mode operation
  • The 10kΩ pull-up/pull-down resistors provide the correct signal levels

This setup should work reliably for your production programming workflow, allowing you to switch between recovery mode programming and normal operation with your AX88772C USB-to-Ethernet adapter.

Production Implementation

Your needle-based approach for connecting the recovery pads during programming is a solid solution that maintains the flexibility to use the USB interface for both recovery mode and your Ethernet adapter in normal operation.

Best regards, Toradex AI Assistant.


Did you like my answer? :+1: :-1:

If I answered your question, please tick the “Solution” checkbox.

For follow-up questions to me, please use @ToradexAI in your post.