CAN FD: Faster Data Phase, Up to 64 Byte Payload

CAN FD explained: dual bitrate data phase, 64-byte frames, DLC and CRC changes, firmware pitfalls, and migration with classical CAN nodes.

12 min readAhmet Zahid ArıcanUpdated 30 Oct 2026
CAN FD: 64-Byte Payload & Faster Data Phase
Contents & prerequisites

Why CAN FD exists: the limits of classical CAN

CAN FD (Controller Area Network with Flexible Data-rate) is an extension of classical CAN that raises the maximum payload from 8 bytes to 64 bytes and allows part of each frame to transmit at a higher bitrate than the arbitration phase. It was standardized by Bosch in 2012 and later folded into ISO 11898-1, specifically to address two things classical CAN never anticipated: ECUs (Electronic Control Units) that need to move sensor fusion data, firmware blocks, and diagnostic logs in near real time, and bus loads that routinely exceed 70% on a 500 kbit/s backbone.

Payload ceiling at 8 bytes and latency trade-offs

Classical CAN caps every frame at 8 data bytes, which forces any message larger than that into multiple frames stitched together by an upper-layer protocol. That segmentation is cheap in silicon but expensive in time and determinism: each additional frame carries its own 44-bit-minimum overhead (arbitration ID, control field, CRC, ACK, inter-frame space), and the receiving stack has to reassemble fragments in the correct order before the data means anything. For a 40-byte calibration record, classical CAN needs five frames; CAN FD needs one. The latency difference matters for control loops running at 1 kHz or faster, where waiting for five arbitration cycles to complete can eat a meaningful fraction of the loop budget.

Bandwidth saturation in modern vehicle ECU networks

A modern vehicle's body or powertrain CAN bus can carry traffic from dozens of ECUs — body control, battery management, ADAS (Advanced Driver-Assistance Systems) sensor nodes, infotainment gateways — and at 500 kbit/s that traffic saturates quickly once diagnostic and OTA (Over-The-Air) update payloads are added into the mix. Classical CAN's 8-byte limit means more frames are needed to move the same volume of data, and more frames means more arbitration overhead competing for the same wire. CAN FD's higher data-phase bitrate (typically 2 Mbit/s or higher, depending on transceiver and wiring) and larger payload reduce the number of frames needed for a given volume of data, which directly reduces bus occupancy for firmware update streams, logging, and large parameter blocks. If you're distributing firmware updates over this link, the frame-count reduction compounds nicely with Delta OTA binary diffs, where the diff payload is already minimized before it ever hits the wire.

Backward compatibility vs. breaking change

CAN FD is not backward-compatible at the frame level: a classical CAN controller cannot decode an FD frame, and will treat it as a bus error. It is physical-layer compatible, meaning FD and classical nodes can share the same wiring harness and the same termination network, but a classical-only node on that bus will flag every FD frame it sees as a form error and start incrementing its error counters. This is the central migration constraint discussed later — coexistence is possible, but only if every node on the bus either understands FD framing or is explicitly isolated from it.

How the data phase achieves higher bitrates

CAN FD splits each frame into two timing domains: an arbitration phase that runs at the classical bitrate for compatibility, and a data phase that can run several times faster once arbitration has resolved and only one transmitter remains active.

Separate arbitration and data phase clocks

The arbitration phase — identifier, RTR/IDE bits, and the start of the control field — runs at the nominal bitrate (commonly 500 kbit/s) because multiple nodes may still be contending for the bus and need to observe each other's bit levels in real time. Once the BRS (Bit Rate Switch) bit signals a rate change, the rest of the frame — DLC, data field, and CRC — can run at the faster data-phase bitrate, since only the winning transmitter is driving the bus at that point and arbitration-style bit-by-bit monitoring is no longer required.

Bit timing and sampling point adjustment for FD

Switching bitrates mid-frame means the controller needs two separate bit timing configurations: one set of prescaler, propagation segment, and phase segment values for arbitration, and a second set for the data phase. The data-phase sample point typically needs to sit earlier in the bit period than the arbitration-phase sample point, because at higher bitrates there is less margin to absorb propagation delay and transceiver loop delay before the next bit starts. Getting this wrong doesn't throw an obvious compile-time error — it shows up as sporadic CRC failures or bit errors under worst-case bus length and temperature, which is why bit timing is one of the first things to verify on a scope, not just in a configuration register.

Transceiver and controller requirements for dual-rate operation

Not every CAN transceiver supports CAN FD; classical-CAN-only transceivers will distort the data-phase edges at higher bitrates because their propagation delay and slew rate were only characterized for the classical rate. Confirm transceiver FD support, loop delay, and maximum data-phase bitrate from its datasheet before committing to a board revision, and check the microcontroller's CAN peripheral documentation for whether it implements ISO 11898-1:2015 FD (with the corrected CRC) or the earlier Bosch non-ISO FD variant — mixing those two on one bus will cause CRC mismatches that look like signal integrity problems but are actually a protocol version mismatch.

