Flash failure on custom Orin NANO board (JP6.2 / Jetson Linux 36.4) - works on devkit but fails on custom board

Hi NVIDIA team,

We are currently encountering a critical issue when flashing our custom board based on Orin Nano using Jetpack 6.2 (Jetson Linux 36.4). The exact same flashing command works perfectly on the official NVIDIA Devkit, but fails on our custom board.

🔧 Flashing setup:

  • Jetpack: 6.2
  • Jetson Linux: R36.4
  • Device: Orin NANO 8GB custom board
  • Flashing command:
sudo ./tools/kernel_flash/l4t_initrd_flash.sh --external-device nvme0n1p1   -c tools/kernel_flash/flash_l4t_t234_nvme.xml -p "-c bootloader/generic/cfg/flash_t234_qspi.xml"   --showlogs --network usb0 jetson-orin-nano-devkit internal

(same on both platforms)

🧩 Problem description:

  • Flashing process starts but gets stuck when trying to communicate with the device.
  • The flashing tool is unable to continue writing the image.
  • Logs show that the USB gadget device is not enumerating properly during flash.

🔍 Debug attempts and findings:

  1. We manually mounted the rootfs on the custom board — this did not resume the flash process.
  2. Rebooting the custom board (with or without pressing the recovery button) boots the previous image, instead of continuing the flash.
  3. We tried checking the SSD partitions and /dev entries, and they appear normal on the custom board.
  4. It works when trying with scripts from older BSPs (JP5.1.1)
  5. We are using flash.sh and it works.

📁 Attached logs:

  • devkit.log: Flashing log on official NVIDIA Devkit (success case)
  • custom.log: Flashing log on custom board (failure case)
  • pc.log: Flashing error log on pc.

Please let us know if any further debug information is needed. We’re also happy to share our board schematic or USB wiring details privately if it helps your debugging.
custom.log (80.6 KB)
devkit.log (121.4 KB)
pc.log (254.6 KB)

Thanks a lot for your support!
Best regards,
Zeng Huang

So did you ever configure the device tree to match your custom board? I mean at least the USB part.

Hi Wayne,

Thanks for your quick reply!

Yes, we have already modified the kernel device tree to match our custom board’s USB configuration.
However, the flashing process still fails on our custom board, while the same command works on the official devkit.

If possible, could you kindly clarify:

  • Are there other parts of the flashing process that rely on USB-related configuration outside the kernel DTB?
  • For example, is the bootloader (MB1, MB2, or cboot) also using USB-related settings that must be customized for the custom board?
  • Or are there any board-specific configurations in cfg or flash.xml that affect USB enumeration during flashing?

We want to ensure that all USB-related configurations are correctly ported to our board to avoid issues with USB enumeration and flashing.

Really appreciate your help!

Best regards,

Your issue only happened in the kernel dtb part which usb enumeration (Jetson as usb device0 fails on your host PC. You don’t need to care about anything in bootloader. They all passed.

Hi Wayne,

Thanks again for the clarification.

Below is the schematic of the USB port used for flashing on our custom board:

We’ve also attached the code, which contains our modifications to the kernel device tree related to USB for this platform version.

Index: hardware/nvidia/t23x/nv-public/tegra234-p3768-0000.dtsi
===================================================================
--- a/hardware/nvidia/t23x/nv-public/tegra234-p3768-0000.dtsi
+++ b/hardware/nvidia/t23x/nv-public/tegra234-p3768-0000.dtsi
@@ -73,6 +73,11 @@
 							nvidia,function = "xusb";
 							status = "okay";
 						};
+
+						usb3-2 {
+							nvidia,function = "xusb";
+							status = "okay";
+						};
 					};
 				};
 			};
@@ -102,13 +107,18 @@
 
 				/* hub */
 				usb3-0 {
-					nvidia,usb2-companion = <1>;
+					nvidia,usb2-companion = <0>;
 					status = "okay";
 				};
 
 				/* J5 */
 				usb3-1 {
-					nvidia,usb2-companion = <0>;
+					nvidia,usb2-companion = <1>;
+					status = "okay";
+				};
+
+				usb3-2 {/* Goes to J5 */
+					nvidia,usb2-companion = <2>;
 					status = "okay";
 				};
 			};
@@ -130,8 +140,9 @@
 			       <&{/bus@0/padctl@3520000/pads/usb2/lanes/usb2-2}>,
 			       <&{/bus@0/padctl@3520000/pads/usb3/lanes/usb3-0}>,
 			       <&{/bus@0/padctl@3520000/pads/usb3/lanes/usb3-1}>;
+				   <&{/bus@0/padctl@3520000/pads/usb3/lanes/usb3-2}>;
 			phy-names = "usb2-0", "usb2-1", "usb2-2", "usb3-0",
-				    "usb3-1";
+				    "usb3-1", "usb3-2";
 		};
 
 		/* C8 - Ethernet */


Could you please help us review this patch and let us know if there’s anything incorrect or missing — especially anything related to USB device mode (gadget mode) that could cause Jetson to fail USB enumeration on the host PC?

We appreciate your support in helping us resolve this issue.

Best regards,
Zeng Huang

HI,

You should share the schematic of the connector part too.

Also, the full dts converted back from dtb.

Thanks again for your continued support.

As requested, here is the schematic of the USB connector section that’s used for flashing on our custom board:


We’ve also attached the orin_nano.txt file, which is converted back from the dtb used during flashing.
This includes all relevant USB kernel device tree configuration for our current setup.
orin_nano.txt (316.5 KB)

Looking forward to your guidance.

Best regards,
Zeng

Your device tree totally didn’t modify things for usb2-0… please read document.

Hi Wayne,

Thanks again for your feedback.

Could you kindly share the specific documentation link that explains how to configure usb2-0 in the device tree ?

It would be very helpful for us to cross-check our implementation and ensure alignment with the expected configuration.

Appreciate your continued support!

Best regards,

1 Like

delete type-c config
success

1 Like

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.