Hello,
I have a CAN based protocol where pings consists of two CAN frames, but for some reason the second frame is seemingly lost.
As can be seen on the photo, the two frames are very close to eachother, but from my debugging the flexcan driver callback is only called once on the first frame.
/2026-04-07/can-frames.jpeg

Any subsequent pings seem to behave differently, as the photo below shows.
/2026-04-07/can-frames-2.jpeg

If I lower the CAN bitrate the issue seems to dissapear - this is not practical for me because all other devices on my bus are speaking 1Mbit/s, so I have to look elsewhere. I am using a fairly simple setup using LTC2875:


My device tree:
&flexcan1 {
/* J7/10 (main bus) */
status = "okay";
pinctrl-0 = <&pinmux_flexcan1>;
pinctrl-names = "default";
phys = <&can_phy1>;
can-transceiver {
max-bitrate = <5000000>;
};
};
&flexcan2 {
/* J7/10 (main bus) */
status = "okay";
pinctrl-0 = <&pinmux_flexcan2>;
pinctrl-names = "default";
phys = <&can_phy2>;
can-transceiver {
max-bitrate = <5000000>;
};
};
&flexcan3 {
/* J9? */
status = "okay";
pinctrl-0 = <&pinmux_flexcan3>;
pinctrl-names = "default";
phys = <&can_phy3>;
can-transceiver {
max-bitrate = <5000000>;
};
};
To me, it looks a bit like the flexcan driver's IRQ is doing a lot of stuff before lowering the "I have handled the event"-flag, which might be what is leading to this issue, but my attempts at patching it has not resulted in any improvement.
I am using zephyr version 4.3.0 and the upstream `hal_nxp` module (so version 2.14.4 of the flexcan driver)