Configuring JetPack with oem-config on custom headless carrier board

Hi,

we have designed a custom carrier board a while ago and are having problems with the headless setup via oem-config using the usb port. On the development board of the Jetson Xavier NX there is a USB micro-B connector, which we almost copied to our schematic. We replaced the port with a USB-C Port on our custom carrier PCB. When the Jetson boots the first time in its development board and we connect and USB Cable, we gat a virtual serial console to configure the Jetson. This is what we want. On our custom board, we also use the SD-Card image for the development module and flash it on a Jetson Xavier NX with SD-Card. When we power the exact same Jetson in our custom carrier board, it does not show up any USB devices, also no L4T-Readme. After we configured the Jetson in its development board and then swap it in our custom carrier board, the USB-Port is working fine.

We know that Jetsons with SD-Card are only for development, but this is a development build.

We have wired the VBUS Pin of our USB-C Port the wrong way and to fix this in the moment, we have connected it to ground the whole time. Can this be the problem? If so why is it working the rest of the time, so on later boots?

We also have no I2C EPPROM connected to the Jetson, as on the Development Module. Can this be the problem?

We are making a Rev.2 on our board, so we want to fix all issues that we have.

Greetings,
Fabio

Honestly, I have no idea what you are talking about.

  1. You already knew that you are using the wrong module. Then please stop using that and move to emmc module.

  2. What do you mean “After we configured the Jetson in its development board and then swap it in our custom carrier board, the USB-Port is working fine.”? What does that mean? What did you configure in the devkit?

  3. Why are you talking about “SPI eeprom” here? We have i2c eeprom and QSPI-NOR flash. But these things are all inside the module. They are not in a scope of customization.

Thank you for your response.

  1. We are a small robotics club participating in competitions with soccer playing robots. We only have a handful of Jetsons and certainly don’t have the money to swap them out with emmc modules. Also the SD-Card modules are handier for us, because in the case of a fail, we can easily swap the SD-Card. If we had the money, we would maybe swap them to emmc.

  2. We firstly load this SD-Card image onto an SD-Card. Then we put that SD-Card in a Jetson development Kit, connect an usb cable to its micro-B connector and give it power. On our Host computer, we get a serial console, which start oem-config, as seen in this article: https://www.jetsonhacks.com/2019/08/21/jetson-nano-headless-setup/ It lets us configure the time zones, hostname, user name, default network interface, etc. This is documented here: https://docs.nvidia.com/jetson/l4t/Tegra%20Linux%20Driver%20Package%20Development%20Guide/flashing.html#wwpID0E02C0HA

  3. Sorry I had in mind that it was a SPI eeprom, but it is I2C. I edited the question.

I hope that this clarified my question. If not, please let me know.
Thanks,
Fabio

The “sdcard is for development” comment is actually for those userspace programming but not for the hardware design. For example, you want to test the tensorRT or CUDA, then you can use the sdcard module and it shall give equal result as emmc module. However, when it is related to changing the board, it is not guaranteed.

The product design guide we write is only for emmc module.

What kind of usb is able to work now on your custom board after you configure the user account? All host mode usb ports or even the usb device mode can work now?

After I configure the user account, every USB, including host mode and device mode is working fine.

But in the initial setup on my custom carrier board, the device mode port is not functioning.

You can check whether the host side is able to see the tegra as usb device at that moment first. Remove the quiet keyword inside extlinux.conf and check the uart log for usb kernel log.

1 Like

The host (a Mac) is not detecting the Jetson, according to lsusb.

If I understand the uart log from the Jetson right, it enabled the usbserial but is not detecting my Mac.
Here are the important parts of the uart log:

