🚌 All aboard… the CAN bus
As mentioned in earlier articles, electronic control units (ECUs) have gradually replaced traditional mechanical systems in vehicles. This evolution has brought us to a point where dozens of ECUs now harmoniously work together to keep the truck running smoothly.
To communicate with each other, these ECUs use digital communication networks, collectively referred to as datalinks. In this article, we’re going to break down what the term datalink actually means, how it’s used in modern trucks, and clear up some of the confusion around different types, like CAN, J1939, J1708, and J1587.
Up to this point, things have been pretty timid, and I will try my best to keep the tone going, but ⚠, from here things really do start to ramp up. Don’ stress though, because if you have followed my advice and thought process up to this point, it should be a simple stroll in the park.
📜 Contents
- Types of Datalinks
- Table
- How to Spot Datalink Wiring
- 120 Ω Resistors
- How ECUs Talk
- Slow Example
- Fast example
- J1708/J1587
- CAN (J1939)
- How do messages take turns
- Conclusion
📡 Types of Datalinks: J1939 vs. J1708 vs. J1587
The term “datalink” is broad, it simply refers to any system that allows electronic modules (ECUs, tools, etc.) to exchange data. Along the way, you might have heard terms like SAE or ISO. These refer to sets of standards developed and maintained by SAE International, a global organization that sets technical standards and supports engineering innovation in the automotive and aerospace industries.
Older trucks, such as Version 1, often simply referred to as “Older electrical systems” by Volvo Trucks, used only SAE J1708/J1587. Later models, such as Electrical Systems ’98 and Version 2, incorporated both SAE J1708/J1587 and CAN-based datalinks defined by SAE J1939. For this article, although I want to be thorough, I am not going to overwhelm you with loads of fancy terms but I do want to help you understand the basic concepts and differences between the two.
Both are ways for ECUs to communicate with each other, but J1708/J1587 is an older system using serial communication (RS-485 based). J1939, on the other hand, is based on CAN (Controller Area Network, ISO 11898 protocol).
A simple analogy: J1708/J1587 is like an old dirt road where traffic moves slowly. In contrast, CAN and J1939 is a smooth highway, allowing data to move quickly and efficiently. Remember this, J1708/J1587 is not CAN, but it is still considered a datalink.
The table below highlights the key differences between J1708/J1587 and J1939. It might look a bit confusing at first, but don’t stress, we’ll break it down.
Feature | J1708 / J1587 | CAN / J1939 |
---|---|---|
Type | Serial communication (RS-485 based) | Multi-master broadcast bus |
Physical Layer | J1708 (twisted pair, 9600 baud) | ISO 11898 (CAN bus, 250–500 kbit/s+, twisted pair) |
Protocol Layer | J1587 | J1939 |
Usage | Legacy diagnostics, older vehicles | Modern control systems (engine, brakes) |
Topology | Simple daisy chain (no termination) | Terminated bus (120ohm) with differential signaling |
Speed | 9.6 kbit/s physical / 56.7 kbit/s effective (J1587) | 250–1000 kbit/s or more with CAN FD |
👓 How to spot datalink wiring – The physical layer

