CAN Communication Failed on Jetson Orin NX Developer Kit — BUS-OFF Despite Correct Configuration

  1. System Information

┌─────────────┬─────────────────────────────────────────────────┐
│ Item │ Detail │
├─────────────┼─────────────────────────────────────────────────┤
│ Device │ NVIDIA Jetson Orin NX Developer Kit (16GB) │
├─────────────┼─────────────────────────────────────────────────┤
│ P-Number │ p3767-0000 (Module), p3768-0000 (Carrier Board) │
├─────────────┼─────────────────────────────────────────────────┤
│ JetPack │ 5.1.4 │
├─────────────┼─────────────────────────────────────────────────┤
│ L4T │ 35.6.0 │
├─────────────┼─────────────────────────────────────────────────┤
│ Kernel │ Linux 5.10.216-tegra, aarch64 │
├─────────────┼─────────────────────────────────────────────────┤
│ OS │ Ubuntu 20.04 focal │
├─────────────┼─────────────────────────────────────────────────┤
│ Power Mode │ 10W (NV Power Mode 1) │
├─────────────┼─────────────────────────────────────────────────┤
│ can-utils │ 2018.02.0 │
├─────────────┼─────────────────────────────────────────────────┤
│ Jetson.GPIO │ 2.1.7 │
├─────────────┼─────────────────────────────────────────────────┤
│ Jetson-IO │ 35.6.0 │
└─────────────┴─────────────────────────────────────────────────┘

  1. Hardware Setup
  • CAN Transceiver: Built-in on the carrier board (connected via module pins 143 CAN_RX / 145 CAN_TX). CAN_H to CAN_L resistance = 60Ω (correct termination).
  • Target Device: DJI C620 ESC (1Mbps standard CAN, not CAN FD)
  • Wiring: CAN_H → C620 CAN_H, CAN_L → C620 CAN_L. ESC is powered on.
  1. CAN Pin Configuration

Per the Orin NX module datasheet (Table 12-9):

┌────────────┬───────────────┬───────────────────────┬───────────┐
│ Module Pin │ Module Signal │ SoC Signal │ Direction │
├────────────┼───────────────┼───────────────────────┼───────────┤
│ 143 │ CAN_RX │ GP17_CAN0_DOUT (PAA0) │ Input │
├────────────┼───────────────┼───────────────────────┼───────────┤
│ 145 │ CAN_TX │ GP18_CAN0_DIN (PAA1) │ Output │
└────────────┴───────────────┴───────────────────────┴───────────┘

The CAN0 controller (mttcan@c310000) is enabled in the device tree (status = “okay”). mttcan@c320000 (CAN1) is disabled.

  1. Steps Taken

4.1 Pinmux Configuration

Correct CAN pinmux registers identified and written via busybox devmem:

busybox devmem 0x0c303010 w 0xC400 # CAN0_DOUT (PAA0) → Module Pin 145
busybox devmem 0x0c303018 w 0xC458 # CAN0_DIN (PAA1) → Module Pin 143

Verified via jetson-io hardware readback:
can0_dout_paa0: func=can0, tristate=0, input_en=0
can0_din_paa1: func=can0, tristate=1, input_en=1

4.2 CAN Transceiver Control Pins

┌───────────────────┬──────────┬─────────────────────────────────────────────────────────┐
│ Pin │ Signal │ State │
├───────────────────┼──────────┼─────────────────────────────────────────────────────────┤
│ PAA.04 (gpio-320) │ CAN0_STB │ LOW (normal mode, confirmed via /sys/kernel/debug/gpio) │
├───────────────────┼──────────┼─────────────────────────────────────────────────────────┤
│ PAA.05 (gpio-321) │ CAN0_EN │ HIGH (enabled, driven by kernel) │
└───────────────────┴──────────┴─────────────────────────────────────────────────────────┘

4.3 Kernel Driver Loading

modprobe can
modprobe can_raw
modprobe mttcan

4.4 CAN Interface Configuration

ip link set can0 up type can bitrate 1000000 berr-reporting on

Also tried: 500000 bps

Interface state: UP, LOWER_UP, ERROR-ACTIVE, mtu 16, clock 50MHz.

4.5 What We Tested

