CAN Bus Physical Layer and Electrical Design
Document ID: CAN-01 Series: Telematics Tutorial Series Target audience: Intermediate — you should be comfortable reading schematics and have a basic understanding of digital communication concepts.
Learning Objectives
By the end of this document, you will be able to:
- Describe the electrical characteristics of CAN bus signals, including dominant and recessive voltage levels defined by ISO 11898-2 and ISO 11898-3
- Design a CAN bus network with proper termination, cable selection, and node placement
- Select and wire a CAN transceiver for a given application
- Calculate maximum bus length for a target bit rate
- Diagnose common physical-layer faults using an oscilloscope or multimeter
1. Introduction to the CAN Physical Layer
Controller Area Network (CAN) is a multi-master serial bus originally developed by Robert Bosch GmbH in 1986 for in-vehicle communication. While the CAN protocol defines how data is framed and arbitrated (covered in CAN-02), the physical layer defines how those bits become electrical signals on a wire.
The physical layer is where most real-world CAN problems originate. A perfectly written application will fail silently if the bus is improperly terminated, if cable impedance is wrong, or if a transceiver is wired incorrectly. Understanding this layer is not optional — it is the foundation of every reliable CAN deployment.
The CAN physical layer is standardized in two key documents:
- International Organization for Standardization (ISO) 11898-2 — High-speed CAN (up to 1 Mbit/s), the most widely deployed variant in automotive powertrains, industrial automation, and heavy-duty vehicles
- ISO 11898-3:2006 — Low-speed, fault-tolerant CAN (up to 125 kbit/s), used in body electronics and comfort systems where continued operation during a single-wire fault is required
📝 Note: ISO 11898-2 was updated in 2016 to include CAN FD physical layer requirements. Unless stated otherwise, references to ISO 11898-2 in this document include the 2016 amendments.
Related documents in this series:
- For frame formats, arbitration, and protocol details, see CAN-02 (Protocol and Frames).
- For bit timing configuration, sample point selection, and error handling, see CAN-03 (Bit Timing and Errors).
- For hardware interfaces, socketCAN, and higher-layer protocols, see CAN-04 (Interfaces, Protocols, and Security).
2. Signal Levels and Differential Signaling
CAN uses differential signaling — information is encoded as the voltage difference between two wires, CAN_H (CAN High) and CAN_L (CAN Low). Differential signaling rejects common-mode noise because any interference that couples onto both wires equally cancels out when the receiver takes the difference.
CAN employs Non-Return-to-Zero (NRZ) encoding: the bus voltage level is held constant for the entire duration of each bit — there is no transition back to a neutral level within a single bit period. A sequence of identical bits produces a flat voltage with no transitions, which is why CAN uses bit stuffing (inserting a complementary bit after five consecutive identical bits) to ensure sufficient transitions for clock recovery. Bit stuffing is described in detail in CAN-02 (Protocol and Frames).
2.1 High-Speed CAN (ISO 11898-2)
The bus has two logical states:
%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#4a90d9'}}}%%
block-beta
columns 8
block:header:8
columns 8
H1["Bit:"] H2["1 (R)"] H3["0 (D)"] H4["0 (D)"] H5["1 (R)"] H6["0 (D)"] H7["1 (R)"] H8["1 (R)"]
end
space:8
block:voltages:8
columns 1
V1["CAN_H / CAN_L Voltage Levels
5.0V ┤
4.0V ┤
3.5V ┤─ ─ ─ ─ ─ ─ ─ CAN_H dominant (3.5V)
3.0V ┤
2.5V ┤━━━━━━━━━━━━━━━ Common mode / Recessive (2.5V)
2.0V ┤
1.5V ┤─ ─ ─ ─ ─ ─ ─ CAN_L dominant (1.5V)
1.0V ┤
0.5V ┤
0.0V ┤
└──────────────────────────── Time"]
end
space:8
block:diff:8
columns 1
V2["Differential Voltage (V_diff = CAN_H − CAN_L)
3.0V ┤
2.0V ┤━━━━━━━━━━━━━━━ Dominant V_diff (2.0V)
1.0V ┤
0.9V ┤─ ─ ─ ─ ─ ─ ─ Dominant threshold (0.9V)
0.5V ┤─ ─ ─ ─ ─ ─ ─ Recessive threshold (0.5V)
0.0V ┤━━━━━━━━━━━━━━━ Recessive V_diff (0.0V)
└──────────────────────────── Time"]
end
style H2 fill:#90EE90,stroke:#333
style H4 fill:#FFB347,stroke:#333
style H3 fill:#FFB347,stroke:#333
style H5 fill:#90EE90,stroke:#333
style H6 fill:#FFB347,stroke:#333
style H7 fill:#90EE90,stroke:#333
style H8 fill:#90EE90,stroke:#333
Figure: CAN01 02 signal voltage levels
Dominant (logic 0): - CAN_H is driven toward 3.5 V - CAN_L is driven toward 1.5 V - Differential voltage (V_diff = CAN_H − CAN_L) is nominally 2.0 V - The receiver recognizes any V_diff > 0.9 V as dominant
Recessive (logic 1): - Both CAN_H and CAN_L float to the common-mode voltage, nominally 2.5 V - V_diff is nominally 0 V - The receiver recognizes any V_diff < 0.5 V as recessive
| Parameter | Dominant | Recessive | Unit |
|---|---|---|---|
| CAN_H voltage (nominal) | 3.5 | 2.5 | V |
| CAN_L voltage (nominal) | 1.5 | 2.5 | V |
| V_diff (nominal) | 2.0 | 0.0 | V |
| V_diff receiver threshold (dominant) | > 0.9 | — | V |
| V_diff receiver threshold (recessive) | — | < 0.5 | V |
| Transmitter output voltage range | 1.5 to 3.5 | 2.5 | V |
| Receiver common-mode input range | −2.0 to +7.0 | −2.0 to +7.0 | V |
| Bus input impedance (differential) | — | — | ≥ 10 kΩ |
⚠️ Warning: The gap between the dominant threshold (0.9 V) and the recessive threshold (0.5 V) is only 0.4 V. This is your noise margin. Poorly terminated buses or long stubs erode this margin and cause intermittent bit errors that are extremely difficult to diagnose.
Worked Voltage Examples — High-Speed CAN
The following examples show how to verify signal levels at a CAN node using a multimeter or oscilloscope. All voltages are measured with respect to the local CAN_GND reference.
Example 1 — Nominal dominant on a healthy bus: - Measured CAN_H = 3.5 V, CAN_L = 1.5 V - V_diff = 3.5 V - 1.5 V = 2.0 V (well above the 0.9 V dominant threshold) - Common-mode voltage = (3.5 V + 1.5 V) / 2 = 2.5 V (centered in the common-mode range) - Interpretation: Normal dominant bit.
Example 2 — Nominal recessive (idle bus): - Measured CAN_H = 2.5 V, CAN_L = 2.5 V - V_diff = 2.5 V - 2.5 V = 0.0 V (well below the 0.5 V recessive threshold) - Interpretation: Normal recessive state.
Example 3 — Degraded dominant with ground offset (+1.5 V between nodes): - If Node B’s ground is 1.5 V above the transmitting node’s ground, the voltages measured locally at Node B shift upward. - Measured CAN_H at Node B = 3.5 V + 1.5 V = 5.0 V, CAN_L = 1.5 V + 1.5 V = 3.0 V - V_diff = 5.0 V - 3.0 V = 2.0 V (still dominant — differential signaling rejects the common-mode shift) - Common-mode at Node B = (5.0 V + 3.0 V) / 2 = 4.0 V (within the -2.0 V to +7.0 V receiver common-mode range) - Interpretation: Communication still works, but the common-mode margin is reduced. If the ground offset increases further (beyond +4.5 V), CAN_H could exceed 7.0 V and violate the receiver’s input range.
Example 4 — Marginal dominant on a noisy bus: - Measured CAN_H = 2.95 V, CAN_L = 1.95 V (attenuated by long cable or partial termination fault) - V_diff = 2.95 V - 1.95 V = 1.0 V (barely above the 0.9 V dominant threshold) - Interpretation: The bus is operating with almost no noise margin. Any additional noise could push V_diff below 0.9 V, causing the receiver to interpret a dominant bit as recessive — a bit error. Investigate termination and cable quality immediately.
Example 5 — Measuring V_diff with an oscilloscope differential probe: - Set the oscilloscope to display CAN_H - CAN_L (math channel or differential probe). - During active traffic, you should see dominant pulses at approximately +2.0 V and recessive periods at approximately 0.0 V. - If the dominant pulses are below +1.5 V or the recessive baseline drifts above +0.3 V, the bus has a signal integrity issue.
Why dominant overrides recessive: CAN uses a wired-AND bus structure — a topology where any node pulling the line to the active (dominant) state overrides all others, analogous to a logical AND gate. When any node drives a dominant bit, it pulls CAN_H up and CAN_L down through the transceiver’s output transistors. Recessive is the idle state — the bus is recessive only when no node is actively driving it. This electrical property is what makes non-destructive bitwise arbitration possible (described in CAN-02).
2.2 Low-Speed Fault-Tolerant CAN (ISO 11898-3)
Low-speed CAN uses asymmetric voltage levels and is designed to continue operating if one bus wire is shorted to ground, to battery supply voltage (V_BAT, the battery terminal voltage supplying the node), or is open:
| Parameter | Dominant | Recessive | Unit |
|---|---|---|---|
| CAN_H voltage | 3.6 (min) to V_BAT | 0 to 2.0 | V |
| CAN_L voltage | 0 to 1.4 | 3.0 (min) to V_BAT | V |
| V_diff (typical, V_BAT = 5 V) | ≈ +3.0 | ≈ −3.0 | V |
The key difference: in low-speed CAN, the recessive state is not a zero-differential state. CAN_L is driven higher than CAN_H during recessive, producing a negative V_diff. This asymmetry allows the transceiver to detect single-wire faults and switch to a degraded single-wire communication mode.
📝 Note: Low-speed CAN transceivers (e.g., TJA1054, TJA1055) include internal termination. You do not add external 120 Ω resistors on a low-speed CAN bus — doing so will degrade signal quality.
2.2.1 ISO 11898-3 Fault-Tolerant CAN — Detailed Operation
ISO 11898-3 fault-tolerant CAN is designed to maintain communication even when one of the two bus wires is damaged. The transceiver achieves this by supporting multiple operating modes and automatically switching between them when a fault is detected.
Normal Mode (Differential Signaling)
In normal mode, the fault-tolerant transceiver operates using both CAN_H and CAN_L, driving them asymmetrically relative to V_BAT. Unlike high-speed CAN (ISO 11898-2), where dominant and recessive states are symmetric around a 2.5 V common-mode voltage, fault-tolerant CAN swings the bus lines between approximately 0 V and V_BAT. This wide voltage swing provides the margin needed for single-wire fallback operation.
Single-Wire Mode (CAN_H-Only or CAN_L-Only Fallback)
If the transceiver detects that one bus wire has failed — due to an open circuit, a short to ground, or a short to V_BAT — it automatically switches to single-wire mode. In this degraded mode, communication continues using only the surviving wire:
- CAN_H-only mode: When CAN_L is disconnected or faulted, the transceiver transmits and receives using only CAN_H. Dominant is signaled by driving CAN_H to approximately V_BAT, and recessive is signaled by pulling CAN_H to approximately 0 V.
- CAN_L-only mode: When CAN_H is disconnected or faulted, the transceiver uses only CAN_L. Dominant is signaled by driving CAN_L to approximately 0 V, and recessive is signaled by driving CAN_L to approximately V_BAT.
Single-wire mode sacrifices noise immunity (because differential common-mode rejection is lost) but maintains the ability to communicate — a critical requirement for body and comfort electronics where a broken wire should not disable window controls, mirror adjustment, or seat positioning.
Worked Voltage Examples
The actual signal voltages on a fault-tolerant CAN bus depend on the supply voltage (V_BAT). Here are two representative examples:
At V_BAT = 5 V: - Normal mode dominant: CAN_H ≈ 5 V, CAN_L ≈ 0 V, V_diff ≈ +5 V - Normal mode recessive: CAN_H ≈ 0 V, CAN_L ≈ 5 V, V_diff ≈ −5 V - Single-wire CAN_H dominant: CAN_H ≈ 5 V (CAN_L disconnected) - Single-wire CAN_H recessive: CAN_H ≈ 0 V (CAN_L disconnected)
At V_BAT = 12 V (typical automotive): - Normal mode dominant: CAN_H ≈ 12 V, CAN_L ≈ 0 V, V_diff ≈ +12 V - Normal mode recessive: CAN_H ≈ 0 V, CAN_L ≈ 12 V, V_diff ≈ −12 V - Single-wire CAN_H dominant: CAN_H ≈ 12 V (CAN_L disconnected) - Single-wire CAN_H recessive: CAN_H ≈ 0 V (CAN_L disconnected)
Voltage Levels by Mode
| Mode | CAN_H Dominant | CAN_H Recessive | CAN_L Dominant | CAN_L Recessive |
|---|---|---|---|---|
| Normal (V_BAT=12V) | ~V_BAT (12V) | ~0V | ~0V | ~V_BAT (12V) |
| Single-wire CAN_H | ~V_BAT | ~0V | Disconnected | Disconnected |
| Single-wire CAN_L | Disconnected | Disconnected | ~0V | ~V_BAT |
Fault Detection Logic
The fault-tolerant transceiver continuously monitors the relationship between CAN_H and CAN_L to detect wire faults. The detection mechanism works as follows:
- During normal operation, the transceiver expects CAN_H and CAN_L to be complementary — when one is high, the other should be low. The transceiver verifies this on every bit transition.
- Open-circuit detection: If one wire shows no voltage transitions while the other continues to toggle, the transceiver identifies the static wire as open (disconnected). After a configurable number of failed transitions (typically within a few bit times), the transceiver switches to single-wire mode using the surviving wire.
- Short-to-supply detection: If a wire is stuck at V_BAT regardless of the transmitted state, the transceiver recognizes that it cannot drive the wire to its target level and falls back to single-wire mode on the other wire.
- Short-to-ground detection: Similarly, if a wire is stuck at 0 V and cannot be driven high, the transceiver switches to the unaffected wire.
- Recovery: When the transceiver periodically retests the faulted wire and detects that it is functioning normally again (proper voltage transitions resume), it can switch back to normal differential mode automatically.
Application Note
Fault-tolerant CAN is limited to a maximum bit rate of 125 kbit/s — significantly slower than high-speed CAN’s 1 Mbit/s. This is acceptable for its target applications: body and comfort electronics such as window lifters, mirror adjustment, seat positioning, interior lighting, and climate control panels. These systems prioritize reliability and graceful degradation over raw data throughput.
2.3 CAN FD Physical Layer Considerations
CAN Flexible Data-rate (CAN FD) uses the same ISO 11898-2 physical layer as classical CAN but switches to a higher bit rate during the data phase of the frame. This places tighter demands on the physical layer:
- Ringing and reflections become more problematic at data-phase rates of 2, 5, or 8 Mbit/s due to Electromagnetic Interference (EMI) susceptibility
- Signal integrity requires shorter bus lengths, shorter stubs, and tighter impedance control
- Transceiver symmetry (the difference between dominant-to-recessive and recessive-to-dominant transition times) must be within tighter tolerances — ISO 11898-2:2016 specifies transceiver symmetry ≤ 5 ns for CAN FD
| Parameter | Classical CAN | CAN FD (data phase) |
|---|---|---|
| Max bit rate | 1 Mbit/s | 8 Mbit/s (typical max 5 Mbit/s) |
| Transceiver symmetry | Not specified | ≤ 5 ns |
| Recommended max bus length at max rate | 40 m at 1 Mbit/s | 2–5 m at 5 Mbit/s |
| Stub length limit | < 0.3 m recommended | As short as physically possible |
💡 Tip: If you are designing a new CAN FD bus, use CAN FD-qualified transceivers (e.g., TJA1443, MCP2542FD, TCAN4550) even if your initial data rate is modest. Retrofitting transceivers later is far more expensive than specifying them correctly from the start.
📝 Note: CAN FD bit timing — including the dual bit-rate configuration for arbitration and data phases — is covered in detail in CAN-03 (Bit Timing and Errors).
3. Bus Topology and Wiring
3.1 The Linear Bus Topology
The CAN bus is defined as a linear bus (also called a trunk-and-stub topology). A single backbone cable — the trunk — runs between the two farthest nodes, and each intermediate node connects to the trunk via a short stub (also called a drop or tap). The trunk cable must have a characteristic impedance of 120 Ω — this is the inherent impedance of the transmission line determined by its geometry and materials, which governs how signals propagate and reflect along the cable.
graph LR
subgraph Trunk["CAN Bus Trunk (120 Ω Twisted Pair)"]
direction LR
T1[" 120 Ω
Termination"]
WIRE1["───── CAN_H ─────
───── CAN_L ─────"]
WIRE2["───── CAN_H ─────
───── CAN_L ─────"]
WIRE3["───── CAN_H ─────
───── CAN_L ─────"]
WIRE4["───── CAN_H ─────
───── CAN_L ─────"]
T2[" 120 Ω
Termination"]
T1 --- WIRE1 --- WIRE2 --- WIRE3 --- WIRE4 --- T2
end
NA["Node A
━━━━━━━━
CAN Controller
CAN Transceiver"] ---|"stub
< 0.3 m"| WIRE1
NB["Node B
━━━━━━━━
CAN Controller
CAN Transceiver"] ---|"stub"| WIRE2
NC["Node C
━━━━━━━━
CAN Controller
CAN Transceiver"] ---|"stub"| WIRE3
ND["Node D
━━━━━━━━
CAN Controller
CAN Transceiver"] ---|"stub"| WIRE4
style T1 fill:#ff6b6b,stroke:#333,color:#fff
style T2 fill:#ff6b6b,stroke:#333,color:#fff
style NA fill:#e8e8e8,stroke:#333
style NB fill:#e8e8e8,stroke:#333
style NC fill:#e8e8e8,stroke:#333
style ND fill:#e8e8e8,stroke:#333
style WIRE1 fill:#4a90d9,stroke:#333,color:#fff
style WIRE2 fill:#4a90d9,stroke:#333,color:#fff
style WIRE3 fill:#4a90d9,stroke:#333,color:#fff
style WIRE4 fill:#4a90d9,stroke:#333,color:#fff
Figure: CAN01 01 physical topology
Node A Node B Node C Node D
| | | |
| stub | stub | stub |
| | | |
===|================|================|================|===
| |
[120 Ω] [120 Ω]
| |
GND GND
Critical design rules for the linear bus:
-
Terminate both ends — place a 120 Ω resistor between CAN_H and CAN_L at each physical end of the trunk. Each 120 Ω resistor individually matches the cable’s 120 Ω characteristic impedance, which is the design target — this match absorbs signal energy at each bus endpoint and prevents reflections. When you measure across the bus with both terminators present, you will read 60 Ω because the two 120 Ω resistors are in parallel; this 60 Ω reading is a diagnostic confirmation that both terminators are installed, not the impedance-matching design target.
-
Minimize stub lengths — each stub creates an impedance discontinuity that reflects a portion of the signal back down the bus. At 1 Mbit/s, keep stubs under 0.3 m. At CAN FD data rates above 2 Mbit/s, keep stubs as short as physically possible — ideally, connect nodes directly to the trunk with no stub at all.
-
Maintain consistent cable impedance — use twisted-pair cable with a characteristic impedance of 120 Ω. Society of Automotive Engineers (SAE) J2284 (CAN for passenger vehicles) and ISO 11898-2 both specify this value. Mismatched impedance causes reflections that degrade the eye diagram (an eye diagram overlays many bit periods to visualize signal quality — see Section 9.4).
-
Do not create star topologies unintentionally — if multiple stubs of significant length branch from a single point, you have created a star, not a linear bus. Stars cause reflections from multiple impedance discontinuities converging at the branch point.
3.2 Maximum Bus Length
The maximum length of a CAN bus is not directly specified by the standard — it is a function of the bit rate, propagation delay, and transceiver loop delay. The fundamental constraint is that a bit transmitted by any node must propagate to the farthest node and back within one bit time, to ensure correct arbitration.
The propagation delay of typical CAN cable is approximately 5 ns/m. The total round-trip delay budget includes:
- Cable propagation delay (both directions): 2 × length × 5 ns/m
- Transceiver output delay (transmitting node): ~50–150 ns
- Transceiver input delay (receiving node): ~50–150 ns
- CAN controller processing delay: ~50–100 ns
Practical maximum bus lengths per bit rate:
| Bit rate | Max bus length | Bit time | Notes |
|---|---|---|---|
| 1 Mbit/s | 40 m | 1 µs | ISO 11898-2 recommended limit |
| 500 kbit/s | 100 m | 2 µs | Common in automotive powertrains |
| 250 kbit/s | 250 m | 4 µs | Common in heavy-duty vehicles (SAE J1939) |
| 125 kbit/s | 500 m | 8 µs | Common in industrial automation |
| 50 kbit/s | 1,000 m | 20 µs | Extended-range applications |
| 20 kbit/s | 2,500 m | 50 µs | Maximum practical range |
| 10 kbit/s | 5,000 m | 100 µs | Theoretical maximum with margin |
⚠️ Warning: These are theoretical maximums assuming ideal cable and a small number of nodes. In practice, reduce the maximum length by 20–30% to account for connector losses, cable quality variation, and EMI. Always verify with an oscilloscope eye-diagram measurement.
Calculating your own maximum length:
You can estimate the maximum bus length for a given bit rate using this formula:
max_length = (bit_time - t_transceiver - t_controller) / (2 × t_prop_per_meter)
Where:
- bit_time = 1 / bit_rate (in seconds)
- t_transceiver = total transceiver loop delay (transmit + receive), typically 200–300 ns total
- t_controller = CAN controller processing time, typically 50–100 ns
- t_prop_per_meter = cable propagation delay, typically 5 ns/m
- The factor of 2 accounts for the round trip
def max_can_bus_length(bit_rate_bps, t_transceiver_ns=250, t_controller_ns=75, t_prop_ns_per_m=5):
"""Calculate maximum CAN bus length in meters."""
bit_time_ns = 1e9 / bit_rate_bps
available_ns = bit_time_ns - t_transceiver_ns - t_controller_ns
max_length_m = available_ns / (2 * t_prop_ns_per_m)
return max_length_m
# Examples
for rate in [1000000, 500000, 250000, 125000]:
length = max_can_bus_length(rate)
print(f"{rate/1000:.0f} kbit/s → {length:.0f} m")
# Expected output
1000 kbit/s → 68 m
500 kbit/s → 168 m
250 kbit/s → 368 m
125 kbit/s → 768 m
The calculated values are higher than the recommended maximums in the table above because the formula does not account for signal attenuation, stub reflections, or noise margin — all of which reduce the practical limit.
3.3 Topology Variants
While the linear bus is the canonical CAN topology, real-world installations sometimes use variations:
graph TB
subgraph LINEAR[" Linear Bus (Standard — Recommended)"]
direction LR
L_T1["120 Ω"] --- L_W1["trunk"] --- L_W2["trunk"] --- L_W3["trunk"] --- L_W4["trunk"] --- L_T2["120 Ω"]
L_A["Node A"] ---|"stub"| L_W1
L_B["Node B"] ---|"stub"| L_W2
L_C["Node C"] ---|"stub"| L_W3
L_D["Node D"] ---|"stub"| L_W4
end
subgraph STAR[" Star Topology (Low bit rates only, ≤ 250 kbit/s)"]
direction TB
ST_A["Node A"] --- ST_HUB["Central
Hub"]
ST_B["Node B"] --- ST_HUB
ST_C["Node C"] --- ST_HUB
ST_D["Node D"] --- ST_HUB
end
subgraph HYBRID[" Hybrid / Tree (Use with CAN repeater)"]
direction LR
H_T1["120 Ω"] --- H_W1["trunk"]
H_A["Node A"] ---|"stub"| H_W1
H_W1 --- H_W2["trunk"]
H_B["Node B"] ---|"stub"| H_W2
H_W2 --- H_REP["CAN
Repeater"]
H_REP --- H_W3["trunk"]
H_C["Node C"] ---|"stub"| H_W3
H_W3 --- H_T2["120 Ω"]
H_REP --- H_W4["branch"]
H_D["Node D"] ---|"stub"| H_W4
H_W4 --- H_T3["120 Ω"]
end
subgraph P2P[" Point-to-Point"]
direction LR
P_A["Node A
120 Ω"] --- P_WIRE["trunk"] --- P_B["Node B
120 Ω"]
end
style L_T1 fill:#ff6b6b,stroke:#333,color:#fff
style L_T2 fill:#ff6b6b,stroke:#333,color:#fff
style L_A fill:#e8e8e8,stroke:#333
style L_B fill:#e8e8e8,stroke:#333
style L_C fill:#e8e8e8,stroke:#333
style L_D fill:#e8e8e8,stroke:#333
style L_W1 fill:#4a90d9,stroke:#333,color:#fff
style L_W2 fill:#4a90d9,stroke:#333,color:#fff
style L_W3 fill:#4a90d9,stroke:#333,color:#fff
style L_W4 fill:#4a90d9,stroke:#333,color:#fff
style ST_HUB fill:#4a90d9,stroke:#333,color:#fff
style ST_A fill:#e8e8e8,stroke:#333
style ST_B fill:#e8e8e8,stroke:#333
style ST_C fill:#e8e8e8,stroke:#333
style ST_D fill:#e8e8e8,stroke:#333
style H_T1 fill:#ff6b6b,stroke:#333,color:#fff
style H_T2 fill:#ff6b6b,stroke:#333,color:#fff
style H_T3 fill:#ff6b6b,stroke:#333,color:#fff
style H_REP fill:#FFD700,stroke:#333
style H_A fill:#e8e8e8,stroke:#333
style H_B fill:#e8e8e8,stroke:#333
style H_C fill:#e8e8e8,stroke:#333
style H_D fill:#e8e8e8,stroke:#333
style P_A fill:#e8e8e8,stroke:#333
style P_B fill:#e8e8e8,stroke:#333
style LINEAR fill:#e8f5e9,stroke:#4CAF50
style STAR fill:#fff3e0,stroke:#FF9800
style HYBRID fill:#fff8e1,stroke:#FFC107
style P2P fill:#E3F2FD,stroke:#1565C0
Figure: CAN01 05 topology variants
Star topology: Multiple nodes connect to a central point (hub) via equal-length cables. This is technically a violation of the ISO 11898-2 linear bus model, but it works reliably at lower bit rates (≤ 250 kbit/s) if all branches are short and equal in length. Some CAN repeater/hub ICs (e.g., TLE7250 in hub mode) are specifically designed for star topologies.
Hybrid (tree) topology: A trunk line with secondary branches, each of which has its own sub-nodes. This is common in vehicles where the wiring harness branches physically. Each branch acts like a long stub — keep branch lengths as short as possible and consider adding a CAN repeater at branch points for long runs.
Point-to-point: Only two nodes, one at each end with 120 Ω termination. This is the simplest CAN network and is common in bench-top development and testing setups.
| Topology | Pros | Cons | When to use |
|---|---|---|---|
| Linear bus | Best signal integrity, standards-compliant, predictable | Wiring must follow a single trunk | Default choice for all new designs |
| Star | Simplified wiring, centralized connections | Reflections at hub, limits bit rate | Low bit-rate body networks, short runs |
| Hybrid/tree | Matches physical wiring constraints | Needs careful impedance management | Vehicle harness-constrained layouts |
| Point-to-point | Simplest, no stub issues | Only two nodes | Bench testing, single-link connections |
💡 Tip: When in doubt, use a linear bus. Every other topology trades signal integrity for wiring convenience. If your physical layout forces a non-linear topology, add CAN repeaters at branch points to isolate impedance discontinuities.
4. Cable Specifications
4.1 Recommended Cable Types
ISO 11898-2 specifies a shielded or unshielded twisted pair with a characteristic impedance of 120 Ω ± 10% (108–132 Ω). The twist rate should be at least 33 twists per meter (1 twist per 30 mm) to maintain good common-mode rejection.
| Parameter | ISO 11898-2 Requirement | Typical cable | Unit |
|---|---|---|---|
| Characteristic impedance | 120 ± 12 | 120 | Ω |
| Conductor gauge | Not specified | 22–24 AWG | American Wire Gauge (AWG) |
| Propagation delay | ≤ 5 | 4.7–5.2 | ns/m |
| Direct Current (DC) resistance per conductor | Not specified | < 80 | mΩ/m |
| Shielding | Optional | Foil + drain wire for EMC-sensitive environments | — |
Common cable choices:
- DeviceNet thick cable (Belden 3082A or equivalent) — 18 AWG power pair + 22 AWG signal pair, 120 Ω impedance. Designed for industrial CAN networks. Excellent for long runs.
- DeviceNet thin cable (Belden 3084A or equivalent) — 22 AWG signal pair + 22 AWG power pair. Suitable for shorter drops and smaller enclosures.
- Automotive-grade CAN cable — typically unshielded twisted pair meeting SAE J2284 specs. Lighter and thinner for weight-critical applications. Designed for Electromagnetic Compatibility (EMC) in vehicle environments.
- Generic 120 Ω twisted pair — acceptable if verified at the target frequency with a cable impedance analyzer.
⚠️ Warning: Do not use standard Ethernet cable (Cat5/Cat6) for CAN. Ethernet cable has a characteristic impedance of 100 Ω, not 120 Ω. The 20% impedance mismatch causes reflections that degrade signal quality, particularly at 500 kbit/s and above.
4.2 Grounding and Shielding
Ground reference: Every node must share a common ground reference. The CAN transceiver’s V_SS (V_SS designates the negative supply pin, i.e., ground) pin connects to the local node ground, which must be connected to the bus ground through low-impedance wiring. Ground potential differences between nodes directly reduce noise margin.
Shield grounding: If using shielded cable, connect the shield to chassis ground at one end only to prevent ground loop currents from flowing through the shield. If ground loops cannot be avoided, use a capacitor (typically 100 nF) between the shield and ground at the second end to provide high-frequency shielding while blocking DC ground currents.
CAN_GND wire: Many CAN cable specifications include a third conductor for CAN ground (CAN_GND). SAE J1939 (heavy-duty vehicles) requires CAN_GND as a dedicated return path. Even when not required by your protocol, including CAN_GND is good practice — it guarantees a low-impedance return path between nodes and prevents ground offset from eroding your differential noise margin.
5. CAN Transceivers
The CAN transceiver is the interface between the CAN controller (digital domain) and the CAN bus (analog domain). It converts the single-ended digital TXD (transmit data) signal from the controller into differential CAN_H/CAN_L signals, and converts the received differential bus signal back into a single-ended RXD (receive data) signal.
5.1 Transceiver Architecture
A typical CAN transceiver has the following pins:
graph LR
subgraph MCU["Microcontroller"]
CTRL["CAN
Controller"]
end
subgraph XCVR["CAN Transceiver (e.g., MCP2562FD)"]
direction TB
subgraph TX["Transmit Driver"]
HSD["High-side
Driver"]
LSD["Low-side
Driver"]
end
subgraph RX["Receive Comparator"]
COMP["Differential
Comparator
V_diff > 0.9V → Dominant"]
end
end
subgraph BUS["CAN Bus"]
CANH["CAN_H"]
CANL["CAN_L"]
TERM["120 Ω"]
end
subgraph PWR["Power"]
VCC["VCC (3.3/5V)"]
CAP["100 nF"]
GND["GND"]
end
CTRL -->|"TXD
(0 = Dominant)"| TX
HSD -->|"drives high"| CANH
LSD -->|"drives low"| CANL
CANH -->|"CAN_H"| COMP
CANL -->|"CAN_L"| COMP
COMP -->|"RXD
(0 = Dominant)"| CTRL
CANH --- TERM --- CANL
VCC --- CAP --- GND
subgraph ESD["ESD Protection"]
TVS["TVS Diode
Array"]
end
CANH --- TVS --- CANL
style MCU fill:#90EE90,stroke:#333
style XCVR fill:#ADD8E6,stroke:#333
style TX fill:#87CEEB,stroke:#333
style RX fill:#87CEEB,stroke:#333
style CANH fill:#4a90d9,stroke:#333,color:#fff
style CANL fill:#e8943a,stroke:#333,color:#fff
style TERM fill:#ff6b6b,stroke:#333,color:#fff
style TVS fill:#DDA0DD,stroke:#333
Figure: CAN01 03 transceiver block
| Pin | Direction | Function |
|---|---|---|
| TXD | Input (from controller) | Transmit data — logic 0 drives bus dominant, logic 1 releases to recessive |
| RXD | Output (to controller) | Receive data — reflects the current state of the bus |
| CAN_H | Bidirectional (bus) | CAN High signal line |
| CAN_L | Bidirectional (bus) | CAN Low signal line |
| V_CC (positive supply) | Power | Supply voltage (typically 5 V for legacy, 3.3 V or 5 V for modern parts) |
| GND | Power | Ground reference |
| STB / S | Input | Standby mode control (optional — used for low-power sleep modes) |
Internal structure:
The transmit side uses complementary transistor pairs: - A high-side driver pulls CAN_H toward V_CC through a current-limiting resistor during dominant - A low-side driver pulls CAN_L toward GND through a current-limiting resistor during dominant - During recessive, both drivers are high-impedance — the bus floats to its common-mode voltage via the termination network
The receive side uses a differential comparator: - Compares CAN_H − CAN_L against an internal threshold (typically 0.7–0.9 V for dominant detection) - Outputs logic 0 (dominant) or logic 1 (recessive) on the RXD pin
5.2 Common CAN Transceivers
| Part | Manufacturer | Speed | V_CC | CAN FD | Key Features |
|---|---|---|---|---|---|
| MCP2551 | Microchip | 1 Mbit/s | 5 V | No | Legacy workhorse, being replaced by MCP2562FD |
| MCP2562FD | Microchip | 8 Mbit/s | 5 V (I/O: 1.8–5.5 V) | Yes | Level-shifting I/O, low EMC emissions |
| TJA1050 | NXP | 1 Mbit/s | 5 V | No | Automotive-qualified, very common |
| TJA1443 | NXP | 5 Mbit/s | 5 V | Yes | CAN FD with partial networking wake-up |
| SN65HVD230 | TI | 1 Mbit/s | 3.3 V | No | 3.3 V operation, popular in prototyping |
| TCAN4550 | TI | 5 Mbit/s | 5 V | Yes | Integrated CAN FD controller + transceiver (Serial Peripheral Interface (SPI)) |
5.3 Wiring a CAN Transceiver
Here is a minimal wiring example for a CAN node using an MCP2562FD transceiver connected to a microcontroller with an integrated CAN controller:
Microcontroller MCP2562FD CAN Bus
Key wiring rules:
-
Decoupling capacitor — place a 100 nF ceramic capacitor as close to the VCC pin as possible. Add a 10 µF bulk capacitor if the power supply trace is longer than 50 mm.
-
Ground connection — connect the transceiver GND directly to the local ground plane with the shortest possible trace. The transceiver ground is the reference for the differential receiver — any inductance in this path adds noise.
-
TXD/RXD routing — keep traces short and away from high-frequency switching signals. These are digital signals but they carry timing-critical data — added propagation delay on TXD/RXD shifts the sample point.
-
CAN_H/CAN_L routing — route as a differential pair with matched trace lengths. Keep them close together (≤ 2 mm spacing on a Printed Circuit Board (PCB)) to maximize common-mode rejection.
-
Electrostatic Discharge (ESD) protection — add Transient Voltage Suppressor (TVS) diode arrays (e.g., NUP2105L, PESD2CAN) on CAN_H and CAN_L at the connector. CAN bus lines are frequently exposed to ESD events through connectors, especially in automotive and industrial environments.
5.4 Transceiver Operating Modes
Most modern transceivers support multiple operating modes:
| Mode | Description | Current draw | When to use |
|---|---|---|---|
| Normal | Full transmit and receive capability | 5–70 mA (driving bus) | Active communication |
| Listen-only | Receive only, no bus driving | 5–10 mA | Bus monitoring, logging, reverse engineering |
| Standby / Sleep | Ultra-low power, no communication | 5–15 µA | Battery-powered devices between wake events |
| High-voltage wake | Can detect bus activity while in standby | 10–20 µA | Partial networking (ISO 11898-2:2016 Annex) |
💡 Tip: If you are building a bus sniffer or data logger, configure the transceiver in listen-only mode (or use a CAN controller with listen-only support). This prevents your device from sending acknowledgment bits, error frames, or accidentally corrupting bus traffic. For practical examples of configuring CAN interfaces and using socketCAN with these transceivers, see CAN-04 (Interfaces, Protocols, and Security).
5.5 Transceiver Bus Fault Protection
Modern CAN transceivers include extensive bus fault protection to survive the harsh electrical conditions found in automotive and industrial environments. The NXP TJA1443 is a representative example of a CAN FD transceiver with advanced protection features.
TJA1443 Bus Fault Protection Features
The TJA1443 provides the following protection on both CAN_H and CAN_L bus pins:
- Short-circuit-to-battery protection: Both CAN_H and CAN_L can withstand a direct short to the battery supply voltage (up to 40 V in automotive 12 V systems, including load-dump transients) without damage to the transceiver. The transceiver detects the overvoltage condition and disables the affected driver to prevent excessive current flow.
- Short-to-ground protection: Both CAN_H and CAN_L can withstand a direct short to ground. The transceiver limits output current and enters a protective state until the fault is cleared.
- Bus-line-to-bus-line short protection: If CAN_H and CAN_L are shorted together, the transceiver detects the condition and ceases transmission attempts that would otherwise draw excessive current through the shorted path.
Bus Fault Mode Behavior
When the TJA1443 detects a bus fault (short to battery, short to ground, or wire interruption), it enters a bus fault mode:
- The transceiver disables its output drivers on the affected pin to prevent damage and excessive current draw.
- It continues attempting to communicate in a degraded state — if only one bus line is faulted, the transceiver may still be able to receive by monitoring the unfaulted line.
- The transceiver periodically re-checks the fault condition. When the fault clears (e.g., the short is removed), the transceiver automatically returns to normal operation.
- During the fault, the TXD and RXD pins continue to operate — the host Microcontroller Unit (MCU) can detect the fault condition by monitoring the transceiver’s status outputs or by observing the increase in CAN error counters.
Selective Wake-Up Capability (ISO 11898-2:2016)
The TJA1443 supports selective wake-up as defined in ISO 11898-2:2016. This feature allows the transceiver to wake the host MCU from a sleep or standby state only when a specific CAN frame pattern is received on the bus:
- The transceiver contains an internal frame-matching filter that can be programmed (via SPI) with the CAN ID and optional data bytes of a “wake-up frame.”
- While the host MCU is in deep sleep (consuming microamps), the transceiver monitors the bus in a low-power listen mode (typically 10-20 uA).
- When a CAN frame matching the programmed pattern appears on the bus, the transceiver asserts its WAKE output pin, which is connected to the MCU’s wake-up interrupt input.
- Non-matching frames do not trigger a wake-up, allowing the MCU to remain in deep sleep during routine bus traffic that is not relevant to that node.
This selective wake-up capability is essential for partial networking in automotive systems, where many Electronic Control Units (ECUs) can sleep to reduce quiescent current draw while the bus remains active for other functions.
Protection Circuit Design Example
The following shows the recommended external component placement for a TJA1443 installation with ESD protection and EMI filtering:
VCC (5V)
|
+-- 100nF (C0G/NP0) -- GND [VCC bypass]
|
+----+----+
| TJA1443 |
| |-- CAN_H --+-- 30pF -- GND [optional EMI filter]
| | +-- ESD protection (PESD2CAN)
| |-- CAN_L --+-- 30pF -- GND
| | +-- ESD protection (PESD2CAN)
| |-- WAKE ---- MCU wake pin
+---------+
Component notes:
- 100 nF bypass capacitor (C0G/NP0): Placed as close to the VCC pin as possible. C0G/NP0 dielectric is preferred over X7R for its stable capacitance over temperature and voltage, ensuring consistent decoupling performance.
- 30 pF capacitors on CAN_H/CAN_L (optional): These provide a simple low-pass filter to attenuate high-frequency EMI coupled onto the bus lines. The 30 pF value is small enough to avoid degrading CAN signal transitions at data rates up to 5 Mbit/s.
- PESD2CAN ESD protection: The PESD2CAN (NXP) provides +/-25 kV ESD protection (Human Body Model (HBM)) and <1 pF capacitance, making it suitable for CAN buses without degrading signal integrity. The low capacitance is critical — higher-capacitance TVS diodes can slow CAN signal transitions and close the eye diagram at CAN FD data rates.
- WAKE pin: Connected directly to the host MCU’s wake-up or interrupt input. This pin is asserted when the transceiver’s selective wake-up filter detects a matching frame.
📝 Note: The PESD2CAN provides ±25 kV ESD protection (HBM) and <1 pF capacitance, making it suitable for CAN buses without degrading signal integrity.
6. Bus Termination
Termination is the single most important physical-layer design decision. Incorrect termination is the number-one cause of CAN bus failures in the field.
6.1 Standard Termination
The standard termination scheme places a 120 Ω resistor between CAN_H and CAN_L at each physical end of the bus trunk. Each 120 Ω resistor individually matches the cable’s 120 Ω characteristic impedance — this is the design target, ensuring that signal energy arriving at each bus endpoint is absorbed rather than reflected. When you measure resistance across the bus with both terminators present (and the bus powered off), you will read 60 Ω because the two 120 Ω resistors appear in parallel from any measurement point. This 60 Ω measurement is a diagnostic indicator that both terminators are correctly installed, not the impedance-matching design target itself.
120 Ω 120 Ω
Verifying termination with a multimeter:
- Power off all nodes on the bus.
- Measure resistance between CAN_H and CAN_L at any point on the bus.
- You should read approximately 60 Ω (two 120 Ω resistors in parallel).
- If you read 120 Ω, one termination resistor is missing.
- If you read 40 Ω, there are three termination resistors (one too many — find and remove it).
- If you read open circuit (∞), there are no termination resistors.
| Measured resistance | Interpretation |
|---|---|
| 60 Ω | Correct — two 120 Ω terminators |
| 120 Ω | One terminator missing |
| 40 Ω | Three terminators — remove one |
| < 40 Ω | Multiple extra terminators or a short |
| Open (∞ Ω) | No termination at all |
⚠️ Warning: Never place a termination resistor on a stub — only on the trunk at its physical endpoints. A termination resistor in the middle of the bus creates an impedance discontinuity that splits the bus into two poorly terminated segments.
6.2 Split Termination
Split termination replaces each single 120 Ω resistor with two 60 Ω resistors in series, with a capacitor (typically 4.7 nF) connected from the midpoint to ground. This provides the same DC termination (120 Ω) while adding a low-pass filter for common-mode noise:
graph TB
subgraph STD["Standard Termination"]
direction LR
S_CANH["CAN_H"] --- S_R["120 Ω"] --- S_CANL["CAN_L"]
end
subgraph SPLIT["Split Termination (EMC Filter)"]
direction TB
SP_CANH["CAN_H"] --- R1["R1 = 60 Ω"]
R1 --- MID["Midpoint"]
MID --- R2["R2 = 60 Ω"]
R2 --- SP_CANL["CAN_L"]
MID --- C["C = 4.7 nF"]
C --- SP_GND["GND"]
end
subgraph NOTES["Comparison"]
direction TB
N1["DC: Both provide 120 Ω termination"]
N2["AC: Split termination adds common-mode
noise filter (10–20 dB reduction)"]
N3["Split termination recommended for CAN FD
and automotive EMC compliance"]
end
style S_R fill:#ff6b6b,stroke:#333,color:#fff
style R1 fill:#ff6b6b,stroke:#333,color:#fff
style R2 fill:#ff6b6b,stroke:#333,color:#fff
style C fill:#FFD700,stroke:#333
style MID fill:#fff,stroke:#333
style S_CANH fill:#4a90d9,stroke:#333,color:#fff
style S_CANL fill:#e8943a,stroke:#333,color:#fff
style SP_CANH fill:#4a90d9,stroke:#333,color:#fff
style SP_CANL fill:#e8943a,stroke:#333,color:#fff
style SP_GND fill:#666,stroke:#333,color:#fff
style NOTES fill:#f0f0f0,stroke:#999
Figure: CAN01 04 split termination
60 Ω 60 Ω
CAN_H ───┤├────┬────┤├─── CAN_L
│
4.7 nF
│
GND
Why use split termination:
- The capacitor at the midpoint provides a low-impedance return path to ground for common-mode noise (EMI)
- Reduces radiated emissions by 10–20 dB in the 30–100 MHz range
- Required by many automotive Original Equipment Manufacturer (OEM) EMC specifications
- Strongly recommended by ISO 11898-2:2016 for CAN FD applications
Split termination values:
| Component | Value | Tolerance | Notes |
|---|---|---|---|
| R1 (CAN_H side) | 60 Ω | ± 1% | Use precision resistors |
| R2 (CAN_L side) | 60 Ω | ± 1% | Matched to R1 |
| C (midpoint to GND) | 4.7 nF | ± 10% | C0G/NP0 ceramic for stability (C0G/NP0 is a temperature-stable dielectric, ±30 ppm/°C, ideal for timing and filtering) |
📝 Note: The total DC termination of a split terminator is R1 + R2 = 120 Ω — identical to a standard terminator. The only difference is the addition of the common-mode filter capacitor. Existing bus-resistance checks (measuring 60 Ω across the bus) remain valid.
6.3 AC-Coupled Termination
In applications where DC bias between CAN_H and CAN_L must be blocked (e.g., when a node uses an internal bias network that differs from the bus), an AC-coupled termination can be used. This places a capacitor in series with the standard 120 ohm termination resistor:
100 nF 120 Ω
CAN_H ───┤├────┬────┤├─── CAN_L
The capacitor blocks DC while passing the AC signal transitions that CAN relies on. This technique is rarely needed in standard automotive or industrial CAN but can be useful in laboratory setups where instrumentation injects DC bias onto the bus.
⚠️ Warning: AC-coupled termination changes the low-frequency impedance of the bus. It is not recommended for production designs unless specifically required by the system architecture. For most applications, use standard or split termination.
6.4 Worked Termination Examples
Example 1 — Verifying correct termination with a multimeter: - Bus powered off, all nodes disconnected or in unpowered state. - Measure resistance between CAN_H and CAN_L at connector J1: 60.2 ohm. - Interpretation: Two 120 ohm terminators are present in parallel (120 / 2 = 60 ohm). The 0.2 ohm above nominal is within the 1% resistor tolerance. The bus is correctly terminated.
Example 2 — Diagnosing a missing terminator: - Bus powered off. Measure CAN_H to CAN_L: 119.5 ohm. - Interpretation: Only one 120 ohm terminator is present. The bus is missing its second terminator. Check the node at the far end of the trunk — its termination resistor may have been removed, or the node may not be connected. - Fix: Install a 120 ohm resistor between CAN_H and CAN_L at the unterminated end of the trunk. Re-measure: expect approximately 60 ohm.
Example 3 — Diagnosing over-termination (three terminators): - Bus powered off. Measure CAN_H to CAN_L: 40.1 ohm. - Interpretation: Three 120 ohm resistors are present in parallel (1 / (1/120 + 1/120 + 1/120) = 40 ohm). An extra termination resistor has been added — likely on a development board with built-in termination enabled via jumper. - Fix: Identify and remove the extra terminator. Common locations: development boards with onboard termination jumpers, CAN adapters with built-in termination, or a connector with an integrated termination resistor. Re-measure: expect approximately 60 ohm.
Example 4 — Split termination component verification: - Bus powered off. Measure CAN_H to CAN_L: 60.1 ohm (same as standard termination — the capacitor blocks DC, so the multimeter reads only the resistive components). - To verify the split termination capacitor is present, measure from the resistor midpoint to GND with a capacitance meter: expect approximately 4.7 nF. - If the capacitor is open (failed), the termination still provides the correct 120 ohm DC resistance, but the EMI filtering benefit is lost. Replace the capacitor.
Example 5 — Termination troubleshooting with an oscilloscope: - Bus powered on, active traffic at 500 kbit/s. - Capture CAN_H and CAN_L waveforms with an oscilloscope. - With correct termination (60 ohm): Dominant pulses show CAN_H at ~3.5 V, CAN_L at ~1.5 V with clean, flat tops and minimal ringing on transitions (< 0.5 V overshoot). - With missing termination (120 ohm or open): Dominant pulses show significant ringing (> 1 V overshoot) on both CAN_H and CAN_L after each transition. The eye diagram shows a partially closed eye. At 500 kbit/s, communication may still work but with elevated error rates. At 1 Mbit/s, communication will likely fail. - With over-termination (40 ohm): Dominant pulse amplitudes are reduced (CAN_H may only reach ~3.0 V, CAN_L drops to ~2.0 V) because the lower termination resistance draws more current from the transceiver, causing greater voltage drop. V_diff is reduced from the nominal 2.0 V to approximately 1.0 V, eroding noise margin.
6.5 Termination Mistakes to Avoid
| Mistake | Consequence | How to detect |
|---|---|---|
| No termination | Massive reflections, bus may not work at all | Multimeter: open circuit between CAN_H and CAN_L |
| Single termination only | Reflections from unterminated end, intermittent errors at higher speeds | Multimeter: 120 Ω instead of 60 Ω |
| Termination on a stub | Signal integrity degradation, intermittent errors | Visual inspection of where the resistor is placed |
| Too many termination resistors | Excess current draw, attenuated signals | Multimeter: < 60 Ω between CAN_H and CAN_L |
| Wrong resistor value | Impedance mismatch, reflections | Multimeter: unexpected resistance value |
| Termination at connector with long leads | Lead inductance at high bit rates | Oscilloscope: ringing on transitions |
7. Node Count and Bus Loading
7.1 Maximum Number of Nodes
The ISO 11898-2 standard specifies that each CAN transceiver must present a differential input impedance of at least 10 kΩ when recessive (not driving). With two 120 Ω termination resistors in parallel (60 Ω), the bus is primarily loaded by the termination at DC.
The practical node limit is determined by two factors:
-
Transceiver drive capability — the transmitting transceiver must drive the terminated bus (60 Ω differential) plus all receiver input impedances in parallel. With 10 kΩ per node, adding nodes barely affects the DC load. The standard guarantees operation with up to 32 nodes on a single bus segment.
-
Input capacitance — each transceiver adds 10–25 pF of input capacitance. At high bit rates, cumulative capacitance slows transitions and reduces the usable bit time. With 32 nodes at 20 pF each, the total added capacitance is 640 pF — significant at 1 Mbit/s.
| Constraint | Value | Source |
|---|---|---|
| Max nodes per segment (standard) | 32 | ISO 11898-2 |
| Max nodes per segment (high-drive transceivers) | 64–128 | Transceiver datasheet |
| Differential input impedance per node | ≥ 10 kΩ | ISO 11898-2 |
| Input capacitance per node | 10–25 pF | Transceiver datasheet |
💡 Tip: If you need more than 32 nodes, use a **CAN bus repeater** (also called a CAN bridge) to split the network into multiple segments. Each segment has its own termination and supports up to 32 nodes. The repeater regenerates the signal between segments, extending both distance and node count.
7.2 Bus Loading Calculation
To verify that your bus can support a given number of nodes, calculate the total differential load:
def can_bus_load(n_nodes, r_term=120, r_in=10000, c_node_pf=20):
"""Calculate CAN bus differential load parameters."""
r_term_total = r_term / 2 # Two terminators in parallel
r_in_total = r_in / n_nodes # All receiver inputs in parallel
r_load = (r_term_total * r_in_total) / (r_term_total + r_in_total)
c_total_pf = n_nodes * c_node_pf
print(f"Nodes: {n_nodes}")
print(f"Termination load: {r_term_total:.1f} Ω")
print(f"Receiver load: {r_in_total:.1f} Ω")
print(f"Total differential load: {r_load:.1f} Ω")
print(f"Total bus capacitance (from nodes): {c_total_pf} pF")
can_bus_load(16)
can_bus_load(32)
# Expected output
Nodes: 16
Termination load: 60.0 Ω
Receiver load: 625.0 Ω
Total differential load: 54.8 Ω
Total bus capacitance (from nodes): 320 pF
Nodes: 32
Termination load: 60.0 Ω
Receiver load: 312.5 Ω
Total differential load: 50.3 Ω
Total bus capacitance (from nodes): 640 pF
Even with 32 nodes, the total load shifts from 60 Ω (termination only) to 50.3 Ω — a modest change. The capacitance increase is the bigger concern for signal integrity at high bit rates.
8. Power Supply Considerations
8.1 Transceiver Power Requirements
CAN transceivers typically draw 5–10 mA in standby and up to 60–70 mA when actively driving a dominant bit on a terminated bus. The current draw during dominant is:
I_dominant ≈ V_diff / R_load ≈ 2.0 V / 60 Ω ≈ 33 mA (per bus line)
Each bus line (CAN_H and CAN_L) carries approximately 33 mA during dominant, for a total transceiver output current of about 66 mA. In a system with high bus utilization, the average current draw depends on the dominant/recessive ratio.
8.2 Decoupling and Filtering
Every CAN transceiver requires local decoupling:
| Component | Value | Placement |
|---|---|---|
| Ceramic capacitor | 100 nF (C0G or X7R — X7R is a general-purpose dielectric, ±15% capacitance variation over temperature, suitable for bulk decoupling) | Within 5 mm of VCC pin |
| Bulk capacitor | 10 µF (tantalum or electrolytic) | Within 20 mm, on shared power rail |
| Ferrite bead (optional) | 100–600 Ω at 100 MHz | In series with VCC, before the 100 nF cap |
The ferrite bead provides additional high-frequency isolation between the transceiver and the rest of the circuit, which reduces conducted EMI.
8.3 Isolated CAN
In industrial and test equipment applications, you may need galvanic isolation between the CAN transceiver and the rest of your circuit. This is achieved by placing a digital isolator (e.g., ISO7721, ADuM1201) between the CAN controller and the transceiver, and powering the transceiver side from an isolated DC-DC converter.
When you need isolated CAN:
- Nodes are powered from different mains circuits (ground potential difference > 1 V)
- The CAN bus runs between buildings or across large distances
- You are connecting test equipment to a live vehicle bus
- Safety standards require isolation (e.g., medical, high-voltage Battery Management System (BMS))
⚠️ Warning: If you connect a non-isolated USB CAN adapter to a vehicle while the vehicle is also connected to a charger or battery tender, the ground potential difference can damage the adapter, the vehicle's CAN bus, or both. Use an isolated adapter for any vehicle bus connections where the ground relationship is uncertain.
9. Physical Fault Diagnosis
9.1 Tools You Need
| Tool | What it tells you | Minimum capability |
|---|---|---|
| Digital multimeter | DC voltage levels, termination resistance, continuity | DC voltage, resistance |
| Oscilloscope | Waveform shape, voltage levels, signal integrity, timing | ≥ 100 MHz bandwidth, 2 channels |
| CAN bus analyzer | Frame-level diagnostics, error counters, bus load | Any socketCAN (the Linux kernel CAN networking subsystem)-compatible adapter |
9.2 Multimeter Diagnostics
Step 1 — Check termination resistance (bus powered off):
- Disconnect all power to the bus.
- Measure resistance between CAN_H and CAN_L.
- Expected: 60 Ω (two 120 Ω resistors in parallel).
Step 2 — Check DC bias voltage (bus powered on, idle):
- Power on the bus with no active communication.
- Measure CAN_H to GND: expected 2.5 V (recessive common mode).
- Measure CAN_L to GND: expected 2.5 V.
- Measure CAN_H to CAN_L: expected 0 V (recessive V_diff).
| Measurement | Expected | Possible fault if incorrect |
|---|---|---|
| CAN_H to GND (idle) | 2.5 V | Transceiver fault, missing power, shorted bus |
| CAN_L to GND (idle) | 2.5 V | Transceiver fault, missing power, shorted bus |
| CAN_H − CAN_L (idle) | 0 V | Stuck dominant — a transceiver is holding the bus |
| CAN_H − CAN_L (active) | Oscillating | Normal operation |
9.3 Oscilloscope Diagnostics
Connect your oscilloscope to CAN_H and CAN_L using a differential probe (preferred) or two single-ended probes referenced to CAN_GND.
What a healthy CAN bus looks like:
- Dominant pulses: CAN_H rises to ~3.5 V, CAN_L drops to ~1.5 V, V_diff ≈ 2.0 V
- Recessive periods: Both lines at ~2.5 V, V_diff ≈ 0 V
- Clean transitions: Rise and fall times of 20–100 ns (depending on bit rate)
- No ringing: Transitions settle within 10–20% of the bit time
- Symmetric waveform: CAN_H excursion above 2.5 V should mirror CAN_L excursion below 2.5 V
Common oscilloscope fault patterns:
| Symptom | Probable cause | Action |
|---|---|---|
| V_diff never exceeds 0.5 V | No node is transmitting, or all nodes are in standby | Verify at least one node is powered and attempting to send |
| V_diff stuck at ~2.0 V (always dominant) | A transceiver is stuck dominant (hardware fault or TXD pin held low) | Disconnect nodes one at a time to find the stuck transmitter |
| Excessive ringing on transitions (> 1 V overshoot) | Missing termination, too-long stubs, or impedance mismatch | Check termination resistance, inspect stub lengths |
| Asymmetric waveform (CAN_H and CAN_L not mirrored) | One bus wire has higher resistance or a partial short | Check connector continuity, measure resistance of each wire independently |
| Slow rise/fall times (> 200 ns at 500 kbit/s) | Excessive bus capacitance (too many nodes or long cable) | Reduce node count or bus length, or lower the bit rate |
| Noise between dominant pulses (recessive not flat) | EMI, poor grounding, or ground potential difference between nodes | Improve shielding, check ground connections, consider isolated CAN |
9.4 Advanced Diagnostic: Eye Diagram
An eye diagram is created by overlaying many bit periods on the oscilloscope using the CAN bit clock as a trigger. The resulting pattern looks like an open “eye” — the wider and taller the eye opening, the better the signal quality.
Measuring an eye diagram:
- Configure your oscilloscope to trigger on the CAN_H or V_diff signal.
- Set the time base to show exactly one bit period (e.g., 1 µs/div at 1 Mbit/s).
- Enable infinite persistence or equivalent overlay mode.
- Let the bus run with typical traffic for at least 30 seconds.
- Evaluate the resulting eye pattern.
Interpreting the eye diagram:
- Wide vertical opening = good voltage margin (V_diff between dominant and recessive is well-defined)
- Wide horizontal opening = good timing margin (transitions are clean, jitter is low)
- Closed or narrow eye = the bus is marginal — errors will increase under stress (temperature, EMI, additional nodes)
Quantitative pass/fail criteria:
| Parameter | Minimum acceptable | Recommended | Derived from |
|---|---|---|---|
| Eye height (V_diff) | ≥ 1.2 V | ≥ 1.5 V | Dominant threshold (0.9 V) + noise margin |
| Eye width | ≥ 50% of bit time | ≥ 60% of bit time | Sample point must fall within open region |
| Transition time (10–90%) | ≤ 30% of bit time | ≤ 20% of bit time | Signal must settle before sample point |
If the eye height drops below 1.2 V at any measurement point, the bus is at risk of misinterpreting bits — the dominant signal is too close to the 0.9 V receiver threshold. If the eye width is less than 50% of the bit time, jitter or slow transitions are consuming too much of the bit period, leaving insufficient margin for the sample point.
💡 Tip: Capture eye diagrams at the farthest point from the transmitter, at the highest bus load, and at the highest ambient temperature your system will encounter. If the eye is open under these worst-case conditions, it will be open everywhere else.
9.5 Common Failure Scenarios and Resolution
Scenario 1: Bus works with 3 nodes but fails when a 4th is added
- Check: Measure termination resistance. The 4th node may have an internal 120 Ω resistor (some development boards enable termination by default via a jumper).
- Fix: Disable the internal termination on the new node. Total bus termination must be exactly two 120 Ω resistors at the trunk endpoints.
Scenario 2: Intermittent communication errors that increase with temperature
- Check: Re-measure signal levels at elevated temperature. Transceiver output levels drift slightly with temperature, and marginal termination becomes worse.
- Fix: Verify termination resistance, check cable connections for cold solder joints or corroded connectors, ensure 1% tolerance termination resistors.
Scenario 3: Bus works at 250 kbit/s but fails at 500 kbit/s
- Check: Capture an oscilloscope waveform. Look for ringing, slow transitions, or reflections.
- Fix: Shorten stubs, verify cable impedance is 120 Ω, ensure termination is only at trunk endpoints. Consider whether the bus length exceeds the practical maximum for the higher bit rate.
Scenario 4: One node cannot receive but all others communicate fine
- Check: Measure CAN_H and CAN_L voltages at the failing node. Measure the RXD pin of its transceiver.
- Fix: If bus voltages are correct at the node but RXD is stuck, the transceiver has failed. If bus voltages are absent, check wiring continuity to that node.
Scenario 5: Bus works on the bench but fails when installed in the vehicle/machine
- Check: Measure ground potential difference between nodes in the installed environment. Check for EMI sources near the CAN cable routing.
- Fix: Ensure all nodes share a common ground reference through CAN_GND. Reroute cable away from high-current switching (relays, motors, Pulse-Width Modulation (PWM) controllers). Add shielding if necessary. Consider isolated CAN adapters.
Scenario 6: Ground loop causes common-mode voltage violation
- Check: Measure the DC voltage between the local GND of each node and a common reference point (e.g., chassis ground). If the difference exceeds 1–2 V, your transceivers may be operating outside their common-mode input range (−2 V to +7 V per ISO 11898-2). Also measure CAN_H-to-local-GND and CAN_L-to-local-GND at each node — if either reading falls outside the transceiver’s rated common-mode range, the receiver will produce incorrect output.
- Fix: Equalize ground potentials by connecting all node grounds through a low-impedance CAN_GND conductor. If ground equalization is not possible (e.g., nodes on different mains circuits), use galvanic isolation (isolated CAN transceivers or digital isolator + isolated DC-DC power).
Scenario 7: CAN_H and CAN_L shorted together
- Check: With the bus powered off, measure resistance between CAN_H and CAN_L. If you read near 0 Ω (instead of the expected 60 Ω from termination), the two signal lines are shorted. With the bus powered on, the oscilloscope will show V_diff permanently near 0 V — the bus is stuck in the recessive state and no dominant bits can be driven.
- Fix: Disconnect bus segments one at a time to isolate the location of the short. Common locations: pinched cable at cable ties, crushed connector contacts, solder bridges on a PCB. Repair the short and verify 60 Ω termination resistance returns.
Scenario 8: Baud Rate Mismatch
- Symptom: The oscilloscope shows clean differential signals with proper voltage levels, but no CAN frames are decoded by a bus analyzer. Error counters on all nodes increment rapidly, and nodes may go bus-off (a state where the CAN controller disconnects from the bus after its error counter exceeds 255 — see CAN-03 for details). Running
candump(see CAN-04 for socketCAN tool usage) shows nothing or occasional garbage frames that fail Cyclic Redundancy Check (CRC) verification. - Root Cause: One node is configured for 250 kbit/s while the rest of the bus operates at 500 kbit/s. The mismatched node interprets the bus timing incorrectly — its bit boundaries do not align with those of the other nodes. Every frame it attempts to transmit appears corrupted to the other nodes (wrong bit timing), and every frame it receives from the other nodes also appears corrupted (it samples at the wrong points). This causes both the mismatched node and the correctly configured nodes to detect errors, increment their error counters, and transmit error frames.
- Diagnosis: Measure the bit width on the oscilloscope. At 500 kbit/s, one bit period is 2 us (microseconds). At 250 kbit/s, one bit period is 4 us. Zoom in on the CAN_H or V_diff waveform and measure the width of individual bits. If you observe two distinct bit widths in the bus traffic — some bits at 2 us and some at 4 us — a node is transmitting at the wrong baud rate. You can also disconnect nodes one at a time; when the mismatched node is removed, error-free communication will resume among the remaining nodes.
- Fix: Reconfigure the mismatched node to the correct baud rate. In socketCAN on Linux:
ip link set can0 type can bitrate 500000. In embedded firmware, update the CAN controller’s bit-timing registers to match the bus rate. After reconfiguration, power-cycle or reset the node to clear its error counters and exit any bus-off state.
Scenario 9: Floating TXD Pin
- Symptom: Random dominant states appear on the bus at irregular intervals, corrupting frames from other nodes. Error frames are frequent and may cause multiple nodes to go bus-off. The problem may be intermittent — it can appear and disappear as the floating pin drifts between voltage levels due to noise or temperature changes.
- Root Cause: A microcontroller’s CAN TX pin is unconfigured (floating) or has been incorrectly configured as a General-Purpose Input/Output (GPIO) pin in input mode instead of the CAN peripheral alternate function. When the TXD pin floats or is driven low by default GPIO state, the CAN transceiver interprets this as a “transmit dominant” command and drives the bus to the dominant state. This overwrites any frame currently being transmitted by another node, causing a bus-wide error.
- Diagnosis: Disconnect suspect nodes one at a time while monitoring bus traffic with a CAN analyzer or oscilloscope. When the problematic node is disconnected and bus errors disappear, that node is the source. To confirm, measure the TXD pin of the suspect node’s transceiver with an oscilloscope — it should be high (recessive) when the node is not intentionally transmitting. If TXD is low or toggling randomly, the MCU pin configuration is the issue.
- Fix: Ensure the MCU’s CAN TX pin is configured as the CAN peripheral alternate function (not GPIO). In STM32, for example, this means configuring the pin as AF (alternate function) mode with the correct AF number for the CAN peripheral. If the MCU is in reset, unprogrammed, or in a bootloader that does not configure CAN, add a pull-up resistor (10 kohm to VCC) on the TXD line between the MCU and the transceiver. This ensures the transceiver sees a recessive (high) state on TXD whenever the MCU is not actively driving the pin, preventing unintended dominant states on the bus.
10. Design Checklist
Use this checklist when designing or reviewing a CAN bus physical layer:
- **Bit rate selected** based on required bandwidth and maximum bus length
- **Cable selected** with 120 Ω ± 10% characteristic impedance, twisted pair
- **Topology is linear bus** with trunk and short stubs (stubs < 0.3 m at 1 Mbit/s)
- **Exactly two 120 Ω termination resistors** at the physical endpoints of the trunk
- **Split termination used** if EMC compliance is required (2 × 60 Ω + 4.7 nF)
- **CAN FD-rated transceivers** selected if CAN FD is planned (even if not yet used)
- **Decoupling capacitors** placed within 5 mm of each transceiver VCC pin
- **ESD protection** (TVS diodes) on CAN_H and CAN_L at every external connector
- **CAN_GND** connected between all nodes with low-impedance wiring
- **Node count** verified within transceiver drive capability (≤ 32 for standard transceivers)
- **Oscilloscope verification** performed: eye diagram open at worst-case point
Troubleshooting
| # | Symptom | Likely cause | Diagnostic step | Resolution |
|---|---|---|---|---|
| 1 | No communication at all | Missing termination, no power to transceivers, CAN_H/CAN_L swapped | Measure termination resistance (expect 60 Ω); check DC bias (expect 2.5 V on both lines) | Add termination, fix wiring, verify power |
| 2 | Communication works briefly then stops | A node is going bus-off due to errors (Transmit Error Counter (TEC) > 255 — see CAN-03 for details) | Check error counters on all nodes using a CAN analyzer tool; capture oscilloscope waveform during failure | Fix the physical-layer issue causing errors (see scenarios above), then power-cycle the bus-off node |
| 3 | High error rate at higher bus loads | Marginal signal integrity under stress | Capture eye diagram under peak load | Improve termination, shorten stubs, check cable impedance |
| 4 | One specific node drops off the bus randomly | Loose connector, intermittent wire break, thermal fault | Wiggle test on connectors while monitoring bus; check at temperature extremes | Reseat or replace connectors, repair cable |
| 5 | Bus works in the lab, fails in the field | EMI, ground offset, longer cable runs than tested | Measure ground potential difference between nodes; capture oscilloscope waveform in the installed environment | Improve grounding/shielding, use isolated CAN if needed |
| 6 | CAN FD data phase errors but arbitration phase works | Signal integrity insufficient at the higher data-phase bit rate | Capture oscilloscope waveform showing arbitration-to-data phase transition | Shorten bus, shorten stubs, verify CAN FD-rated transceivers, check transceiver symmetry |
| 7 | CAN_H stuck at battery voltage or GND | External short circuit on the bus wiring | Measure CAN_H and CAN_L to chassis ground | Locate and repair the short — disconnect segments to isolate the fault location |
References
-
ISO 11898-1:2015 — Road vehicles — Controller area network (CAN) — Part 1: Data link layer and physical signalling. International Organization for Standardization.
-
ISO 11898-2:2016 — Road vehicles — Controller area network (CAN) — Part 2: High-speed medium access unit. International Organization for Standardization.
-
ISO 11898-3:2006 — Road vehicles — Controller area network (CAN) — Part 3: Low-speed, fault-tolerant, medium-dependent interface. International Organization for Standardization.
-
Robert Bosch GmbH (1991) — CAN Specification Version 2.0. The original CAN specification defining the data link layer.
-
SAE J2284-1 through J2284-5 — High Speed CAN for Vehicle Applications (various revisions). SAE International. Specifies physical layer requirements for automotive CAN at different bit rates.
-
SAE J1939-11:2022 — Physical Layer — 250 kbit/s, Twisted Shielded Pair. SAE International. Defines the J1939 physical layer for heavy-duty vehicles.
-
NXP Application Note AN1798 — CAN Physical Layer Discussion. Detailed analysis of CAN signal integrity and termination.
-
Microchip Application Note AN228 — A CAN Physical Layer Discussion. Transceiver selection and wiring guidance.
-
Texas Instruments Application Report SLLA270 — Controller Area Network Physical Layer Requirements. Comprehensive guide to CAN PHY design.
-
Kvaser CAN Protocol Tutorial — CAN Bus Physical Layer. Practical introduction to CAN bus wiring and diagnostics.
Changelog
| Version | Date | Author | Summary of changes |
|---|---|---|---|
| 1.0 | 2026-03-16 | Telematics Tutorial Series | Initial publication |
| 1.1 | 2026-03-16 | Telematics Tutorial Series | Polish pass: expanded all acronyms on first use (ISO, MCU, ECU, GPIO, HBM, CRC, NRZ, DC, V_BAT, V_SS, V_CC); standardized callout formatting; added cross-references to CAN-02, CAN-03, CAN-04; added NRZ encoding explanation; added 5 worked high-speed CAN voltage examples; added AC-coupled termination section (6.3) and 5 worked termination examples (6.4); added language identifiers to all code blocks; added ISO 11898-3 version year; improved SAE J2284 reference |
```