Hello,
We are using the CANBUS on Orin NX, where the mttcan module is loaded for its operation. This system operates seamlessly on an error-free network, and has been tested successfully on a network with another Orin NX.
However, we have encountered an issue when there are errors introduced either by a third-party device or by inadequate network cabling. These errors persist on the MTTCAN even after the CAN BUS cables have been entirely disconnected from the Orin NX.
We have observed these errors manifesting in two distinct scenarios:
- When the command
watch -d -n 0.1 ip -d -s link show
is used, it does not show any updates on statistics even whencangen can1
is running. - The system detects a “Stuff Error”. This type of error is typically reported after a real issue occurs on the CAN, but it persists even when the cables are completely disconnected.
In summary, we are experiencing persistent errors on the MTTCAN due to faulty network conditions or third-party device interference. These errors continue to affect our CANBUS operation on Orin NX, despite the total disconnection of the CAN BUS cables. The errors exhibit as unresponsive updates in link show statistics and persistent “Stuff Errors”. We are seeking solutions or suggestions to rectify these issues.
EDIT1:
EDIT2:
output of
dtc -I fs /sys/firmware/devicetree/base 2&>/dev/null | grep -C 10 mtt
gpios = <0x05 0x30 0x01>;
};
};
spe-pmu {
interrupts = <0x01 0x05 0x04>;
compatible = "arm,statistical-profiling-extension-v1";
status = "disabled";
};
mttcan@c310000 {
bittimes = <0x7d 0x00 0x0f 0x13 0x03 0x00 0x03 0xfa 0x00 0x00 0xae 0x17 0x00 0x01 0xfa 0x00 0x07 0x13 0x03 0x00 0x02 0x1f4 0x00 0x03 0x13 0x03 0x00 0x03 0x3e8 0x00 0x01 0x10 0x06 0x00 0x03 0x7d0 0x00 0x00 0x10 0x06 0x00 0x02>;
rx-config = <0x40 0x40 0x40>;
tx-config = <0x00 0x10 0x00 0x40>;
clock-names = "can_core\0can_host\0can\0pllaon";
reg-names = "can-regs\0glue-regs\0msg-ram";
resets = <0x02 0x04>;
interrupts = <0x00 0x28 0x04>;
clocks = <0x02 0x11c 0x02 0x0a 0x02 0x09 0x02 0x5e>;
mram-params = <0x00 0x10 0x10 0x20 0x00 0x00 0x10 0x10 0x10>;
compatible = "nvidia,tegra194-mttcan";
status = "okay";
reg = <0x00 0xc310000 0x00 0x144 0x00 0xc311000 0x00 0x32 0x00 0xc312000 0x00 0x1000>;
phandle = <0x110>;
reset-names = "can";
pll_source = "pllaon";
bitrates = <0x1f4 0x7d0>;
};
dce@d800000 {
iommus = <0x06 0x08>;
--
nvidia,sku = "699-13767-0000-300 G.3\0\0\0\0\0\0\0\0";
linux,uefi-system-table = <0x04 0x645c0018>;
};
mods_test {
compatible = "nvidia,mods_test";
status = "disabled";
phandle = <0x166>;
};
mttcan@c320000 {
bittimes = <0x7d 0x00 0x0f 0x13 0x03 0x00 0x03 0xfa 0x00 0x00 0xae 0x17 0x00 0x01 0xfa 0x00 0x07 0x13 0x03 0x00 0x02 0x1f4 0x00 0x03 0x13 0x03 0x00 0x03 0x3e8 0x00 0x01 0x10 0x06 0x00 0x03 0x7d0 0x00 0x00 0x10 0x06 0x00 0x02>;
rx-config = <0x40 0x40 0x40>;
tx-config = <0x00 0x10 0x00 0x40>;
clock-names = "can_core\0can_host\0can\0pllaon";
reg-names = "can-regs\0glue-regs\0msg-ram";
resets = <0x02 0x05>;
interrupts = <0x00 0x2a 0x04>;
clocks = <0x02 0x11d 0x02 0x0c 0x02 0x0b 0x02 0x5e>;
mram-params = <0x00 0x10 0x10 0x20 0x00 0x00 0x10 0x10 0x10>;
compatible = "nvidia,tegra194-mttcan";
status = "disabled";
reg = <0x00 0xc320000 0x00 0x144 0x00 0xc321000 0x00 0x32 0x00 0xc322000 0x00 0x1000>;
phandle = <0x111>;
reset-names = "can";
pll_source = "pllaon";
bitrates = <0x1f4 0x7d0>;
};
l2-cache20 {
cache-size = <0x40000>;
--
tegra_spkprot = "/aconnect@2a41000/ahub/spkprot@2908c00";
tegra_asrc = "/aconnect@2a41000/ahub/asrc@2910000";
funnel_ccplex1_out_port0 = "/funnel_ccplex1@26040000/out-ports/port@0/endpoint";
cv2_hot_surface = "/thermal-zones/CV2-therm/trips/cv2-hot-surface";
tegra_i2s1 = "/aconnect@2a41000/ahub/i2s@2901000";
sdmmc1_1v8 = "/pmc@c360000/sdmmc1-1v8";
tegra_agic_1 = "/aconnect@2a41000/agic-controller@2a51000";
tegra_xhci_vf3 = "/xhci@3710000";
nvdla1 = "/host1x@13e00000/nvdla1@158c0000";
tegra_pwm7 = "/pwm@32e0000";
mttcan1 = "/mttcan@c320000";
pex_rst_c5_in_state = "/pinmux@2430000/pex_rst_c5_in";
tegra_aon_gpio = "/gpio@c2f0000";
funnel_major_in_port2 = "/funnel_major@24040000/in-ports/port@2/endpoint";
cpu5_etm_out_port0 = "/cpu5_etm@27540000/out-ports/port/endpoint";
cv0_hot_surface = "/thermal-zones/CV0-therm/trips/cv0-hot-surface";
hsp_rce = "/tegra-hsp@b950000";
p2u_nvhs_3 = "/cbb/p2u@03ec0000";
p3767_vdd_3v3_pcie_isolate = "/fixed-regulators/regulator@12";
tegra_dmic1 = "/aconnect@2a41000/ahub/dmic@2904000";
pva0_ctx0n1 = "/host1x@13e00000/pva0/pva0_niso1_ctx0";
--
spi1 = "/spi@c260000";
p2u_gbe_0 = "/cbb/p2u@03f20000";
funnel_ccplex1_in_port3 = "/funnel_ccplex1@26040000/in-ports/port@3/endpoint";
dp_aux_ch0_i2c = "/i2c@31b0000";
tegra_rce = "/rtcpu@bc00000";
tegra_xhci_vf2 = "/xhci@36c0000";
nvdla0 = "/host1x@13e00000/nvdla0@15880000";
tegra_pwm6 = "/pwm@32d0000";
host1x_ctx5n1 = "/host1x@13e00000/niso1_ctx5";
tegra_usb_cd = "/usb_cd";
mttcan0 = "/mttcan@c310000";
funnel_major_in_port1 = "/funnel_major@24040000/in-ports/port@1/endpoint";
generic_reserved = "/reserved-memory/generic_carveout";
soc0_alert = "/soc0-throttle-alert";
bpmp = "/bpmp";
tegra_afc6 = "/aconnect@2a41000/ahub/afc@2907500";
cam_i2c = "/i2c@3180000";
cl1_3 = "/cpus/cpu@7";
adma = "/aconnect@2a41000/adma@2930000";
Tdiode_zone = "/thermal-zones/Tdiode_tegra";
cpu4_etm_out_port0 = "/cpu4_etm@27440000/out-ports/port/endpoint";
EDIT3
EDIT4
Scope images,
we are getting good communication between two Orin NX
but after connecting external devices, with very long stub. communication broke. it seems that Orin NX devices cannot ack the messages as can be seen
Now, the problem, that after disconnecting the long stub, i.e. returning to 2 Orin NX with 2 Termination we are getting, High
and Low
line fixed and nothing is going on on the bus
even that cangen can1 -v
is running
( on both Orin NX devices.) In this case the error counter in
watch -d -n 0.1 ip -d -s link show
is continuously rising.
now, when trying to reset
the ` can driver by running
rmmod mttcan
modprobe mttcan
the statistics
zerod. but now disconnected from the world
i.e: no message rx/tx counting, no error counting rx/tx`