cat uart.log | grep -B 2 -A 2 "usb"                            
[0002.125] I> boot-dev-order :-
[0002.128] I> 1.sd
[0002.130] I> 2.usb
[0002.132] I> 3.nvme
[0002.134] I> 4.emmc
--
--
[0011.272] I> Active slot suffix:
[0011.275] I> add_boot_slot_suffix: slot_suffix =
[0011.280] I> Linux Cmdline: console=ttyTCU0,115200 video=tegrafb earlycon=tegra_comb_uart,mmio32,0x0c168000 gpt rootfs.slot_suffix= tegra_fbmem=0x800000@0xa06a9000 lut_mem=0x2008@0xa06a4000 usbcore.old_scheme_first=1 tegraid=19.1.2.0.0 maxcpus=6 boot.slot_suffix= boot.ratchetvalues=0.4.2 vpr_resize sdhci_tegra.en_boot_part_access=1
[0011.309] I> Updated bootarg info to DTB
[0011.313] W> MAC addr invalid!
--
--
[    0.000000] Speculative Store Bypass Disable mitigation not required
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 1999365
[    0.000000] Kernel command line: console=ttyTCU0,115200 video=tegrafb earlycon=tegra_comb_uart,mmio32,0x0c168000 gpt rootfs.slot_suffix= tegra_fbmem=0x800000@0xa06a9000 lut_mem=0x2008@0xa06a4000 usbcore.old_scheme_first=1 tegraid=19.1.2.0.0 maxcpus=6 boot.slot_suffix= boot.ratchetvalues=0.4.2 vpr_resize sdhci_tegra.en_boot_part_access=1    root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyTCU0,115200n8 console=tty0 fbcon=map:0 net.ifnames=0
[    0.000000] log_buf_len individual max cpu contribution: 32768 bytes
[    0.000000] log_buf_len total cpu_extra contributions: 163840 bytes
--
--
[    0.000000] Speculative Store Bypass Disable mitigation not required
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 1999365
[    0.000000] Kernel command line: console=ttyTCU0,115200 video=tegrafb earlycon=tegra_comb_uart,mmio32,0x0c168000 gpt rootfs.slot_suffix= tegra_fbmem=0x800000@0xa06a9000 lut_mem=0x2008@0xa06a4000 usbcore.old_scheme_first=1 tegraid=19.1.2.0.0 maxcpus=6 boot.slot_suffix= boot.ratchetvalues=0.4.2 vpr_resize sdhci_tegra.en_boot_part_access=1    root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyTCU0,115200n8 console=tty0 fbcon=map:0 net.ifnames=0
[    0.000000] log_buf_len individual max cpu contribution: 32768 bytes
[    0.000000] log_buf_len total cpu_extra contributions: 163840 bytes
--
--
[    0.874946] eventlib_kernel: keventlib is initialized, test id: 0
[    0.875355] SCSI subsystem initialized
[    0.875840] usbcore: registered new interface driver usbfs
[    0.875929] usbcore: registered new interface driver hub
[    0.876008] usbcore: registered new device driver usb
[    0.887022] tegra-i2c 31e0000.i2c: could not find pctldev for node /host1x/dpaux@155F0000/pinmux@0, deferring probe
[    0.889761] max77620 4-003c: PMIC Version OTP:0x51 and ES:0x1
--
--
[    0.965498] vddio-emmc-3v3: at 3300 mV
[    0.966849] spmic-ldo4: at 1587 mV
[    0.974231] vdd-usb-3v3: at 3300 mV
[    0.982271] vddio-sdmmc1-3v3: at 3300 mV
[    0.986294] vdd-csi-1v2: at 1200 mV
--
--
[    4.553535] PPP MPPE Compression module registered
[    4.553634] NET: Registered protocol family 24
[    4.553793] usbcore: registered new interface driver r8152
[    4.553954] usbcore: registered new interface driver asix
[    4.554154] usbcore: registered new interface driver ax88179_178a
[    4.554334] usbcore: registered new interface driver cdc_ether
[    4.554572] usbcore: registered new interface driver net1080
[    4.554778] usbcore: registered new interface driver cdc_subset
[    4.555026] usbcore: registered new interface driver zaurus
[    4.555254] usbcore: registered new interface driver cdc_ncm
[    4.555607] VFIO - User Level meta-driver version: 0.3
[    4.556747] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
--
--
[    4.571775] ohci-pci: OHCI PCI platform driver
[    4.576271] ohci-platform: OHCI generic platform driver
[    4.585867] tegra-xusb 3610000.xhci: USB2 port 0 has OTG_CAP
[    4.588598] tegra-xusb 3610000.xhci: extcon 0: ffffffc1f4da6800 id
[    4.593907] usbcore: registered new interface driver uas
[    4.598314] tegra-xusb 3610000.xhci: Firmware timestamp: 2020-09-11 16:55:03 UTC, Version: 60.09 release
[    4.598349] tegra-xusb 3610000.xhci: xHCI Host Controller
[    4.598368] tegra-xusb 3610000.xhci: new USB bus registered, assigned bus number 1
[    4.599066] tegra-xusb 3610000.xhci: hcc params 0x0184ff25 hci version 0x110 quirks 0x00050810
[    4.599128] tegra-xusb 3610000.xhci: irq 464, io mem 0x03610000
[    4.599342] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
[    4.599349] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    4.599354] usb usb1: Product: xHCI Host Controller
[    4.599359] usb usb1: Manufacturer: Linux 4.9.253-tegra xhci-hcd
[    4.599364] usb usb1: SerialNumber: 3610000.xhci
[    4.608380] hub 1-0:1.0: USB hub found
[    4.608431] hub 1-0:1.0: 4 ports detected
--
--
[    4.608380] hub 1-0:1.0: USB hub found
[    4.608431] hub 1-0:1.0: 4 ports detected
[    4.609005] tegra-xusb 3610000.xhci: xHCI Host Controller
[    4.609016] tegra-xusb 3610000.xhci: new USB bus registered, assigned bus number 2
[    4.609025] tegra-xusb 3610000.xhci: Host supports USB 3.1 Enhanced SuperSpeed
[    4.609297] usb usb2: New USB device found, idVendor=1d6b, idProduct=0003
[    4.609304] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    4.609309] usb usb2: Product: xHCI Host Controller
[    4.609314] usb usb2: Manufacturer: Linux 4.9.253-tegra xhci-hcd
[    4.609319] usb usb2: SerialNumber: 3610000.xhci
[    4.613435] hub 2-0:1.0: USB hub found
[    4.613487] hub 2-0:1.0: 4 ports detected
--
--
[    4.649763] Wake81 for irq=199
[    4.649765] Wake82 for irq=199
[    4.649807] tegra-xusb 3610000.xhci: Upgrade port 0 to USB3.0
[    4.649814] tegra-xusb 3610000.xhci: Upgrade port 1 to USB3.0
[    4.731314] usb usb2: usb_suspend_both: status 0
[    4.769081] usbcore: registered new interface driver usb-storage
[    4.775035] usbcore: registered new interface driver usbserial
[    4.783323] tegra-xudc-new 3550000.xudc: PMQOS CPU boost enabled
[    4.786990] tegra-xudc-new 3550000.xudc: device count: 1
--
--
[    4.807742] tegra-xudc-new 3550000.xudc: Initialize boost_cpufreq work
[    4.814763] mousedev: PS/2 mouse device common for all mice
[    4.819568] usbcore: registered new interface driver xpad
[    4.950582] usb 1-3: new full-speed USB device number 2 using tegra-xusb
[    4.951465] max77686-rtc max77620-rtc: rtc core: registered max77620-rtc as rtc0
[    4.953180] Wake73 for irq=42
--
-- ### This is an FTDI chip connect by us
[    4.958244] i2c-mux-gpio cam_i2cmux: 2 port mux on 3180000.i2c adapter
[    4.959008] imx219 9-0010: tegracam sensor driver:imx219_v2.0.6
[    4.973358] usb 1-3: New USB device found, idVendor=0403, idProduct=6010
[    4.973499] usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[    4.973634] usb 1-3: Product: Dual RS232
[    4.973719] usb 1-3: Manufacturer: FTDI
[    4.983726] imx219 10-0010: tegracam sensor driver:imx219_v2.0.6
[    5.007135] tegra-i2c 3180000.i2c: no acknowledge from address 0x10
--
--
[   14.234783] tegra-se-elp 3ad0000.se_elp: tegra_se_elp_probe: complete
[   14.234927] hidraw: raw HID events driver (C) Jiri Kosina
[   14.237521] usbcore: registered new interface driver usbhid
[   14.237524] usbhid: USB HID core driver
[   14.242608] tegra186-cam-rtcpu bc00000.rtcpu: deferring, 14800000.isp is not probed
[   14.243708] tegra_aon c1a0000.aon: tegra aon driver probe OK
--
--
[   14.254117] trusty-virtio trusty:virtio: initializing done
[   14.254369] trusty_ipc virtio0: is online
[   14.254905] usbcore: registered new interface driver snd-usb-audio
[   14.256013] tegra-hda 3510000.hda: Override SDO lines to 4
[   14.275836] input: tegra-hda-xnx HDMI/DP,pcm=3 as /devices/3510000.hda/sound/card0/input0
--
-- ### This is the wifi/bleutooth card that cam with the Jetson Devkit
[   14.682952] OF: PCI:   MEM 0x1f40000000..0x1fffffffff -> 0x40000000
[   14.682956] OF: PCI:   MEM 0x1c00000000..0x1f3fffffff -> 0x1c00000000
[   14.730572] usb 1-2: new full-speed USB device number 3 using tegra-xusb
[   14.751855] usb 1-2: New USB device found, idVendor=13d3, idProduct=3549
[   14.751859] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[   14.751862] usb 1-2: Product: Bluetooth Radio
[   14.751864] usb 1-2: Manufacturer: Realtek
[   14.751867] usb 1-2: SerialNumber: 00e04c000001
[   14.900624] hpd: state 0 (Reset), hpd 0, pending_hpd_evt 0
[   14.905957] tegradc 15210000.nvdisplay: blank - powerdown

