Part Number: TCAN4550
Hello,
We have used two TCAN device ( TCAN4550) on same SPI bus ( with different chip select),

During CAN-FD testing between the CAN interfaces, the receiving CAN interface stops receiving frames after some time. When this occurs, the interrupt counters stop incrementing, and CAN communication on the affected interface becomes non-functional.
Setup:
We have two TCAN4550 devices connected to a processor and are testing CAN-FD throughput and performance. We would like guidance on expected throughput limits and recommended validation methods.
Our setup consists of:
- Host SoC: Linux based x86 processor.
- Two TCAN4550 devices connected to the same SPI controller.
- The two CAN interfaces are connected through external CAN gateways.
- SPI clock configured at 12 MHz.
- CAN-FD configuration:
- Arbitration bitrate: 1 Mbps.
- Data bitrate: 8 Mbps.
- Linux Kernel: 15.
- Driver: tcan4x5x / m_can.
Device Tree Configuration:
/* TCAN Devices */
can0: tcan4x5x@4 {
compatible = "ti,tcan4x5x";
reg = <4>;
spi-max-frequency = <12000000>;
clocks = <&tcan_clk>, <&tcan_clk>;
clock-names = "hclk", "cclk";
bosch,mram-cfg = <0x0 0 0 64 0 0 1 4>;
interrupt-parent = <&gpio2>;
interrupts = <10 8>;
reset-gpios = <&gpio2 11 GPIO_ACTIVE_HIGH>;
status = "okay";
};
can1: tcan4x5x@0 {
compatible = "ti,tcan4x5x";
reg = <0>;
spi-max-frequency = <12000000>;
clocks = <&tcan_clk>, <&tcan_clk>;
clock-names = "hclk", "cclk";
bosch,mram-cfg = <0x0 0 0 64 0 0 1 4>;
interrupt-parent = <&gpio0>;
interrupts = <15 8>;
reset-gpios = <&gpio0 16 GPIO_ACTIVE_HIGH>;
status = "okay";
};
CAN Interface configuration:
ip link set can0 up type can bitrate 1000000 dbitrate 8000000 fd on one-shot on restart-ms 100 berr-reporting on
ip link set can1 up type can bitrate 1000000 dbitrate 8000000 fd on one-shot on restart-ms 100 berr-reporting on
Current Test Method
Continuous CAN-FD traffic through CAN (can0->can1) while monitoring CAN socket statistics, Error and interface counters.
Test case 1: Traffic Flow: canFdTester à can0 -> TCAN4550-> CAN GATEWAY-> EXTERNAL LOOP -> CAN GATEWAY -> TCAN4550 -> can1 -> canFdTester
Test case 2: Traffic Flow: canFdTester à can1 -> TCAN4550-> CAN GATEWAY-> EXTERNAL LOOP -> CAN GATEWAY -> TCAN4550 -> can0 -> canFdTester
Traffic initially works correctly. After some time, TX continues normally but RX packet counters, RX byte counters and RX interrupts stop increasing on the receiving interface.
Interfaces remain ERROR-ACTIVE with TEC=0, REC=0, no bus errors and no bus-off events.
Logs:
root:~# ./canFdTester -t can0 -r can1 -s 500 -l 64 -b -a 1000000 -b 8000
000
CAN FD Tester TX=can0 RX=can1 FPS=500 Payload=64(64) BRS=ON Arb=1000000 bps Data=1000000 bps
Fr/s Payload/s TotalBits/s Speed(kbps) BusLoad% Err/s TEC REC BusOff State
------------ ---------------- ---------------- ------------ -------------- -------- ---------- ---------- ---------- --------------------
457/368 29248/23552 260033/209392 260/209 26.00/20.94 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
453/276 28992/17664 257757/157044 257/157 25.78/15.70 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
449/279 28736/17856 255481/158751 255/158 25.55/15.88 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
457/298 29248/19072 260033/169562 260/169 26.00/16.96 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
80/255 5120/16320 45520/145095 45/145 4.55/14.51 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
271/239 17344/15296 154199/135991 154/135 15.42/13.60 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
406/250 25984/16000 231014/142250 231/142 23.10/14.22 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
0/291 0/18624 0/165579 0/165 0.00/16.56 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
454/290 29056/18560 258326/165010 258/165 25.83/16.50 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
328/249 20992/15936 186632/141681 186/141 18.66/14.17 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
69/287 4416/18368 39261/163303 39/163 3.93/16.33 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
449/250 28736/16000 255481/142250 255/142 25.55/14.22 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
270/287 17280/18368 153630/163303 153/163 15.36/16.33 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
84/251 5376/16064 47796/142819 47/142 4.78/14.28 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
451/258 28864/16512 256619/146802 256/146 25.66/14.68 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
203/295 12992/18880 115507/167855 115/167 11.55/16.79 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
249/297 15936/19008 141681/168993 141/168 14.17/16.90 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
449/368 28736/23552 255481/209392 255/209 25.55/20.94 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
393/284 25152/18176 223617/161596 223/161 22.36/16.16 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
0/265 0/16960 0/150785 0/150 0.00/15.08 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
After some time
Fr/s Payload/s TotalBits/s Speed(kbps) BusLoad% Err/s TEC REC BusOff State
------------ ---------------- ---------------- ------------ -------------- -------- ---------- ---------- ---------- --------------------
432/0 27648/0 245808/0 245/0 24.58/0.00 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
432/0 27648/0 245808/0 245/0 24.58/0.00 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
432/0 27648/0 245808/0 245/0 24.58/0.00 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
435/0 27840/0 247515/0 247/0 24.75/0.00 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
439/0 28096/0 249791/0 249/0 24.98/0.00 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
114/0 7296/0 64866/0 64/0 6.49/0.00 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
434/0 27776/0 246946/0 246/0 24.69/0.00 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
428/0 27392/0 243532/0 243/0 24.35/0.00 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
434/0 27776/0 246946/0 246/0 24.69/0.00 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
431/0 27584/0 245239/0 245/0 24.52/0.00 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
435/0 27840/0 247515/0 247/0 24.75/0.00 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
436/0 27904/0 248084/0 248/0 24.81/0.00 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
435/0 27840/0 247515/0 247/0 24.75/0.00 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
439/0 28096/0 249791/0 249/0 24.98/0.00 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
439/0 28096/0 249791/0 249/0 24.98/0.00 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
433/0 27712/0 246377/0 246/0 24.64/0.00 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
438/0 28032/0 249222/0 249/0 24.92/0.00 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
434/0 27776/0 246946/0 246/0 24.69/0.00 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
437/0 27968/0 248653/0 248/0 24.87/0.00 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
299/0 19136/0 170131/0 170/0 17.01/0.00 0 0/0 0/0 NO/NO ERR-ACT/ERR-ACT
root:~# cat /proc/interrupts | grep -E "355|356|can0|can1"
355: 2099926 0 gpio_irq 10 can0
356: 1553986 0 gpio_irq 15 can1
root:~# cat /proc/interrupts | grep -E "355|356|can0|can1"
355: 2102237 0 gpio_irq 10 can0
356: 1553986 0 gpio_irq 15 can1 ß---- Interrupt counters freeze at receiving interface
root:~# ip -s -d link show can0
28: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 72 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/can promiscuity 0 minmtu 0 maxmtu 0
can <ONE-SHOT,BERR-REPORTING,FD> state ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 100
bitrate 1000000 sample-point 0.750
tq 25 prop-seg 14 phase-seg1 15 phase-seg2 10 sjw 1 brp 1
m_can: tseg1 2..256 tseg2 2..128 sjw 1..128 brp 1..512 brp_inc 1
dbitrate 8000000 dsample-point 0.600
dtq 25 dprop-seg 1 dphase-seg1 1 dphase-seg2 2 dsjw 1 dbrp 1
m_can: dtseg1 1..32 dtseg2 1..16 dsjw 1..16 dbrp 1..32 dbrp_inc 1
clock 40000000
re-started bus-errors arbit-lost error-warn error-pass bus-off
0 0 0 0 0 0 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 parentbus spi parentdev spi2.4
RX: bytes packets errors dropped missed mcast
124534144 1945846 0 0 0 0
TX: bytes packets errors dropped carrier collsns
124534144 1945856 0 0 0 0
root:~# ip -s -d link show can1
29: can1: <NOARP,UP,LOWER_UP,ECHO> mtu 72 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/can promiscuity 0 minmtu 0 maxmtu 0
can <ONE-SHOT,BERR-REPORTING,FD> state ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 100
bitrate 1000000 sample-point 0.750
tq 25 prop-seg 14 phase-seg1 15 phase-seg2 10 sjw 1 brp 1
m_can: tseg1 2..256 tseg2 2..128 sjw 1..128 brp 1..512 brp_inc 1
dbitrate 8000000 dsample-point 0.600
dtq 25 dprop-seg 1 dphase-seg1 1 dphase-seg2 2 dsjw 1 dbrp 1
m_can: dtseg1 1..32 dtseg2 1..16 dsjw 1..16 dbrp 1..32 dbrp_inc 1
clock 40000000
re-started bus-errors arbit-lost error-warn error-pass bus-off
0 0 0 0 0 0 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 parentbus spi parentdev spi2.0
RX: bytes packets errors dropped missed mcast
199239456 3113134 0 0 0 0
TX: bytes packets errors dropped carrier collsns
0 0 0 0 0 0
:~# ip -s -d link show can1
29: can1: <NOARP,UP,LOWER_UP,ECHO> mtu 72 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/can promiscuity 0 minmtu 0 maxmtu 0
can <ONE-SHOT,BERR-REPORTING,FD> state ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 100
bitrate 1000000 sample-point 0.750
tq 25 prop-seg 14 phase-seg1 15 phase-seg2 10 sjw 1 brp 1
m_can: tseg1 2..256 tseg2 2..128 sjw 1..128 brp 1..512 brp_inc 1
dbitrate 8000000 dsample-point 0.600
dtq 25 dprop-seg 1 dphase-seg1 1 dphase-seg2 2 dsjw 1 dbrp 1
m_can: dtseg1 1..32 dtseg2 1..16 dsjw 1..16 dbrp 1..32 dbrp_inc 1
clock 40000000
re-started bus-errors arbit-lost error-warn error-pass bus-off
0 0 0 0 0 0 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 parentbus spi parentdev spi2.0
RX: bytes packets errors dropped missed mcast
199239456 3113134 0 0 0 0 ß----- Rx counter not increasing at receiving interface
TX: bytes packets errors dropped carrier collsns
0 0 0 0 0 0
Observations:
We are testing CAN-FD traffic between the two TCAN4550 interfaces (can0 and can1) connected to the same MxL25641 SPI controller.
During testing, CAN-FD traffic initially flows correctly, and both interfaces show increasing RX/TX counters. However, after running for some time, we observe the following behaviour:
- Transmission continues normally on the transmitting interface.
- RX packets stop increasing on the receiving interface.
- RX byte counters reported by ip -details -statistics link show stop increasing.
- Interrupt count associated with the receiving TCAN4550 also stops increasing.
- TX interrupt count and TX packet counters continue to increase normally.
- CAN interfaces remain in ERROR-ACTIVE state.
- No bus errors, bus-off events, or error counters are reported.
- The transmitting interface continues to show increasing TX statistics, while the receiving interface appears to stop processing incoming frames.
- During long-duration testing, the board occasionally becomes unresponsive and eventually reboots due to a watchdog timeout. Reset reason reported is ATOM WDT RESET.
Please help to point out the root cause for this.