Controller Area Network System
When Bosch designed the Controller Area Network (CAN system)
the idea was to make an electronic protocol system that would allow
electronic control units and various other components to communicate
with each other in an automotive setting without a main computer
functioning as a communication terminal.
Conventional wiring systems meant that you would have an
extraordinary amount of wiring to accomplish the same thing that
could be handled by a twisted pair of leads or even a single wire on a
data bus line up to about 1Mb/s.
Nearly every control unit on today’s cars use some form of a
CAN bus for communication purposes. Some of the communication
has to be sent quicker than other messages. This is accomplished by
using a priority encoded into the message as well as various speeds of communication.
CAN Bus Components and Output Signal
The CAN Bus is made up two wires, CAN-H (CAN High) and CAN-L (CAN Low) which connect to all the devices in its network. The signals on the two CAN lines have the same sequence of data, but their amplitudes are in direct opposites. The CAN-H line reads from 2.5V to 3.75V (5 volt maximum allowable voltage flow), the corresponding pulse on the CAN-L line goes from 2.5V to 1.25V (0 volt maximum allowable voltage flow). By sending the data in equal and opposite feeds it allows for a greater amount of noise or interference and less chance of the data being corrupted.
CAN Bus Components
Data is sent on the CAN bus by way of a series of zeros ("0") or ones ("1") (basic binary incryption) from the microprocessor integrated into the control unit/device (also known as the CAN Node). The CAN data bus terminal is a resistor (R) typically 120 ohms. It prevents data sent from being reflected at the ends and returning as an echo back up the leads. (Two 60 ohm resistors run across the CAN hi and the CAN low termination points.) The CAN bus line is used to supply, send, receive, check, and to pass on any data the NODES are trying to communicate.
There are two different ISO standards for the CAN systems. (ISO stands for “International Organization for Standardization” which is the computing terminology used worldwide.) ISO 11898-3 is the low speed CAN up to 125 kb/s and ISO 11898-2 is the high speed CAN up to 1 Mb/s. The CAN systems are further divided into two formats for the speed or type of communication it is sending. The two standards differ in the length of the identifier sequence messages (ID): Standard CAN (version 2.0A) uses an 11 bit identifier in the arbitration field. Extended CAN (version 2.0B) supports a length of 29 bits for the identifier, making up of the 11 bit identifier (base identifier) and an 18 bit extension.
CAN Bus Data Transfer Process
Of course all of this processing and transferring of information is done by changing a sequence of voltages on the twisted pair. Since you can’t have a negative amount of current flow, Bosch set the base voltage separating the hi and low CAN in between a typical 5 volt reference signal. 2.5 volts worked well and has been the same ever since Mr. Bosch put this system together. Since the nominal or rest voltage of the CAN circuit is 2.5V it’s very easy to create a lower value and a higher value by simply adding or subtracting voltages on the high and low CAN circuits.
The CAN Node (or module) provides data to the CAN controller for transfer. The Node receives the data from the CAN controller, converts it into an electrical signals and sends it back into the network. All the other CAN Nodes in the network receive each message. However, each message may not be for that particular module. Each CAN Node checks the incoming data as to whether or not that particular message is something they should be aware of. If the data is important, it will then process that information. If not, the data is ignored and then carries onto the next module.
CAN Bus Data Message Structure
So as to not get too wound up in the computer language, I’ll try to break down the message structure as to how all this works into a simpler method.
Basically, the messages are all 1’s and 0’s, and there are two different lengths of message identifiers, (11 and 29 characters long). Each message starts with a dominant bit (computer talk for a voltage signal identifying it) actually, there are two opposite identifier voltages sent on the CAN lines, (CAN-H, and CAN-L). If the CAN-H lead is at 3.75V then the opposite voltage is on the CAN-L line, which would be 1.25V.
The next sequence of 1’s and 0’s is the message priority protocol. This is very important when it comes to the actual message. A message or information with a higher priority needs to get to its destination before any lower priority message does. You wouldn’t want a throttle increase request to wait for an air conditioning vent change would you?
Next is a series of bits that check the actual message. This field of information allows any receiver to check whether it has received all the information transferred to it. Then, the actual data is transferred to the various CAN nodes. But, to double check the double check, another series of computer signals referred to as the CRC’s are sent. The Cyclic Redundancy Check, also known as Safety Field, checks the message for any transfer faults. Next is the “Acknowledge Field”, also known as Confirmation Field. In this field the receivers signal to the transmitter that they have correctly received the data protocol. If an error was detected, the receivers notify the transmitter of this immediately. The transmitter then sends the data protocol again. Finally, the “End Field”. This field marks the end of the data protocol message.
In other words, if you were wondering what all those up and down voltages in a group are for when you're looking at a CAN bus line on a scope.... that's what you're seeing. The actual bits of information in a voltage field over a length of time which describes the actual message in electrical terms.
There is no master processor on the CAN lines that controls when an individual CAN Node will read or write data onto the CAN Bus. When a CAN node is ready to transmit data, it checks to see if the Bus is busy and then simply writes a message onto the network. Basically, everybody on the CAN line can and will send information as they need to send information. The difference of who and what messages get to their destination is the identifier signals. Each unit on the CAN line receives every message that is passed, but they will only recognize the message with their specific identifier sequence. Any other message simply gets passed on done the line.
If multiple CAN nodes try to transmit a message onto the CAN Bus at the same time, the node with the highest priority (lowest arbitration ID) automatically gets a free ticket to their destination. Lower priority information must wait until the Bus becomes available before trying to transmit again.
Let’s take a hypothetical look at a coolant temperature reading. As long as the coolant temperature is within specifications the transferred signal is considered a low priority. However, if the coolant temperature rises into the danger zone the signals identifier would change and now the importance of that information has increased. As the danger increases so does the identifier. Now, let’s say, for instance, at a certain temperature the system is designed to shut the vehicle off (or go into a limp mode) to prevent any further engine damage. This priority would be greatly increased and the identifier signal and would now start to request changes be made in the engine operation.
Testing and Evaluation
Using your scope is the best method I know of to observe the CAN signals. With the CAN voltages at such a low value it doesn’t take much to pull the CAN line to 0 volts. A slight scrape of a wire or a loose connection at a controller can greatly affect the entire CAN system. Using a scope with a DLC break out box will give you the best results, even though back probing connectors is still useful a break out box just makes the connections that much easier to do.
When the network communication is idle the CAN-H and CAN-L voltages are approximately 2.5 volts. (No activity) Faulty transceivers can cause this idle voltage to vary and disrupt any further network communication. To test for faulty transceivers stop all network communication that you can. Measure the DC voltage between CAN-H and ground. Measure the DC voltage between CAN-L and ground.
Normally the voltage should be between 2.0 V and 4.0 V. If it is lower than 2.0 V or higher than 4.0 V, it is possible that one or more nodes have faulty transceivers. For a voltage lower than 2.0 V check the CAN-H and CAN-L leads for continuity. For a voltage higher or a low voltage (including a 0 voltage reading) check the signal with the lab scope connected and start by unplugging one module at a time. A higher voltage such as 5 V, may indicate a loss of the terminating resistor. This loss of (higher voltage) can also cause a black out on a digital display, a no start condition, or even an instrument cluster gauges to be inop.
Ground Lead and Shielding Check
Measuring the CAN-H and CAN-L leads to ground should show a resistance between 1 mega ohms and 4 mega ohms or higher. If it is lower than this range, the CAN transceiver is probably faulty. The shield of the CAN network has to be grounded at only one location. On some vehicles there is an aluminum shield around the CAN leads. It is possible that the shielded ground casing have been compromised. To check the shield ground find the ground connection and remove it temporarily. Measure the resistance between the shield and ground. The resistance should be higher than 1 mega ohm. If it is lower, check for any possible grounding areas on the shielded wire.
Termination Resistor Check
The termination resistors are used to match the impedance of a node to the impedance of the transmission line being used. When impedance is mismatched, the transmitted signal is not completely absorbed by the load and a portion is reflected back into the transmission line. If the source, transmission line and load impedance are equal these reflection signals are eliminated.
To test the resistance of the CAN data pair of conductors and the attached terminating resistors start by turning off all the power sources to the CAN nodes. Measure the resistance of the CAN-H and CAN-L at various points, (in the middle, and at both ends of the leads). The measured value should be 50 to 70 ohms (60 is the exact measurement but some vehicles will vary slightly). If the resistance value is below 50 ohms check for a short to ground. If the resistance value is above 70 ohms check for an open in the CAN-H or CAN-l leads. Keep in mind, some vehicles have the termination resistors embedded into the module. So you won't find an actual 'resistor' at the end of the CAN line.
Be aware that the CAN-H and CAN-L uses two 120 ohm resistor in parallel between them. If you remember your basic electrical course studies to find the total resistance value in a parallel circuit - R total = 1/R1 + 1/R2 + 1/R3, in this case it comes out to 60 ohms. Using two resistors in this fashion allow for a larger amount of data to pass through the resistors. If there was only one resistor the affect would be similar to a dam backing up the water flow. With two resistors in parallel it allows two pathways for the current to flow.