- 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 │
└─────────────┴─────────────────────────────────────────────────┘
- 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.
- 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.
- 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 ]
- 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.
- 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?