Frame structure: what changed from classical CAN

A CAN FD frame reuses the classical frame skeleton but changes three structural elements: a new flag bit, an extended DLC (Data Length Code) encoding, and a different CRC polynomial with adjusted stuff-bit handling.

FDF flag and BRS (Bit Rate Switch) bit placement

The FDF (FD Format) bit, located where the reserved bit sits in a classical frame, tells the receiver this is an FD frame rather than a classical one. Immediately after it, the BRS bit indicates whether the data phase switches to the faster bitrate; a frame can set FDF without setting BRS, which produces an FD-formatted frame (larger payload) that still runs entirely at the arbitration bitrate — useful for buses with marginal signal integrity that can't support a faster data phase but still need payloads beyond 8 bytes.

DLC encoding for frames larger than 8 bytes

Classical CAN's 4-bit DLC field maps linearly to 0–8 bytes. CAN FD reuses the same 4-bit field but maps the upper codes non-linearly: values above 8 represent 12, 16, 20, 24, 32, 48, and 64 bytes rather than 9 through 15. Firmware that parses DLC with a simple lookup table ported from classical CAN will silently misinterpret payload length on any FD frame larger than 8 bytes — check the exact mapping table in ISO 11898-1 rather than assuming linearity.

CRC and stuffing rule modifications

CAN FD uses a longer CRC (17-bit for payloads up to 16 bytes, 21-bit for larger payloads) instead of classical CAN's 15-bit CRC, because the larger payload needs stronger error detection to maintain an equivalent residual error probability. It also changes the bit-stuffing rule: classical CAN stuffs after five consecutive identical bits anywhere in the frame, while CAN FD uses fixed stuff bits at defined positions within the CRC field to prevent stuff-bit timing from interacting unpredictably with the bitrate switch. A controller or protocol analyzer built for classical CAN that tries to decode FD stuffing will report phantom bit-stuffing errors — this is one of the most common "my FD link is broken" tickets that turns out to be a tooling mismatch, not a wiring fault.

When to use 64-byte payloads vs. segmentation

Use the full 64-byte payload when a single logical data unit needs to arrive atomically; fall back to segmentation when the data is naturally streamed or when buffer memory is the binding constraint.

Atomic transaction requirements and reduced overhead

A 64-byte CAN FD frame delivers a block of data with a single CRC covering the whole payload and a single arbitration event, which means the receiver either gets the whole block correctly or detects an error on the whole block — there's no partial-frame reassembly window where an ECU could act on half-updated data. For calibration tables, diagnostic trouble code snapshots, or security key exchanges, that atomicity is worth more than the marginal bus-time savings.

Comparison to PDU streaming and CANopen segmentation

ApproachMax payload per transferAtomicityOverhead per byteTypical use
Classical CAN segmentation (e.g., ISO-TP)Effectively unbounded, multi-frameNo — reassembly requiredHigh (frame overhead × fragment count)Diagnostics, legacy ECUs
CANopen SDO segmented transferEffectively unbounded, multi-frameNo — protocol tracks segmentsModerate, with handshake per segmentParameter configuration over CANopen
CAN FD single frame64 bytesYes — single CRCLow, one frame covers the blockFirmware blocks, sensor fusion snapshots

CANopen's SDO (Service Data Object) segmented transfer protocol, built on classical CAN's 8-byte limit, was designed precisely to work around the fragmentation problem described above — and understanding CANopen's object dictionary and SDO/PDO model clarifies why many existing CANopen stacks don't automatically benefit from CAN FD without changes to the mapping layer that decides how many object dictionary entries fit per frame.

CPU and buffer memory trade-offs in firmware design

Larger frames mean larger receive buffers: an FD-capable CAN peripheral with 64-byte frames and a deep FIFO (First-In-First-Out buffer) can require several kilobytes of dedicated RAM just for message objects, which is a real constraint on microcontrollers with 32–64 KB of total RAM. Budget buffer memory based on worst-case burst traffic, not average traffic, since CAN FD's whole value proposition is handling bursts (firmware blocks, diagnostic dumps) that classical CAN would have spread out over many frames and many interrupt cycles.

Software implementation: driver and protocol stack design

Configuring a microcontroller for CAN FD means setting two bit-timing register sets, sizing DMA (Direct Memory Access) buffers for 64-byte frames, and making sure the interrupt and CRC-checking paths were actually written for FD, not adapted from a classical CAN driver without checking the DLC mapping.

DMA configuration for larger frame buffers

Most FD-capable CAN peripherals move received frames into RAM via DMA rather than reading them register-by-register, because an 8-byte classical frame could be read a word at a time but a 64-byte FD frame at 2 Mbit/s arrives faster than most interrupt service routines can drain it without DMA. Configure the DMA descriptor for the full 64-byte maximum even if most traffic on your bus uses smaller payloads — undersized descriptors silently truncate larger frames, and that failure mode often doesn't surface until a firmware update or diagnostic tool sends the first full-size frame in production.