In Volvo Trucks (V1 & V2):
- J1939 wiring is a green and yellow twisted pair.
- J1708 wiring is a grey and orange twisted pair.
These are the physical layers, what you see, the actual wires. The gauges moving and the engine revving are results of the information being sent in and over these physical layers. You’ll find these pairs running all over the truck, in the chassis, around the engine, under the dash, under the seats and up the pillars, linking up to most ECUs. They carry the digital conversation between all the different systems, engine, gearbox, brakes, dash, and more.
❗ 120 Ω Resistors – An important aspect of the J1939 network (physical layer), is the inclusion of two 120 Ω resistors which are fitted at each end of the system. Unlike the actual colored twisted wires, these are generally hidden away somewhere, and in the case of Volvo Trucks, one is inside the Engine ECU. These aren’t just random components, they play a vital role in keeping the network clear and quiet.
Imagine you are standing at the entrance to a tunnel with two-way traffic and shout. Your voice echoes right! Now imagine there was a bunch of you at either end shouting at the same time, that would be insane, no-one would understand a word that was being said. The same happens with ECUs, too much information being sent at once without some kind of control will “echo” and create confusion and miscommunication between the ECUs. That’s where the 120 Ω resistors come in. Appropriately named terminating resistors, they absorb the signal at the ends, keeping things smooth and clear.
🚫 Conversely, J1708 doesn’t use them at all, it doesn’t need them. The old-school serial communication is slower and much simpler for ECUs to understand.
📬 How ECUs talk – A postal analogy (Updated)
Information is sent over the 2 networks dependant on its priority and urgency.
- Fast (J1939): Critical messages like throttle position, RPM, gearshift commands, ABS signals, they need to move now.
- Slow (J1708/J1587): Less urgent stuff like: oil pressure, coolant temp, diagnostic info. Good to know, but not life-or-death.
Think of each ECU like a post office, constantly sending and receiving letters and the datalinks like the vehicles that deliver them. The network speed tells you how many letters per second each post office can deliver.
- J1708/J1587 – 9600 baud / 56.7kbit/s respectively: About 9,600 bits per second / 56.7 kilobits per second respectively. That’s like sending a letter via a slow regional courier service , it’ll get there, just not in a rush. “The South African post office was originally referenced here, but we realized… some letters may never arrive at all. So I think it’s best we stick with “slow regional courier” for now. Eish! Actually…. SAPO = broken datalink😉”
- J1939 – 250 to 500 kbit/s: More like a fleet of high-speed courier vans zipping down dedicated express lanes, fast and frequent deliveries.
A bit is the smallest piece of digital information, like a yes/no, on/off. It takes 8 bits to make a byte, roughly one character of text (so 8 bits of information make up lets say the letter “A“). So 250,000 bits per second is around 31,000 characters per second, that’s fast enough for ECUs to chat like teenagers on caffeine. If you want to learn more about bits and bytes, head off to the Ones and Zeros article in the nerd section.
🐌 Slow example – Oil pressure
Let’s say the oil pressure sensor sends a 0 – 5V signal to the engine ECU. The ECU reads that signal, encodes it into a digital message, and sends it over the J1708/J1587 network to the instrument cluster (IC). The IC then updates the gauge for the driver.
If the J1708 line is damaged, the gauge won’t work, but the engine still runs fine, because that info isn’t needed to control anything in real time. In this case even if the J1708/J1587 datalink goes down, the Engine ECU still receives the signal directly from the sensor and as such if the oil pump fails and the engine loses oil pressure, the Engine ECU can still “derate” the engine and enter protection mode, you just won’t see the info on the information display.
Other examples are, Diagnostics & Programming, Coolant Temperature, Boost pressure.
⚡ Fast example – Accelerator
When you press down on the pedal, you will want as fast a response as possible. This information is therefore sent using the J1939 / CAN bus network. In this instance if the J1939 CAN bus goes down you will lose complete acceleration. Other examples are, ABS, road speed, transmission control.
Remember, if J1708/J1587 fails, your gauges or diagnostics might not work, but the truck drives just fine. If J1939 fails, you’ve got bigger problems.
💡 Why is it J1708/J1587?
You’ll often see a fault code like:
“J1708/J1587 datalink communication error“
That means there’s an issue with the slow datalink, the grey and orange pair. As mentioned at the beginning of the article, J1708/J1587 is an old serial communication system. The general standard for heavy duty vehicles is J1587 protocol over J1708 layer. But what does this mean?
- J1708 is the physical layer, the road so to speak. Its a dirt road though, not a super smooth highway like CAN (the wire and signalling).
- J1587 is the language spoken on the old dirt road (the message format).
Both use the same wires, but it’s important to note that they are different things. J1708 is not a language it’s the road that J1587 uses to communicate. Just like two people speaking back and forth on a walkie-talkie, the walkie-talkies would be the platform used to communicate (J1708), and the voices are the language being spoken (J1587). The problem here is J1587 speaks faster (56.7kbit/s) than what J1708 can handle (9.6kbit/s).
Now this might sound counterintuitive, but it’s really not. If you’ve ever worked with .zip folders on your computer, you’ll get the idea. J1708 (the road) can only handle 9600 bits per second (9.6 kbit/s), but J1587 wants to send much more, up to 56.7 kbit/s. So instead of forcing too much data through the wire, it structures the information into “packets”, let’s call them .zip files, and sends them down the J1708 road (the orange and grey wires). Even though J1708 can only carry 9600 bits/s, J1587 cleverly zips up its 56.7kbit/s worth of data, and the receiving ECU “unzips” it on the other end to understand the full message.
🚀 CAN (J1939) – The modern highway
When it comes to newer, more sophisticated trucks, we add a super smooth CAN (ISO11898) J1939 highway next to the old J1708 dirt road. Now, unlike J1708, which is slow and bumpy, CAN is a fast, reliable road designed to handle lots of traffic. Think of it like a modern multi-lane highway that lets multiple cars (ECUs) travel at once without getting in each other’s way.
J1939 (the protocol over CAN) is the language spoken on this highway, it’s a high-speed, real-time communication standard. The data can move at up to 1 Mbit/s (a huge upgrade compared to the old road’s 9.6kbit/s).
What makes CAN (J1939) different?
Well, imagine this: On a normal highway for vehicles, there are rules for how fast the cars can go, what lane they should be in, and when they should pull over. These rules make sure the vehicles don’t collide and that everything stays flowing smoothly.
Each ECU is like a car driving on the highway. It can send a message, but instead of shouting over the loud engine noise like on the walkie-talkie (J1708), it waits for its turn to drive down the highway and deliver its message. The rules ensure that no one’s message gets lost or crashes into another. So a critical ABS message will always win over something like a cab temperature update. No shouting, no chaos, just an elegant digital pecking order.
🛂 But how do messages take turns?
Messages on the CAN bus don’t just shout over each other, they take turns politely (most of the time). Each one carries a little tag, a special number if you like, that decides who gets to speak first. These numbers are globally standardised as set out by SAE International that help the ECUs know what kind of info is coming their way.
Kind of like when you receive an email, you read the “subject line” first, and based on the subject, you open which email you think is more important. Once you open the email, you get to see the full message. So in the case of ECUs, you get something like this:
📩 Subject: “Heads up, this one’s about engine temperature, my priority number is 5″.
🔍 Message: “This is about engine temperature – the oil is currently 105°C”.
🔍 Message: “This is about engine temperature – the coolant temperature is 101°C
📩 “Yo, I’m about cruise control, my priority number is 25″.
🔍 Message: “Cruise control – has been activated”.
🔍 Message: “Cruise control – brake pedal has been pressed”.
The lower the number, the more urgent the message. So, life saving stuff like braking and engine alerts always cut to the front of the line.
👉 Head over to the Nerd section and check out The digital courtroom where we unpack in detail how the CAN bus sorts out all this digital chatter.
📦 Time to wrap it up
To recap:
- CAN is the method ECUs use to communicate.
- J1939 is the fast lane for important, time-sensitive info.
- J1708/J1587 is the slow lane for diagnostics and non-urgent data.
- Keeping these separate helps the networks run efficiently.
When diagnosing faults:
- Ask yourself: Is this a fast or slow problem?
- Figure out which network it lives on.
- Ignore the other one , focusing on the wrong one wastes time and energy.
- For J1708/J1587 failure:
🚨 If your gauges or diagnostics fail, but the truck still drives fine, it’s likely an issue with the J1708 datalink, it handles less urgent data. - For J1939 failure:
🚨 If the truck stops responding to acceleration or you lose critical systems like ABS, the J1939 bus may be down. This could be more urgent.
💬 What’s next?
In the next article we peek into the world of LIN and in the advanced section, we’ll dive into the Volvo TEA2+ architecture where all these systems come to together and things get a bit wild (in a good way). Expect more acronyms, faster networks, subnet magic, and maybe a brain explosion or two. But don’t worry, we’ll walk through it, byte by byte.