Blog
ISO 15765-2 (CAN-TP): The Complete Guide to CAN Transport Protocol
July 28, 2026
Classic CAN frames top out at 8 data bytes. That's plenty for a sensor reading or a status flag, but it's nowhere near enough for a diagnostic trouble code report, a firmware download, or a security seed/key exchange. ISO 15765-2 — commonly called CAN-TP or ISO-TP — is the transport layer that solves this by segmenting larger payloads into a sequence of CAN frames and reassembling them on the receiving end, with a flow-control mechanism to keep sender and receiver in step.
It's easy to confuse ISO 15765-2 with ISO 15765-4. They are not the same specification, and mixing them up leads to real integration problems: ISO 15765-4 is the OBD-II-specific network layer (fixed baud rate, standardized addressing, emissions-related diagnostics), while ISO 15765-2 is the general-purpose transport protocol underneath it — the same segmentation and flow-control mechanism that also carries UDS (ISO 14229) diagnostics, proprietary application messages, and non-OBD-II CAN traffic in industrial, off-highway, and commercial vehicle systems. If your project needs transport-layer segmentation for anything beyond legislated OBD-II PIDs — UDS diagnostic sessions, ECU reflashing, custom multi-byte application messages — you need ISO 15765-2, not ISO 15765-4.
Classic CAN 2.0 frames carry up to 8 bytes of data. CAN FD extends this to 64 bytes, but even that ceiling gets hit quickly by anything resembling a real payload: a UDS "Read Data by Identifier" response, a security access seed, or a block of firmware being downloaded during a reflash. ISO 15765-2 defines how to:
This sits at OSI Layer 4 (transport), below the diagnostic/application protocols (UDS, KWP2000, proprietary protocols) that actually interpret the reassembled payload's meaning.
ISO 15765-2 defines four PCI (Protocol Control Information) frame types — Single Frame (SF), First Frame (FF), Consecutive Frame (CF), and Flow Control (FC) — distinguished by the high nibble of the first data byte. A payload that fits in one frame is sent as a Single Frame with no further handshake needed. A larger payload starts with a First Frame announcing the total length, is met with a Flow Control frame from the receiver specifying BlockSize and STmin, and is then delivered across sequentially numbered Consecutive Frames until reassembly completes on the receiving end.
We've covered this handshake — SF/FF/CF/FC, STmin, and Block Size — in detail in our ISO 15765-4 (OBD-II over CAN) guide, since the same ISO-TP mechanism underlies OBD-II diagnostics. What follows here goes beyond that OBD-II-specific implementation into the parts of ISO 15765-2 that a general-purpose, multi-application transport layer needs to handle.
ISO 15765-2 supports multiple addressing schemes, which determine how CAN identifiers map to source/target/functional addressing — a distinction that matters as soon as more than two nodes share a bus.
| Aspect | Normal Addressing | Normal Fixed Addressing | Extended Addressing | Mixed Addressing |
|---|---|---|---|---|
| Address info location | Implicit in the CAN ID itself | Encoded within a fixed 29-bit CAN ID scheme (used by ISO 15765-4/J1939-style IDs) | First data byte carries target address; PCI shifts to second byte | Combination of CAN ID and an address extension byte |
| Data bytes available (classic CAN CF) | 7 | 7 | 6 (one byte consumed by address) | 6 |
| Typical use case | Point-to-point diagnostics on simple bus topologies | OBD-II and SAE J1939-based systems needing standardized, self-describing IDs | Multiple ECUs sharing CAN IDs, requiring explicit addressing per message | Systems needing both physical and functional addressing flexibility |
| Complexity to implement | Lowest | Moderate — requires managing the 29-bit ID structure | Moderate — extra byte parsing per frame | Highest |
Choosing the wrong addressing format for a given network topology is one of the most common sources of interoperability failures between tools from different vendors — a diagnostic tester expecting Normal Fixed Addressing will not correctly parse traffic from an ECU configured for Extended Addressing, even though both are valid ISO 15765-2 configurations.
| Aspect | ISO 15765-2 (CAN-TP) | ISO 15765-4 (OBD-II over CAN) |
|---|---|---|
| Scope | General-purpose transport layer: segmentation, reassembly, flow control | Application of CAN-TP specifically for legislated OBD-II diagnostics |
| Layer | Transport (Layer 4) | Network layer implementation profile built on top of CAN-TP |
| Addressing | Multiple formats supported (Normal, Extended, Mixed, Fixed) | Fixed addressing scheme with standardized 11-bit/29-bit CAN IDs (e.g., 0x7DF/0x7E8) |
| Baud rate | Application-defined | Fixed at 500 kbps (or 250 kbps for certain heavy-duty applications) |
| Use cases | UDS diagnostics, ECU reflashing, proprietary CAN messaging, any multi-frame CAN payload | Emissions-related PIDs, legislated OBD-II scan tool communication only |
| Dependency | Standalone transport spec | Depends on and references ISO 15765-2 for its underlying frame segmentation |
In short: ISO 15765-4 is a specific, constrained profile of ISO 15765-2. Implementing only the -4 profile means an ECU can talk OBD-II, but it cannot support the broader set of UDS diagnostic services, manufacturer-specific CAN messaging, or non-OBD-II network topologies that a full ISO 15765-2 transport layer enables. Any system needing UDS-based reflashing, extended diagnostic sessions, or proprietary multi-frame application data over CAN needs the complete -2 implementation, not just the -4 subset.
A production-grade ISO 15765-2 stack has to handle more than the happy-path FF/FC/CF exchange:
Simma Software's protocol stacks span the full diagnostic and transport stack that ISO 15765-2 sits within — CAN, UDS, ISO 15765-4/OBD-II, KWP2000, and J1939 — all written in 100% ANSI C against a stable, vendor-independent hardware API (can_tx(), can_rx(), nv_write(), nv_read(), and similar). Because our stacks are built for deterministic, hard real-time performance — typically ~2% CPU utilization while sustaining ~8,000 CAN frames/sec — a full ISO 15765-2 transport layer integrates without disturbing the timing guarantees the rest of the application depends on, whether it's supporting UDS-based ECU reflashing, extended diagnostic sessions, or proprietary multi-frame CAN messaging beyond what an OBD-II-only implementation can carry.
Yes. "ISO-TP" and "CAN-TP" are both common shorthand names for ISO 15765-2, the CAN Transport Protocol standard.
If your system only needs to respond to legislated OBD-II PIDs, the -4 profile alone may suffice. But ISO 15765-4 is built on top of ISO 15765-2's segmentation and flow-control mechanism with a constrained addressing/baud-rate profile — it does not include the broader addressing formats or general-purpose transport capability needed for UDS diagnostic sessions, ECU reflashing, or proprietary CAN messaging. Most systems that need more than basic emissions diagnostics need the full -2 implementation.
The First Frame length field allows payloads up to 4095 bytes under the standard addressing scheme, with an extended length mechanism in later revisions of the standard supporting larger payloads for CAN FD-based systems.
Yes. ISO 15765-2 has been extended to support CAN FD's larger frame payloads (up to 64 bytes), which reduces the number of Consecutive Frames needed for a given payload size compared to classic CAN's 8-byte frames.
Mismatched addressing formats (e.g., one node using Extended Addressing while another expects Normal Fixed Addressing) and incorrect STmin/timeout handling are the two most common sources of failures between tools and ECUs from different vendors, even when both sides claim standard compliance.