Interrupt handling and timing under dual bitrates

An ISR (Interrupt Service Routine) written for classical CAN assumes a roughly fixed worst-case frame duration when budgeting how much work it can do per message. CAN FD breaks that assumption because frame duration now depends on whether BRS was set and what data-phase rate was negotiated — a non-BRS FD frame with 64 bytes at 500 kbit/s takes meaningfully longer on the wire than the same payload at a 2 Mbit/s data phase. Profile ISR execution time against both the fastest and slowest frame configurations your bus will carry, not just the nominal case, since an ISR that's fine for slow frames can start dropping messages when the bus switches to all-fast-data-phase traffic during a firmware update burst.

Validation and CRC checking in firmware

Always verify the CAN FD CRC in firmware even if the peripheral reports hardware CRC validation, because some early FD silicon implemented the pre-ISO Bosch CRC definition and will pass frames that a strict ISO 11898-1:2015 receiver would reject — mixing these silently corrupts data without raising an error flag anywhere in the stack. Cross-check the controller's reference manual against the CAN FD protocol version it implements before trusting hardware CRC status bits in a safety-relevant path.

CAN FD link problems concentrate at the data-phase/arbitration-phase boundary and at physical layer margins that classical CAN never stressed, so troubleshooting starts with isolating which phase is failing before blaming the wiring.

Common signal integrity issues at higher data rates

Stub length, unmatched termination, and transceiver loop delay all become more significant at a 2 Mbit/s or higher data-phase rate than they were at 500 kbit/s, because the bit period shrinks and there's less time for reflections to settle before the sample point. A stub that was harmless at classical CAN rates can produce ringing that corrupts data-phase bits while leaving arbitration-phase bits (sampled at the slower rate) intact — a frame that fails intermittently with a correct arbitration ID but a bad CRC is a strong signal integrity red flag.

Diagnosing FD frame rejection and bit stuffing errors

If a node reports form errors or bit-stuffing errors only on FD frames, check first whether that node's CAN controller has FD mode enabled at all — a classical-only or FD-disabled controller will reject every FD frame as malformed, and this looks identical to a wiring fault from the bus analyzer's perspective. If FD mode is enabled and errors persist, verify the DLC decode table and CRC length configuration match the ISO 11898-1:2015 definition rather than the earlier Bosch draft, since a mismatch here produces CRC errors that look exactly like noise-induced corruption.

Lab verification of arbitration and data phase timing

Verify bit timing with an oscilloscope or protocol-aware logic analyzer that can decode both phases separately, measuring actual sample point position against the configured nominal and data-phase bit timing values. Do this at the worst-case bus length and worst-case supply voltage/temperature your hardware will see in the field — margin that looks comfortable on a bench at 25°C with a short harness can disappear on a production harness at the vehicle's thermal extremes.

Migration path: coexistence with classical CAN nodes

CAN FD and classical CAN nodes can share a physical bus, but only with explicit network design — a classical node on an FD bus will flag every FD frame as a protocol violation and can disrupt the whole network through escalating error counters.

FD-capable controller behavior in mixed networks

An FD-capable controller can be configured to transmit classical-only frames, FD frames without bitrate switching, or full FD frames with BRS — and most mixed-network deployments keep FD traffic restricted to FD-only segments or gateway it through a bridge ECU that translates between domains. This is also where precise timestamping matters: if FD and classical segments are bridged and both need to agree on event ordering across the gateway, the timing discipline typically comes from a shared reference like gPTP (IEEE 802.1AS) time synchronization rather than from CAN bus timing alone.

Fallback modes and graceful degradation

Design FD nodes so that losing data-phase capability (due to a misconfigured transceiver or a bus segment that can't support the higher rate) degrades to FD-format-without-BRS or classical framing rather than failing silently. A node that can detect persistent CRC errors on its own transmitted FD frames and fall back to classical framing avoids taking down an entire bus segment over a single marginal connector or cable run.

Testing strategy for gradual deployment

Roll out CAN FD incrementally: validate each new FD node in isolation on a bench bus with known-good termination and transceivers, then add it to a mixed network one node at a time while monitoring error counters on every classical node already present. Keep a rollback path — firmware that can revert an ECU to classical-only CAN framing — available until the full node population on a given bus segment has been confirmed FD-capable and field-tested under real harness and thermal conditions, not just bench conditions.

Learning

Sign in to track your progress.

Evidence

Public projects engineers linked to CAN FD: Faster Data Phase, Up to 64 Byte Payload.

Add evidence

No engineer has linked a project to this topic yet. Built something that proves it? Add the project and tag it with firmware-software-can-fd-faster-data-phase-up-to-64-byte-payload — it then shows here and on your public profile.