┌─────────────────────────────────────────────────────────────────────────┬───────────────────────────────────────────┐
│ Test │ Result │
├─────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────┤
│ Software loopback (loopback on) │ PASS — send/receive works (controller OK) │
├─────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────┤
│ Hardware external loopback (CAN_H shorted to CAN_L on transceiver side) │ FAIL — BUS-OFF, no ACK │
├─────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────┤
│ Send frame to C620 (CAN ID 0x200) │ FAIL — BUS-OFF (tx counter 248, no rx) │
├─────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────┤
│ Listen-only mode (5 seconds passive monitoring) │ SILENT — C620 not transmitting │
├─────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────┤
│ 500 kbps bitrate │ Same BUS-OFF result │
├─────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────┤
│ 1 Mbps bitrate │ Same BUS-OFF result │
└─────────────────────────────────────────────────────────────────────────┴───────────────────────────────────────────┘

4.6 Pinctrl Verification

Kernel pinctrl confirms PAA0 (CAN0_DOUT) and PAA1 (CAN0_DIN) are the only SoC pads with can0 function:

function: can0, groups = [ can0_dout_paa0 can0_din_paa1 ]

  1. Problem Summary

After exhausting all software-level debugging:

  • CAN controller: Works (internal loopback passes)
  • Pinmux: Correctly set to CAN function (verified by jetson-io hardware readback and kernel pinctrl)
  • Transceiver control: STB=LOW, EN=HIGH
  • Driver: Loaded, interface UP at ERROR-ACTIVE state
  • Result: Any frame transmission immediately causes BUS-OFF (tx error counter → 248). No ACK from the bus. No traffic detected in listen-only mode.

The issue appears to be in the physical signal path between the SoC CAN controller and the CAN bus, possibly at the transceiver level or the module-to-transceiver PCB routing.

  1. Question

Is the CAN transceiver on the p3768 carrier board for the Orin NX Developer Kit enabled by default, or does it require additional GPIO/pinmux configuration beyond CAN0_DOUT/DIN and the STB/EN
pins? Are there any known issues or additional steps required to enable CAN on the Jetson Orin NX (JetPack 5.1.4) compared to the AGX Orin?

*** Please note that this reply is generated by LLM automatically ***

The CAN transceiver on the p3768 carrier board for the Orin NX Developer Kit is enabled by default, but it requires additional GPIO-pinmux configuration beyond CAN0DOUT/DIN and the STB/EN pins.

According to the provided information, the CAN transceiver is built-in on the carrier board and connected via module pins 143 (CANRX) and 145 (CANTX). The CANH to CANL resistance is 60 ohms, which is correct for termination.

However, the problem summary suggests that there is an issue with the physical signal path between the SoC CAN controller and the CAN bus, possibly at the transceiver level or the module-to-transceiver PCB routing.

To enable CAN on the Jetson Orin NX, the following steps are required:

  1. Pinmux configuration: The CAN pinmux registers need to be correctly configured. In this case, the correct CAN pinmux registers were identified and written via busybox devmem.
  2. CAN transceiver control pins: The CAN transceiver control pins (PAA0 and PAA1) need to be correctly configured. In this case, PAA0 (CAN0STB) is LOW (normal mode) and PAA1 (CAN0EN) is HIGH (enabled).
  3. Kernel driver loading: The CAN kernel driver needs to be loaded. In this case, the CAN kernel driver was loaded using modprobe.
  4. CAN interface configuration: The CAN interface needs to be configured. In this case, the CAN interface was configured using ip link set can0 up type can bitrate 1000000.

Compared to the AGX Orin, the Orin NX requires the same steps to enable CAN. However, the Orin NX has a different carrier board (p3768) and module (p3767-0000) compared to the AGX Orin (p3730-0000 and p3701-0000).

In terms of known issues, there are no specific known issues mentioned in the provided information that are related to enabling CAN on the Jetson Orin NX. However, the problem summary suggests that there may be an issue with the physical signal path between the SoC CAN controller and the CAN bus.

In summary, to enable CAN on the Jetson Orin NX, the correct pinmux configuration, CAN transceiver control pins, kernel driver loading, and CAN interface configuration are required. Additionally, the physical signal path between the SoC CAN controller and the CAN bus needs to be verified to ensure correct operation.

*** Please give the thumbs up if you get answers you like. Or provide feedback to help us improve the answer. ***

Hi wjr1,

As you are using the devkit for Orin NX, could you also verify with the latest Jetpack 5.1.6 (r35.6.4) and check if there’s the similar issue?

It is not the expected connection to me.
Please connect CAN_H to CAN_H and CAN_L to CAN_L to prevent the bus off issue.