JetPack DP 6.0 CAN Bus Not Working

Hello,
I am looking for assistance to get CAN bus working on a Jetson AGX Orin developer kit, running the JetPack 6.0 DP.

I have already successfully gotten CAN working on a Raspberry Pi 4, and an amd64 laptop, using a USB to CAN adapter (UCAN). I am using this same adapter with the Jetson.

I’ve read through a few forum posts and have done testing for a few hours, and I think the mttcan module may not configured properly in some way.

These are the commands I use to test CAN.
sudo ip link set can0 up type can bitrate 1000000
candump can0 -xct z -n 10

  • When I run the candump command, nothing is received.
  • ifconfig -a, the can0 interface shows UP, RUNNING
  • When I run a CAN loopback, sending and receiving messages works.
  • When I run ip --details link show can0, the error state shows ERRORS-ACTIVE.
  • sudo dmesg does not show errors.
  • lsmod shows mttcan, can-dev, can-raw, and can, loaded in.
  • Something I noticed is that when I go to /proc/device-tree/, mttcan@31000 and mttcan@32000 does not show up.
  • When decompiling the device tree dtb file from Linux_for_Tegra/kernel/dtb/tegra234-p3737-0000+p3701-0000.dtb, I did not see any mttcan declarations within this file.
  • When looking at the bootloader/generic/BCT/tegra234-mb1-bct-pinmux-p3701-0000-a04.dtsi file, I think this may be configured incorrectly as the CAN din and dout declarations use “rsvd1” instead of “can0” which I saw in the sample config file in the forum post #1. I then used the pin configuration excel spreadsheet to configure input and output, and manually replaced the old declarations with the new ones. I then flashed the Jetson with the ./flash.sh file, but this did not seem to fix the issue with CAN.
  • My next steps will be to fully replace the contents of the pinmux file with that of the file in forum post #1 and then test with a newly created file from the excel pinmux generator.

References:
Post #1. Mttcan does not work on Orin Jetpack 6.0 dp
Post #2. Controller Area Network (CAN) — Jetson Linux Developer Guide documentation?

Hi supernova1114,

Do you using cansend/cangen command to send can packet after you run candump in background?

Are you testing with internal loopback test? Or you sent can packet from can0 to can1?

If you are using the devkit, please just use Jetson-IO to enable/configure the pinmux for can0/can1 usage.

Please share the block diagram of your connections for further check.
Do you use CAN transceiver in your setup?

Thank you for the quick response by the way.
I ended up going the CAN transceiver route due to time constraints.

Here are answers to your previous questions:

Do you using cansend/cangen command to send can packet after you run candump in background?
Are you testing with internal loopback test? Or you sent can packet from can0 to can1?

I successfully had used cansend and cangen to receive with candump, but this was over an internal loopback test.

Please share the block diagram of your connections for further check.

Jetson AGX Orin DevKit > USB to CAN adapter (USB in, terminal block CAN line out) > CAN line > ODrive S1 motor controller. Nothing is connected to the Jetson pin headers.

Another note is that the CAN to USB adapter automatically creates a can0 interface when plugged into a Pi or PC, so this may be what is conflicting, as the Jetson already has can0 and can1 interfaces created for the pin header.

I renamed the default can0 interface to can2, and when plugging in the USB to CAN adapter, can0 was not created by the adapter.


I ended up going with a CAN tranceiver (Adafruit CAN Pal Tranceiver) using the Jetson pin header rather than the USB to CAN adapter, and have CAN bus working fine now.

If anyone is still interested in pursuing the issue, here is the product link to what I was originally using:

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