Multiple Usb connections problem



I’m working on a project using a Jetson Xavier AGX (Jetpack 4.6.4) which requires some usb devices connected to it, like a stereo camera Zed2, a GPS, 3 Arduino and a WiFi 4G dongle usb.
I use ROS1 as middleware to collect data from these devices.

Every device is a ROS1 node, which runs immediately (through a systemd service) on startup and it looks like it’s working.

I’ve attached the Arduino and the GPS to the Xavier through a 4 ports dongle and the Zed is connected to the eSATA-usb port.

However, when I attach a new usb device (logitech F710 gamepad), it appears that the Xavier is not able to manage the new device; sometimes it detach the GPS (or the Zed) to let the joystick works.

I’ve already bought a PCIe but it seems useless.

Dmesg output:

[33.910844] tegra-i2c 3190000.i2c: pio timed out addr: 0x55 tlen:16 rlen:0
[   33.910990] tegra-i2c 3190000.i2c: --- register dump for debugging ----
[   33.911127] tegra-i2c 3190000.i2c: I2C_CNFG - 0x22c00
[   33.911213] tegra-i2c 3190000.i2c: I2C_PACKET_TRANSFER_STATUS - 0x10001
[   33.911320] tegra-i2c 3190000.i2c: I2C_FIFO_CONTROL - 0x0
[   33.911408] tegra-i2c 3190000.i2c: I2C_FIFO_STATUS - 0x800080
[   33.911498] tegra-i2c 3190000.i2c: I2C_MST_FIFO_CONTROL - 0x70000
[   33.911600] tegra-i2c 3190000.i2c: I2C_MST_FIFO_STATUS - 0x7f0000
[   33.911713] tegra-i2c 3190000.i2c: I2C_MST_PACKET_TRANSFER_CNT - 0x0
[   33.911823] tegra-i2c 3190000.i2c: I2C_INT_MASK - 0x7c
[   33.911907] tegra-i2c 3190000.i2c: I2C_INT_STATUS - 0x2
[   33.911993] tegra-i2c 3190000.i2c: i2c transfer timed out addr: 0x55

Do you have any suggestions?

You can reduce the number of USB devices. The arduinos use serial ports for communication. Many Arduino boards have USB-Serial onboard, but ultimately it’s serial. GPS uses also a serial connection. There are GPS modules with internal USB-Serial converters, but ultimately it is only an ASCII data stream over serial.

The solution is to use an FTDI FT4232H based USB-to-4-serial adapter. This is only a single USB device, but with four ports. GPS and arduinos connect to the four serial ports. You may need to use different Arduinos and GPS module with TTL serial interface, though. With this change you only have one USB device instead of four (or 5 including the hub).

This ist the usb-serial chip. I’ve used it with Jetson systems, and it works just fine.

This is a breakout board with that chip.

This is a cable with 4 RS232 ports with that chip

Thanks for your answer, if I use the usb-to-rs232 cable, is the Xavier able to identify the devices with a udev rule?

If I understood, I should buy 4 rs232-to-usb interfaces to connect them properly with the Arduino, the Zed and the GPS, right?

I read on this forum that a PCIe should resolve the problem, why it didn’t work?

No. Wrong. 1 Interface with 1 USB port and 4 RS232 ports.

udev ruleset:

SUBSYSTEMS=="usb", ENV{.LOCAL_ifNum}="$attr{bInterfaceNumber}"
KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", SUBSYSTEMS=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6011", ENV{.LOCAL_ifNum}=="00", MODE="0666", SYMLINK+="tty4FTDI-0"
KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", SUBSYSTEMS=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6011", ENV{.LOCAL_ifNum}=="01", MODE="0666", SYMLINK+="tty4FTDI-1"
KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", SUBSYSTEMS=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6011", ENV{.LOCAL_ifNum}=="02", MODE="0666", SYMLINK+="tty4FTDI-2"
KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", SUBSYSTEMS=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6011", ENV{.LOCAL_ifNum}=="03", MODE="0666", SYMLINK+="tty4FTDI-3"

Ok, thanks, I will try it.

What about the PCIe?

For what?

Wifi: use it if you have a free M.2 Key E slot for this.
LTE 4G: The NVidia Devkit does not have an M.2 Key B slot, so a M.2 LTE modem won’t fit. Besides: most LTE modems are USB devices, even the M.2 cards.

I wanted to ask if you know why the PCIe doesn’t resolve the problem, as suggested here

I don’t know.