I know, there is a bunch of threads related to this one, but none of them seem to be solved, so I have to post it once again.
The problem:
If the CAN bus enters BUS OFF state, the transceiver remains in an unoperational state and reports
write: No buffer space available
Hardware: AGX Orin Dev Kit + SN65HVD1050D tranciever
Software: JetPack 5.1.2
How to replicate:
The easiest way to bring the bus into BUS OFF state is to shorten the two CAN wires to each other. I know, that is not very probable for software team, but the shortening is only used for tests.
We have experienced in our real products, that the bus could switch come to this state under certain conditions, that are hard to replicate, and it does not recover, so it is a problem for us.
When the MTT driver enters this state by whatever reason, and then the fault condition is removed, the driver returns to normal state (ERROR_ACTIVE
). It can receive messages, but sending the messages is not possible anymore.
The full functionality of CAN is restored, if the kernel mttcan
module is reloaded with rmmod
and modprobe
, but that is not a valid solution to use in real operations.
Solutions tried so far:
- using
restart-ms
parameter at CAN bring-up - using the latest release of JetPack (5.1.2)
- adding this patch to the kernel MTTCAN on Orin NX issues - #22 by KevinFFF
As I said, we do experience this issue in our real-life operations, where we have hundreds of robots running, so this a very hot topic for us.