ACM Device

I am trying to connect the Xavier Development Kit to a DJI M300 via the Advanced Sensing Port (USB-A → USB-A) which should create a new /dev/ttyACM0 device. However I am finding the Xavier does not.

Observing dmesg I do see the device connects and the RNDIS device is created and begins communicating but the ACM device is never created. Does the Xavier support ACM devices?

I should note that the M300 works just fine when connected to a TX2.

ACM devices work if you have the driver. What do you see from this?
zcat /proc/config.gz | grep 'USB_ACM'
(I am assuming a USB device)

If it is “=y” or “=m”, then the driver is present. If not, then the driver can be added. It isn’t really the NX which does or does not support this, it is the Linux o/s…and especially on embedded systems you can’t expect all drivers to be present (e.g., if there is a driver for an AMD desktop graphics card it would serve no purpose to have the driver, it just takes up space).

Often a UART with drivers present will fail if the speed and other settings are not correct. For example, if the UART defaults to 9600 baud, then a default of 115200 baud will fail, but it won’t be a hardware or driver failure.

How did you go with this problem? @nzac
I’ve come across a similar situation and it seems there aren’t any solutions to the Xavier NX/M300 combination as of yet.

Here’s another thread on the same situation if you’re interested:

1 Like

We have not been able to get this to work yet and it seems related to the Xavier not M300 because the M300 works fine with the TX2.

@linuxdev I don’t have the Xavier in front of me right now, but when I checked that it was indeed enabled.

If any part of the UART works at least part of the time, then probably the UART driver is itself working. You mentioned RNDIS, which is a network protocol, and so I am thinking perhaps this is a networking setup issue and not a UART issue. For example, security can get in the way.

If you use the device with a working case, e.g., you mention the TX2, does a network device show up under ifconfig which is specific to the M300?

Hi @linuxdev, thanks for your thoughts.

We were able to get the ACM0 device to appear when flashing the Xavier with Balena which narrows the problem down to Jetpack and removes the M300 is the culprit (at least in my estimation).

I don’t have the Xavier in front of me again, however it doesn’t seem to make sense that network is the issue if dmesg doesn’t even report the USB device as plugged in. UART works great and we get a USB0 device when we connect the drones UART via USB-A.

I just ran a successful test with the TX2 and M300 to answer your question. I also have a Xavier if you can think of any other tests that might be useful.

No new network devices show up with ifconfig, however, I do get a red message in dmesg:
serial-tegra c280000.serial: configured rate out of supported range by -0.29 %

It might be worth noting, I am not using the ‘advanced sensing port’ as mentioned above, but rather another DJI adapter board. I have two connections:

  1. Ethernet (adapter board) → Ethernet
  2. UART (adapter board) → UART [J17]

What speed is the serial UART running at? Above 115200 two stop bits need to be used. The clock is not able to be set at an exact rate of the higher speeds and the two stop bits improve the amount the clock can be off by and still work.

460800, but only 1 stop bit. This is specified in the DJI documentation:

“To communicate with the payload and DJI drone, please use the following parameters for the Serial Port.”

UART Details:

  • Baud Rate: 460800
  • Stop Bits: 1
  • Data Bits: 8
  • Parity: None

This solution is unrelated to the ACM Device, but for those looking to use a Xavier NX with the M300 through an X-Port, I got it working by:

  1. Flashing a SD card with the latest Jetpack (4.4.1)
  2. Using /dev/ttyTHS0

I was previously using Jetpack (4.4.0), and had tried ttyUSB0 and ttyTHS2 [J14], but neither worked.

@paul_dev are you saying you were able to get Advanced Sensing to work with an THS0 device? I understood the X Port’s were for the payload SDK and not the OSDK.

Sorry for the confusion, I am not using Advanced Sensing or the OSDK.
You are correct, I am using the X-Port with the PSDK.