Connecting MCP2515 to Jetson Orin Nano

Hi everyone,

I’m trying to connect an MCP2515 CAN controller to my Jetson Orin Nano and have hit a bit of a roadblock. I found a setup guide that works for the Jetson Nano ( [Jetson nano and mcp2515 can module - #289 by michael.sanne ],
but since the hardware on the Jetson Orin Nano is different, I wasn’t able to get it working the same way.

I’ve tried modifying the Device Tree Overlay (DTO) as suggested in other forums, but it hasn’t solved the issue for the Orin Nano.

Has anyone successfully set up the MCP2515 on the Orin Nano, or have advice on what else I could try? Any help or pointers to Orin Nano-specific resources would be amazing!

Thanks in advance!

Hi narek460608,

Are you using the devkit or custom board for Orin Nano?
What’s your Jetpack version in use?

We’ve verified this module on the devkit.
Please refer to Jetson/L4T/peripheral/ - eLinux.org for the detailed steps.

HI Kevin,

I’m using devkit,
Jetpack version is - ‘nvidia-l4t-core 36.3.0-20240719161631’,

But I can’t find the necessary Device Tree source files, such as tegra234-p3768-0000-a0.dtsi or entries like spi@3210000 in any of the expected directories.

Have you referred to Kernel Customization — NVIDIA Jetson Linux Developer Guide 1 documentation to download and rebuild kernel image?

For JP6.x(R36.x), please modify tegra234-p3768-0000+p3767-xxxx-nv-common.dtsi instead of tegra234-p3768-0000-a0.dtsi to configure the device tree.

Thank you Kevin,
I’ve set up my Jetson Orin Nano again, now running JetPack 6.1 (L4T 36.4). I found the .dtsi file and modified it on my host computer as recommended. However, I’m running into an issue: when I try to transfer it by flashing the image, my Jetson Orin Nano crashes and can’t boot.

Any advice on how to safely transfer the image file or troubleshoot this boot issue would be greatly appreciated!

Or maybe I can miss any step

This is ridiculous. Nvidia is now requiring to rebuild the kernel, for something which worked in Jetpack 5, and was removed in Jetpack 6 for no reason.

And here (Jetson/L4T/peripheral/ - eLinux.org) is no documentation about how to connect the MCP2515 to the Jetson Orin Nano. It only covers other modules that have CAN1 and CAN2. The Jetson Orin Nano only has CAN0. How should I do it? How can I connect the MCP2515, using SPI pins and write code to read and write from SPI? or from CAN? I can’t understand; the link only verifies slave mode for the Jetson Orin Nano. What information can I provide to get your help? I also downloaded and rebuilt the kernel image, but I’m not sure what I need to do because there’s nothing specific about the Jetson Orin Nano.

Please know that we align the upstream from JP6 for Bring Your Own Kernel feature.
And please note that MCP2515 is a 3rd-party module for us.
We can not verify each modules in the markets.

Have you referred to that link carefully?
p3768 is the devkit board for Orin Nano.
MCP2515 Verification has been verified on both JP5 and JP6.
Please refer to it step by step.
This topic is about MCP2515 so that please focus on using this module on Orin Nano.

Thank you for all the helpful information you’ve provided. After rebuilding the kernel and making the necessary changes to the file you mentioned, I successfully loaded the new Device Tree Blob (DTB) on my Jetson Orin Nano. As a result, can1 is now enabled and I can work with it.

I also followed the instructions from the link to connect my MCP2515 to the Jetson Orin Nano, and I double-checked the wiring connections to ensure they are correct.

However, after running the following commands:

$ sudo ip link set can1 up type can bitrate 500000
$ sudo ip link set can2 up type can bitrate 500000
$ candump -x any  # In one terminal
$ cangen can1      # In another terminal

I get the following output in the candump terminal:

can1  RX - -  000    [0]
can1  RX - -  000    [0]

This output only appears once, and after that, no further data is captured. Even after rebooting the Jetson Orin Nano, the behavior persists—no more data shows up in candump, and I can’t reproduce the output again.

I’ve also tried connecting 120-ohm terminating resistors, but the result remains the same.

In addition, I loaded the relevant kernel modules:

$ sudo modprobe can
$ sudo modprobe can_raw
$ sudo modprobe mttcan
$ sudo modprobe mcp251x

However, despite all my attempts, the issue persists. I continue to see the same behavior: only one instance of the data in candump, and no additional output, no matter how many times I run cangen or cansend.

Thank you in advance for your help!