USB Hub_USB7206C on Orin NX Custom Carrier Board

Hi,
I have developed a custom carrier board for Orin NX, which basically follows the Orin NX developer kit. Now I have expanded the USB interface on the carrier board through USB7206C. The USBSS1 of Orin NX is expanded into 5 USB3.2 interfaces through USB7206C. The design of USB7206C mainly refers to the official reference design. The I2C0 bus of Orin NX is connected to the I2C pin of USB7206C (not sure whether it will be used, so it is reserved). For my current design, do I need to make custom modifications to the device tree, boot, etc. to make USB7206C and Orin NX work properly? Now I have refreshed the system for Orin NX using SDK Manager, and it cannot recognize/establish communication with USB7206C, causing my USB interfaces to be unusable.

Please check your design first to make sure it can meet below rule.

Q5: Can USB2.0 port from a hub combine with USBSS port directly?

One USB2 roothub cannot be paired with multiple USB3 roothubs. Valid design is one USB2 roothub + one USB3 roothub like:

*) USB2 + USB3 in pair connecting to a USB HUB

*) USB2 + USB3 in pair connecting to a PD controller and then to a type-C port

*) USB2 + USB3 in pair connecting to a type-A port

The USB2UP_DP/M and USB3UP_TX/RX on the hub side are upstream ports and need to be connected to the corresponding USB bus of the SOM.And referring to the design of P3768, the USB Hub uses the RTS5420 chip in the P3768 schematic, and the USB1 and USBSS0 from the SOM are connected to the upstream pins of the RTS5420.

USB2 + USB3 means USB2.0 + USB3.0…

The devkit use USB1+USBSS0 for hub, so you should change dts setting based on your design. You can refer to this topic for that: Orin NX USB 3.0 only seems to be working on USB2.0 configuration

Hi Trumany,
USB7206C should be able to work in USB hub mode without any special configuration. Could you please check if my current DTS settings are OK? Because I just started to learn how to modify the device tree。I have disabled the i2c0

padctl@3520000 {
			reg-names = "padctl\0ao";
			resets = <0x03 0x72>;
			interrupts = <0x00 0xa7 0x04>;
			avdd-usb-supply = <0xf6>;
			compatible = "nvidia,tegra234-xusb-padctl";
			status = "okay";
			vclamp-usb-supply = <0xf5>;
			reg = <0x00 0x3520000 0x00 0x20000 0x00 0x3540000 0x00 0x10000>;
			phandle = <0xfa>;
			reset-names = "padctl";

			ports {

				usb3-0 {
					nvidia,usb2-companion = <0x01>;
					status = "okay";
				};
				
				usb3-1 {
					nvidia,usb2-companion = <0x01>;
					status = "okay";
				};
				
				usb3-2 {
					status = "disabled";
				};
				
				usb3-3 {
					status = "disabled";
				};
				
				usb2-0 {
					usb-role-switch;
					mode = "otg";
					vbus-supply = <0xf7>;
					status = "okay";

					port {

						endpoint {
							remote-endpoint = <0xf8>;
							phandle = <0x106>;
						};
					};
				};
				
				usb2-1 {
					mode = "host";
					vbus-supply = <0xf9>;
					status = "okay";
				};

				usb2-2 {
					mode = "host";
					vbus-supply = <0xf7>;
					status = "okay";
				};
				
				usb2-3 {
					status = "disabled";
				};
				
			};

			pads {

				usb3 {

					lanes {

						usb3-0 {
							nvidia,function = "xusb";
							#phy-cells = <0x00>;
							status = "okay";
							phandle = <0x100>;
						};
						
						usb3-1 {
							nvidia,function = "xusb";
							#phy-cells = <0x00>;
							status = "okay";
							phandle = <0xfc>;
						};
						
						usb3-2 {
							nvidia,function = "xusb";
							#phy-cells = <0x00>;
							status = "disabled";
						};

						usb3-3 {
							nvidia,function = "xusb";
							#phy-cells = <0x00>;
							status = "disabled";
						};
					};
				};

				usb2 {
					clock-names = "trk";
					clocks = <0x03 0xa5>;

					lanes {

						usb2-0 {
							nvidia,function = "xusb";
							#phy-cells = <0x00>;
							status = "okay";
							phandle = <0xfb>;
						};
						
						usb2-1 {
							nvidia,function = "xusb";
							#phy-cells = <0x00>;
							status = "okay";
							phandle = <0xfe>;
						};
						
						usb2-2 {
							nvidia,function = "xusb";
							#phy-cells = <0x00>;
							status = "okay";
							phandle = <0xff>;
						};				

						usb2-3 {
							nvidia,function = "xusb";
							#phy-cells = <0x00>;
							status = "disabled";
						};				
					};
				};
			};
		};
usb@3610000 {
			power-domains = <0x03 0x0c 0x03 0x0a>;
			iommus = <0xf0 0x0e>;
			dma-coherent;
			interconnect-names = "dma-mem\0write";
			//phy-names = "usb2-0\0usb2-1\0usb2-2\0usb3-0\0usb3-1";
			phy-names = "usb2-1\0usb3-1";
			clock-names = "xusb_host\0xusb_falcon_src\0xusb_ss\0xusb_ss_src\0xusb_hs_src\0xusb_fs_src\0pll_u_480m\0clk_m\0pll_e";
			interconnects = <0x57 0x4a 0x58 0x57 0x4b 0x58>;
			reg-names = "hcd\0fpci\0bar2";
			power-domain-names = "xusb_host\0xusb_ss";
			nvidia,xusb-padctl = <0xfa>;
			clocks = <0x03 0x10b 0x03 0x10d 0x03 0x10c 0x03 0x113 0x03 0x0e 0x03 0x110 0x03 0x67 0x03 0x0e 0x03 0x64>;
			interrupts-extended = <0x01 0x00 0xa3 0x04 0x01 0x00 0xa4 0x04 0xfd 0x4c 0x04 0xfd 0x4d 0x04 0xfd 0x4e 0x04 0xfd 0x4f 0x04 0xfd 0x50 0x04 0xfd 0x51 0x04 0xfd 0x52 0x04>;
			compatible = "nvidia,tegra234-xhci\0nvidia,tegra234-xusb";
			status = "okay";
			interrupt-names = "xhci\0mbox\0wake0\0wake1\0wake2\0wake3\0wake4\0wake5\0wake6";
			phys = <0xfe 0xfc>;
			reg = <0x00 0x3610000 0x00 0x40000 0x00 0x3600000 0x00 0x10000 0x00 0x3650000 0x00 0x10000>;
		};
		usb3-0 {
					nvidia,usb2-companion = <0x01>;
					status = "okay";
				};
				
				usb3-1 {
					nvidia,usb2-companion = <0x01>;
					status = "okay";
				};

There is obvious error above.

You should read document.

https://docs.nvidia.com/jetson/archives/r36.4/DeveloperGuide/HR/JetsonModuleAdaptationAndBringUp/JetsonAgxOrinSeries.html?highlight=gpio#porting-the-universal-serial-bus

Hi Wayne,
I still don’t understand where I went wrong? Can you explain it in more detail so that I can understand it?

我直接用中文解釋… 為什麼你的usb3-0跟usb3-1在共用同一個usb2? 你的device tree就是這樣寫的

The devkit use USB1+USBSS0 for hub

Why does the hub use USB1 and USBSS0 rather than USB1 and USBSS1? I also notice that the USBC recovery port is the inverse, with USB0 and USBSS1. Does NVIDIA have a specific reason for this choice?

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