Rather than providing a message confirmation, which in turn would increase the bus load, CAN goes the more aggressive route of assuming that all messages must be consistent with the defined standard. Every diversion from this standard is detected and reported immediately, i.e. the error detection actually replaces the message confirmation. Naturally, confirmed messages would occur more often than actual error messages.
Each node in the network will receive each transmitted message. A message filter guarantees that the node knows when to ignore a message or to process it. However, each node in the network will check the transmitted message for compliance with the defined standard. All receiving nodes check the consistency of the received frame and acknowledge the consistency. If the consistency is not acknowledged by any or all nodes in the network, the transmitter of the frame will post an error frame to the bus.
The occurrence of an error frame may actually have two reasons. First, the transmitted data frame was really faulty or second, the data frame was correct, but one node erroneously reported an error due to a local reception problem.
It is important to distinguish between temporary errors or permanent failures of a node. CAN controllers address this problem by providing two different error counters, one for transmit errors and one for receive errors. If either counter exceeds a programmable limit, the node is considered faulty.
As part of the fault confinement, the CAN protocol allows the “removal” of a CAN node from the network, in case the node produces a constant stream of errors and therefore unnecessarily increases the bus load.
CAN also provides very short error recovery times of a maximum of 23 bit times. With a baud rate of 1 MBit/sec this translates into maximal 23 microseconds.