Homepage GitHub

UAVCAN v0 Multiple Nodes Outputting Data

I have a CAN bus system with several nodes. One of the nodes is a Pixhawk, which is the flight computer for my system. Previously, the Pixhawk was the only node to output anything on the bus, and the other nodes just listened.

Now, I’d like these other nodes to output status information on the CAN bus so this information can be read by another device. The status information is broken up by UAVCAN and a multimessage is sent. The trouble I’m running into is this: it seems that sometimes parts of the multimessage from the Pixhawk and parts of the multimessage from the other node get entangled (all the frames of a single multimessage are not sent consecutively, but are interspersed with frames from the other multimessage), and a receiving node is unable to reassemble either multimessage. After the first instance when the messages become entangled, the receiving node seems unable to recover and receive any messages/multimessages in the future.

Is there something I need to reset to allow the CAN node to recover from missing the end or beginning of a multimessage? A counter or the toggle bit?

Your implementation of the UAVCAN transport appears to be defective. UAVCAN transport frames are atomic but the protocol does not require atomicity beyond that; multi-frame transfers are designed to be interrupted by higher-priority transmissions and it happens on any sufficiently complex UAVCAN network all the time (otherwise the protocol would be largely useless beyond the most trivial applications). You need to investigate your protocol implementation and find the error in it. One popular cause of error is that the transfer-ID field is not incremented although it may not be related to your case.