Here is the full log:
uart.log (95.3 KB)

Do you have any idea how we can investigate the issue further?

Thank you very much,
Fabio

Can you compare the dmesg between the working case and NG case?

There is a userspace service to configure the usb device as a ncm and acm device. This has to be enabled first to make oem-config work.

opt/nvidia/l4t-usb-device-mode/nv-l4t-usb-device-mode.service

Do you mean the UART log because on the custom carrier I am not able to get as far as to log into a shell and run dmesg?

Yes, use the uart log to replace dmesg here. Only need to check the kernel part.

Can I do this by modifying some files on the SD-Card before booting as I don’t have access to systemctl, as I can’t launch a shell on the custom carrier.

Seriously, you should quit using sdcard image and learn to use the L4T driver package directly, if you really want to develop a product.

Can I skip oem-config with this method?
You won’t be happy about the next question, but am I able to get this method to work with my Jetsons with SD-Card?
Is this the method that is using SDK-Manager?
Can I already install some APT packages on that custom image?

You can skip the oem-config by referring to this document.

https://docs.nvidia.com/jetson/l4t/index.html#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide/flashing.html

All the tools are in the L4T driver package. Official sdcard image is just for some users who don’t want to get involved to those boot, hardware design issue.

You sounds like a total newbie here so read the document first. Even forget about your custom board. Try all the things on devkit first.