Dek: As connected vehicles and EV diagnostics scale up, a quiet workhorse keeps data flowing across the CAN bus: ISO-TP’s Consecutive Frames. Here’s a plain-English explainer of sequence numbers, 12-bit lengths, and why flow control matters.
Dateline: MELBOURNE — 12 February 2024
Modern cars don’t just drive; they negotiate a nonstop exchange of messages between electronic control units. That traffic runs over the Controller Area Network (CAN). But when a message is bigger than a single CAN frame, another layer steps in: ISO-TP (ISO 15765-2). It breaks a long message into ordered slices, sends them safely, and reassembles them at the other end — with built-in checks to catch anything missing.
Below, we unpack the part most engineers touch first: Consecutive Frames (CF), the sequence numbers they carry, and the practical limits behind the standard’s headline maximum of 4095 bytes.
What ISO-TP solves
A single CAN frame only has room for a handful of data bytes. Diagnostics, firmware updates, and richer telemetry need more. ISO-TP defines how to segment a larger payload, announce the total length, pace the transfer, and verify that each chunk arrives in the right order.
The sequence: First Frame → Flow Control → Consecutive Frames
When the sender needs more than one frame, it starts with a First Frame (FF). Inside that FF is a 12-bit length field that declares the total user data size (up to 4095 bytes). The receiver answers with Flow Control (FC) to set the pace — how many CFs can be sent before pausing, and the minimum gap between frames. Then the stream of Consecutive Frames (CF) begins.
Consecutive Frames carry a rolling sequence number
Each CF starts with a 1-byte Protocol Control Information (PCI):
-
High nibble =
0x2(meaning “this is a CF”) -
Low nibble = Sequence Number (SN)
The SN pattern is simple and cyclical:
SN starts at 1 and increments per frame:
0x21, 0x22, 0x23, …, 0x2F, 0x20, 0x21, …
^ wrap from F to 0
That rolling counter lets the receiver spot a lost or out-of-order frame immediately. If a CF arrives with an unexpected SN, the receiver knows reassembly can’t continue cleanly.
You may see explanations referring to the “0-th chunk” of data after the FF. In practice, you don’t need to label a “chunk 0” — you just append each CF’s payload in order as SN ticks 1→F→0→1…
Hex, not hype: a tiny worked example
Goal: Transfer a 100-byte payload.
-
First Frame (FF):
The FF announces the total payload via its 12-bit length. Example bytes could begin10 64 …-
0x1= First Frame -
0x064= 100 bytes total payload
-
-
Flow Control (FC) from receiver:
Example30 08 05 …→ Continue (CTS), Block Size = 8, STmin = 5 ms -
Consecutive Frames (CFs):
Sender transmits CFs with rolling SN:21 …,22 …,23 …, …2F …,20 …,21 ……
until all 100 bytes are delivered.
The receiver appends data from each CF in order and stops when the announced length has been reached.
How many CFs will you need?
Let:
-
L= total payload (from FF’s 12-bit length, 0…4095) -
FF_data= bytes already carried by the FF itself -
CF_payload= usable data bytes per CF (commonly 7 with classic 11-bit CAN + normal addressing; may differ in other modes)
Then:
Remaining = L - FF_data
CF_count = ceil(Remaining / CF_payload)
Example: If L = 100, FF_data = 6, and CF_payload = 7 → Remaining = 94 → CF_count = 14.
Why flow control keeps it honest
Block Size (BS) tells the sender how many CFs to transmit before pausing for another control check, and STmin sets a minimum separation time between CFs. These guardrails prevent buffer overruns in slower ECUs and keep the bus civil under load.
The 4095-byte headline — and the real-world ceiling
The 12-bit length in the First Frame sets a theoretical maximum of 4095 bytes of user data per ISO-TP message. In practice, the cap is often lower due to receive buffer sizes, strict timing, or application-layer limits. Always verify the supported maximum in your tool or ECU’s documentation before assuming the full 4095.
Quick glossary
-
CAN (Controller Area Network): Robust in-vehicle bus for ECU messaging.
-
ISO-TP / ISO 15765-2: Transport protocol over CAN for multi-frame messages.
-
FF (First Frame): Announces total payload length and carries the first data bytes.
-
FC (Flow Control): Receiver pacing: Block Size and minimum separation time.
-
CF (Consecutive Frame): Subsequent data chunks with a rolling sequence number.
Why this explainer?
As cars, EVs, and diagnostic tools evolve, understanding the building blocks of data movement matters for technicians, students, and curious readers alike. This page is a concise reference you can bookmark, free of marketing fluff.
References & further reading
-
ISO 15765-2 — Road vehicles: Diagnostic communication over CAN — Part 2: Transport protocol and network layer services. International Organization for Standardization. (Latest edition and purchase/download available via ISO.)