CAN bus test via loopback - possible or not?

All CAN hardware error checks are performed by hardware - the CAN controllers.

A CAN node cannot ack itself, by design. It will not receive its own messages. CAN is meant to have at least two nodes to work - a CAN bus with just one node is considered faulty, it is common sense. Therefore it doesn't make sense to have an "independent check".

(With one exception: if you enable a debug mode called "loop-back", which most CAN controllers support. Loop-back is a feature which allows the CAN controller to speak with itself without actually sending anything out on the bus. This is used for trouble-shooting and simulation purposes only and isn't meaningful to use in the final application. Typically you use this when you were cheap and only bought 1 evaluation board etc.)

The validation of message reception is done by the receiver acknowledging the message by setting the acknowledge bits in the CAN frame. http://www.can-cia.org/can-knowledge/can/can-data-link-layers/. This is done by the CAN controllers and nothing your software driver or application-level protocol need to concern themselves with, apart from checking the error flags after each transmission.

Now if you want to know if the right CAN node received the message, rather than any node, then that's another story not related to the hardware health of the bus. Such things have to be sorted in the high-level protocol.


Some CAN controllers have loop-back mode. However they do not send message over the line, they handle sending and receiving the message internally. RX line is ignored, that means cannot take any messages from other nodes. I assume you do not want to switch between normal mode and loop-back mode.

I suggest you to implement a higher level protocol to trace and correct errors.