During the transmission of the data message, the voltage level is changing between a high voltage state, indicating a 1, and a low voltage state, indicating a 0. The fewer voltage transitions that take place within the data message the better in order to limit radio-frequency interference (RFI). To minimize RFI, the CAN protocol uses a method referred to as non-return to zero (NRZ). In this format, the voltage level does not have to change for each bit, but it can stay at a low voltage level — 0 — or a high voltage level — 1 — for up to five bits of length. If the data message is held at a given voltage level for more than five bits, the CAN chip will force a change in the voltage level opposite to the five bit level (Figure 4). This is called bit stuffing and is done so all the nodes on the bus can resynchronize to the rising or falling voltage edge. This bit stuffing also assures that the bus voltage level has not become stuck. This will help with the CAN diagnostics.
When a complete data message of 1s and 0s is completed, it is called a data frame (Figure 5). The data frame is composed of the start of frame, arbitration field, control field, data field, cyclic redundancy check field, acknowledgement field and end of frame. The CAN data frame can either be an 11-bit identifier or have a frame extension making it a 29-bit identifier. Most CAN vehicles now on the road use the 11-bit identifier. Newer CAN vehicles are taking advantage of the extended 29-bit identifier because more information than just the priority and identification can be conveyed in the arbitration field. The 29 bits can also contain information and source coding. Whenever a data frame is constructed and sent, it will be important for the data being transmitted and received to be correct. In order for this to be checked, the CAN protocol has incorporated an error detection and protection scheme. This is done with a process called cyclic redundancy check or CRC. The CRC is a 15-bit extension that is added on to the data frame. This extension makes the data frame divisible evenly by a mathematic equation called a polynomial. This relationship between the message and the CRC will produce a known value. If the value is anything other than the expected value, an error is marked against the message and the message is discarded. Therefore, any noise or disruption in the data frame will be caught and dealt with by the CAN error detection.
This CRC function is performed by the transmitter and receivers located in the CAN chip’s hardware. The transmitting node uses its CAN chip to provide the outgoing bit stream with a CRC. At the end of the CRC, the transmitting node checks the CRC value before it stops transmitting. In other words, the transmitting node is checking itself. If the CRC numerical value is incorrect, the transmitter sends out an error frame by holding the bit stream down for more than five bits. Any receiving node on the bus can also send an error frame in this manor. This violates the bit stuffing error, so all of the nodes on the bus tag this data message as an error and discard it. The transmitting node then retransmits the data message. The CAN protocol determines which node is responsible for an error by penalizing the node that reports the first error. This node increases its receive error counter by a greater amount than the other nodes. This process is basically “shooting the messenger.” The error indicators are watched by each node. In the case of intermittent errors, the CAN protocol will deal with these and will only add a slight latency. In these cases, the CAN error recovery is very good.