Skip to main content
Where a capture timestamp is applied, drawn as a vertical stack from the wire and PHY up through capture hardware, the driver and kernel, and the host application, with the accuracy class narrowing towards the wire and widening towards the application, from GSAS Micro Systems India

Multi-Bus Capture: CAN, LIN, FlexRay, Ethernet

GSAS Engineering · · 12 min read

Correlating CAN, LIN, FlexRay and Ethernet means putting every frame on one time base rather than merging logs from independently clocked tools. Capture all buses through hardware-timestamped modules disciplined by a shared clock, then align. Where the timestamp is applied decides what it can prove: an application-level timestamp carries the host operating system's scheduling jitter, a kernel socket timestamp is taken just after the driver hands the packet to the receive stack, and a hardware timestamp is generated by the adapter itself. Only the hardware class, on a disciplined clock, supports an ordering claim between two buses.

Two logs of the same test. The CAN log has the request going out at 12.483. The Ethernet capture has the response arriving at 12.461. The answer preceded the question, which did not happen, and the session is now guesswork.

This is the most repeated complaint in vehicle network forum threads, and the answers are thin. Product pages assert their own synchronisation without explaining the mechanism; forum replies stop at “use one tool for everything”, advice about procurement rather than about time.

The mechanism is not complicated. Every frame gets a timestamp somewhere between the wire and your file, where it is stamped decides what the number can prove, and unless both buses were stamped against one clock, no post-processing makes two files one timeline. Proving the shared clock itself is the subject of validating time sync.

Why two logs of the same event do not line up

Independent clocks, independent start moments, independent drift

Two instruments produce three independent error terms, and treating them as one is where most attempted fixes fail.

Offset. The tools started their clocks at different moments. Constant, and the only term one alignment marker removes.

Drift. Their oscillators do not run at the same rate, so the gap widens as the session runs. The design house overview of timestamping in multi-ECU systems cited in our capture methods guide gives a typical crystal drift of 20 to 50 parts per million, or 20 to 50 microseconds of error per second. At the low end a two-hour soak accumulates 0.144 seconds, so an alignment done at minute zero is worth nothing at minute one hundred and twenty.

Jitter. Each capture path adds random variation. It does not accumulate the way drift does, and it does not cancel either, because you are making one measurement rather than averaging many.

Where the timestamp is actually applied: application, driver, or capture hardware

“The timestamp” is not one thing. A frame crosses the PHY, the adapter, the driver, the kernel receive stack and finally your capture application, and each height at which it can be stamped adds everything below it to the error.

The error budget: offset you can correct for, jitter you cannot

Offset comes out with one shared anchor event. Drift comes out with two, start and end, because two points define a linear correction. Jitter does not come out at all: it is the floor, and the floor decides whether your conclusion is measurement or opinion.

Why “close enough” fails exactly when the question is causality

Twenty microseconds of uncertainty is irrelevant when the question is “did this message appear” and fatal when it is “which came first”. Causality turns on the sign of a difference, and the sign of a difference smaller than your jitter floor is noise. Gateway latency and whether the ECU or the network is late are both causality questions.

The gateway blame problem

Symptom observed on Ethernet, cause on CAN or LIN, gateway in between

Vehicle Service Pros, writing on network communications in modern vehicles in October 2025, puts the gateway’s job plainly: gateway modules were introduced to allow messages travelling on different networks to be shared. Its example is vehicle speed arriving on CAN from the engine and translated to LIN for interior controls, so the doors lock at a programmed speed threshold.

So the argument starts like this. A service call goes out on Ethernet, the gateway translates it to CAN, an ECU responds, and the gateway translates back. Somebody watching only Ethernet reports responses 40 ms late; the ECU’s supplier replies that it responded in 6 ms. Both can be true.

Why an uncorrelated trace pair cannot distinguish a slow gateway from a late source

The Ethernet trace gives you one interval: request out, response in. Inside it sit three delays, gateway forward, ECU turnaround and gateway return: one observation, three unknowns. An uncorrelated CAN trace helps less than it feels like it should: it gives the ECU turnaround in the CAN log’s own time, but cannot place that interval inside the Ethernet one, because the two rulers have an unknown offset and drift between them.

What the trace has to show to assign blame: ingress time, egress time, one ruler

Four timestamps, one ruler: t1, request observed on Ethernet; t2, translated request observed on CAN; t3, response observed on CAN; t4, response back on Ethernet. Gateway forward latency is t2 minus t1, ECU turnaround is t3 minus t2, gateway return latency is t4 minus t3. The three add up to the interval the Ethernet-only view showed, and each now has an owner.

The same pattern in reverse for zonal architectures

Zonal designs move the problem rather than removing it. Traffic once observable on a vehicle-length bus now terminates a metre from the device that produced it, so a backbone capture shows what central compute saw rather than what the sensor sent, and the zone controller has taken over the gateway’s role, a shift our domain versus zonal comparison covers in full. The four-timestamp requirement is unchanged; the capture points move inside the zone. Our comparison of Ethernet and CAN covers why both survive.

Three classes of timestamp

Software timestamps taken in the host application

The application asks the operating system for the time when it receives a frame. The design house overview cited above is direct about the cost: capture in application software, after the frame has crossed the OS network stack, includes the scheduling jitter and interrupt latency the OS introduced, typically tens to hundreds of microseconds of variability.

Kernel or driver timestamps: better, still after the interface

The level most engineers are on without knowing. The Linux kernel documents SO_TIMESTAMP as generating a timestamp for each incoming packet in system time, described as not necessarily monotonic, and SO_TIMESTAMPING as generating timestamps on reception, transmission or both, from multiple sources including hardware. The flag wording matters. SOF_TIMESTAMPING_RX_SOFTWARE timestamps are generated, in the documentation’s words, just after a device driver hands a packet to the kernel receive stack. SOF_TIMESTAMPING_TX_SOFTWARE timestamps are generated in the device driver as close as possible to, but always prior to, passing the packet to the network interface, and require driver support that may not be present. Even the kernel timestamp therefore lands after the driver has handled the frame: it removes the application’s scheduling jitter, not the interface’s.

The CAN side is worth stating as documented rather than by analogy. SocketCAN’s documentation describes obtaining an accurate timestamp with an ioctl call after reading a message from the socket, with a resolution of one microsecond, set automatically at the reception of a CAN frame. That is a resolution statement, not an accuracy statement, and the kernel’s timestamping page does not discuss CAN. For a defensible CAN timestamp, go to the capture hardware.

Hardware timestamps applied at the capture interface or PHY

SOF_TIMESTAMPING_RX_HARDWARE and SOF_TIMESTAMPING_TX_HARDWARE request timestamps generated by the network adapter itself. This is the class that supports ordering claims, because the stamp lands before anything software-scheduled touches the frame.

The catch bites hardest here: hardware timestamps are not in your system clock’s time base. The kernel documentation deprecates its legacy field for hardware timestamps converted to system time, and says the intended approach is to expose the hardware clock on the NIC directly as a hardware PTP clock source, allowing conversion in userspace. A hardware timestamp is therefore precise against a clock you have not yet related to anything, and disciplining it is a separate job.

How to find out which class your setup is actually using

  1. On a Linux host, ethtool -T <iface> reports timestamping capabilities and the PTP Hardware Clock index. No real PHC index means no hardware timestamps, whatever the tool’s configuration screen implies.
  2. On an encapsulated capture, filter on the synchronisation flag the format carries. Frames flagged unsynchronised carry timestamps you may not quote.
  3. On any capture, run the two-anchor test below on a session you trust. Drift in the tens of microseconds per second means a free-running clock.

Timestamp source versus what it can prove

Accuracy below is a class, not a datasheet figure. The quantified rows come from the design house overview in the References, whose figures are estimates for a gPTP implementation path rather than a capture-equipment specification. Use the ordering, not the digits.

Timestamp sourceWhere appliedAccuracy classSupportsDoes not support
Application logPast the OS network stackTens to hundreds of microseconds of variabilityContent, coarse sequence in one logCross-log ordering, gateway latency
Kernel socketJust after the driver hands the packet up10 to 100 microseconds, software on LinuxMillisecond ordering on one interfaceSub-millisecond cross-interface ordering
Capture hardware, free-runningCapture interface or PHYHardware stamping precision, but on an undisciplined oscillator: 20 to 50 ppm of drift against any other clockPrecise intervals within one deviceAnything cross-device
Capture module, disciplinedInterface, clock steered to a referenceHardware class plus loop residualOrdering across every bus that module capturesOrdering against a module on another reference
Capture module on gPTPInterface, clock in the vehicle’s domainHardware class plus measured sync residual; the source’s gPTP figures are 200 ns to 1 microsecond MAC-level and 50 to 200 ns PHY with transparent switchesCross-device ordering, gateway latency, dispute evidenceFrames flagged as not synchronised

That last row is a condition, not a guarantee: a module whose gPTP sync has degraded produces timestamps identical in appearance to good ones, and only the flag tells them apart.

Building one common time base

gPTP as the in-vehicle reference

On the Ethernet side, synchronisation is standardised: IEEE Std 802.1AS-2025, with an automotive profile in IEEE Std 802.1DG-2025, and linuxptp implements it on Linux. The automotive configuration is specific enough that our gPTP troubleshooting guide exists mainly to list what people get wrong: layer 2 transport with peer delay, the transportSpecific value the tools must agree on, and the offset nothing sets for you. Treat sync as a test object, because scheduling and sync can fight, as when Qbv breaks PTP describes.

Shared grandmaster versus lab sync line

Disciplining capture modules from the vehicle’s own grandmaster puts your timestamps in the vehicle’s time domain, so your intervals compare with intervals the ECUs logged. A lab sync line, on a reference that is not the vehicle’s, is simpler to keep working and enough for gateway latency, but not for a claim about the vehicle’s own time.

Capture-module protocols that carry the timestamp with the frame

On most benches the timestamp travels with the frame. ASAM describes its Capture Module Protocol as defining the communication between capture modules, or probes, and data sinks, to monitor in-vehicle bus communication and sensor data, transported over Ethernet, and lists time synchronisation among the specification’s components; version 1.1.0 was released on 26 January 2026. The older vendor-originated format, TECMP, does the same job with other field names.

Both carry, per message, an interface identifier, a timestamp in nanoseconds and a flag recording whether that timestamp was synchronised. Build a saved display filter on that flag: it turns a timing number from an assertion into evidence. Our capture encapsulation article covers the field layouts and the Wireshark version floors.

One module, one clock, every bus

The strongest form of the fix is to stop producing two files. A capture module that wraps CAN, LIN, FlexRay, analog and Ethernet events into one encapsulated stream applies one clock to all of them, so correlation becomes a display filter rather than a project. ASAM gives interoperability between capturing and recording systems as the reason the interface is standardised at all, and notes that capturing and recording inside each probe is not flexible enough when many probes feed one recorder. That is the benefit at the level the published material supports: one recording, one time base, every bus. Whether two products interoperate at your version is a written question to both suppliers, and the recorder has its own constraints, in capture without loss.

CAN has no equivalent of gPTP at the data link layer, but there is one above it. AUTOSAR publishes Specification of Time Synchronization over CAN, Classic Platform document 674, whose CanTSyn module handles the distribution of time information over CAN buses. Where a vehicle runs it, a CAN capture may carry two clocks: the vehicle’s global time domain, and the one your capture hardware applied. Establish which is authoritative before the session.

The fallback when you cannot re-instrument

Sometimes the hardware is what it is. Then inject a shared event every capture path records: a hardware edge wired to a spare channel on each device is cleanest, a diagnostic action that provokes traffic on every bus is practical. Do it twice, start and end, for drift as well as offset. For the signal on the pair rather than the frames, our multi-bus instrument article covers the probe-tip view.

A correlation workflow you can repeat

Step 1. Record the sync architecture before you record traffic. Which clock each capture device is on, how it is disciplined, and the firmware versions. Store it with the log: a trace whose time provenance is unknown is one nobody can defend six months later.

Step 2. Inject and capture a known common event at the start and at the end. Same event, every bus, both ends. Cheapest step, most often skipped.

Step 3. Compute offset and drift from both anchors, not one. One anchor removes a constant offset and silently leaves the rate error in; two give a linear correction.

Step 4. Apply the shift and load everything into one viewer, with the database and description files attached. Wireshark’s Time Shift dialog offers “Shift all packets by”, a fixed offset entered as a relative time, and “Set the time for packet”, which with the second box checked applies offsets based on two given packets and computes a linear adjustment across all packets for clock drift. Note the documented limitation: shifts apply to all packets, including ignored ones and ones hidden by the display filter, with no way to adjust individual ones. For scripts, editcap takes -t, a time adjustment applied to all selected packets, and -S, which time-adjusts selected packets to ensure strict chronological order. mergecap merges chronologically on each frame’s timestamp unless -a is given.

Step 5. Verify against a known request and response pair. Pick an exchange whose direction is not in doubt, mark the first frame with a time reference so it shows as REF in the time column and later times count from there, with the time display format set to seconds since beginning of capture, since the reference is a view setting that is not saved with the file, and confirm the request precedes the response on every bus it crosses. If it does not, the alignment is wrong and so is everything downstream.

Reading a correlated trace

A worked walkthrough

Example numbers, one ruler. The request appears on Ethernet at t = 0.000, the translated CAN request at t = 0.0021, the CAN response at t = 0.0083, the Ethernet response at t = 0.0402. Forward gateway latency is 2.1 ms, ECU turnaround 6.2 ms, return gateway latency 31.9 ms. The supplier’s claim of a 6 ms turnaround is right to within the rounding, and irrelevant: 79 percent of the delay sits in the return path through the gateway. That conclusion needs no product, only four numbers on one ruler.

What gateway latency looks like versus source latency

Gateway delay tends to be asymmetric and load-dependent: one direction worse than the other, worse still under traffic. Source delay tends to be symmetric about the gateway and to track the responding ECU’s workload rather than bus load.

Where retransmission, queueing and scheduling masquerade as gateway delay

Three impostors to rule out first. Transport-layer retransmission turns a lost frame into a delay that looks like processing time. Queueing at the switch does the same when a burst sits in front of your frame; the lab switch guide covers that. And a time-aware schedule can hold a frame until its gate opens, a designed delay rather than a fault. All three show up in a correlated trace and hide in an uncorrelated one.

Recording enough that the trace is still usable in six months

Session metadata

Bus configuration and bit timings, the database and description files that decode the payloads, firmware versions of every ECU and capture device, and the sync topology from step 1. A trace without its description files is bytes; one without its sync topology is bytes with plausible numbers on them.

Naming and indexing so a multi-bus session is one artefact

One session identifier, one directory, every file named from it. Four files in three places with three naming conventions is how a correlated capture becomes uncorrelated a month later, nobody having recorded the anchors needed to redo it.

What to keep and what to discard

Keep raw where the analysis needs raw, keep the metadata always, and be deliberate about the rest: multi-bus sessions with sensor data grow faster than anyone plans for. The arithmetic is in ADAS sensor data logging and bandwidth budgets, and the camera links that dominate it in our SerDes article.

Where GSAS fits

Most teams that ask us about multi-bus correlation already own capable capture hardware, and the problem is rarely the hardware. It is that nobody has established which timestamp class each bus is on. So we review what exists: what stamps each channel, what disciplines that clock, whether the sync flag in your traces says what you assume, and where the four-timestamp chain goes blind. That review often ends without a purchase, because the gap is configuration rather than equipment.

Where new capture does make sense, the questions we help teams put to suppliers are the ones in this article: which encapsulation format and version the modules emit, what the time source is and what happens to the sync flag when it degrades, what the recorder writes, and whether your toolchain reads it. GSAS is an engineering partner, so what we optimise for is a bench that produces defensible timing evidence.

Our field engineers work with automotive programmes from Bengaluru, Hyderabad, Chennai, Pune, Mumbai and Delhi NCR. For a second opinion on a correlation setup, or a review of a multi-bus bench before the next capture purchase, our automotive Ethernet capabilities page is the overview and request a quote starts the conversation. A consultation, not a commitment.

References

Building for Automotive & Mobility?

Talk to our application engineers for personalized tool recommendations.

Frequently asked questions

How do I synchronise CAN and Ethernet timestamps in one trace?
The reliable route is not to synchronise two timestamps afterwards but to produce one timestamp for both buses in the first place. A capture module wraps every CAN, LIN, FlexRay, analog or Ethernet event it sees into an Ethernet frame carrying an interface identifier and a timestamp, and streams those to a recorder, so one file holds every bus against one clock. ASAM describes its Capture Module Protocol as defining the communication between capture modules, or probes, and data sinks, to monitor in-vehicle bus communication and sensor data. Where re-instrumenting is not possible, the fallback is to inject one physically shared event that every capture path can see, at the start and at the end of the session, and use the two anchors to compute offset and drift.
Why do my CAN log and my Wireshark capture disagree about which event came first?
Because they are measuring against two different clocks that were never related to each other, and there are three independent error terms rather than one. The two tools started at different moments, which is a constant offset. Their oscillators run at slightly different rates, which is a drift that grows with session length. And each tool has its own jitter, which is random and does not average away within a single measurement. A constant offset can be removed after the fact. Drift can be removed if you have two anchor events rather than one. Jitter cannot be removed at all, and it sets the smallest interval you are entitled to make an ordering claim about.
What accuracy do I need to prove gateway latency?
Enough that your timing floor is well below the interval you are trying to measure, and the honest way to state it is as a ratio rather than a number. If the gateway forwarding delay you are investigating is in the low milliseconds and your correlation floor is tens of microseconds, the measurement is defensible. If the delay is tens of microseconds and your floor is the same order, you are reporting your own instrument. A design house's published overview of timestamping in multi-ECU systems puts software timestamping on a Linux kernel at 10 to 100 microseconds, MAC-level hardware timestamping at 200 nanoseconds to 1 microsecond, and PHY hardware timestamping with transparent switches at 50 to 200 nanoseconds. Those are that source's estimates for a gPTP implementation path rather than a specification for capture equipment, so use the ordering rather than the digits.
Is a software timestamp good enough for multi-bus debugging?
It is good enough for content questions and not for causality questions. If you are asking whether a message ever appeared, what it contained, or roughly when in a ten second window, a software timestamp is fine and cheaper to obtain. If you are asking which of two events on two different buses happened first, or how long a gateway held a message, a software timestamp taken in the host application includes every scheduling delay and interrupt latency the operating system introduced between the wire and your code. The Linux kernel documentation is explicit that even the kernel software receive timestamp is generated just after a device driver hands a packet to the kernel receive stack, which is already past the point you wanted to measure.
How does gPTP help when the buses are not Ethernet?
Indirectly, and that is the part people miss. gPTP disciplines clocks across an Ethernet network, so it can discipline the clock inside a capture module. That module can be the thing timestamping your CAN, LIN and FlexRay channels. The buses themselves never carry gPTP; the instrument that observes them does, and the timestamp travels with the encapsulated frame. Separately, the vehicle may distribute its own global time over CAN above the data link layer: AUTOSAR publishes Specification of Time Synchronization over CAN, Classic Platform document 674, whose CanTSyn module handles the distribution of time information over CAN buses. A CAN capture can therefore carry two clocks, the vehicle's global time domain and the one your capture hardware applied. Decide early which is authoritative.
Can I correlate two traces after the fact if I did not sync the tools?
Partially, and only if the traces contain something that lets you tie them together. You need at least one event visible in both files whose true simultaneity you can argue for, and preferably two, one near the start and one near the end, so you can solve for drift as well as offset. With one anchor you can remove a constant offset. With two you can also remove a linear rate error. Wireshark supports both directly: its Time Shift dialog offers Shift all packets by, for a fixed offset, and Set the time for packet, which with two packets computes a linear adjustment across all packets to address clock drift. What you cannot recover after the fact is jitter, so a post-hoc alignment always has a coarser floor than a shared clock would have given you.
What is TECMP or ASAM CMP and why does it carry a timestamp?
They are Ethernet encapsulation formats that wrap captured in-vehicle bus and sensor data so a capture module can stream it to a recorder and an analyser can decode it. They carry a timestamp because the original frame does not have one: a CAN frame has no field that says when it arrived or which of four channels it arrived on, and that context exists only in the receiver. Both formats also carry a flag stating whether the timestamp was synchronised, which is the field that turns a number into evidence. Our capture encapsulation article covers the field layouts, the Wireshark version floors and the migration cost between the two.
How do I tell whether the delay is in the gateway or in the sending ECU?
You cannot, from two uncorrelated traces, because you have one observation and three unknowns. You need four timestamps on one ruler: the request seen on Ethernet, the translated frame seen on CAN, the response seen on CAN, and the response seen back on Ethernet. Gateway forward latency is the second minus the first, ECU turnaround is the third minus the second, and gateway return latency is the fourth minus the third. If the large interval sits between the first two or the last two, the gateway owns it. If it sits between the second and the third, the responding ECU owns it. Without a common time base those three intervals are not separable, which is exactly why the argument with the supplier never resolves.

Stay in the Loop

Get monthly compliance updates, product insights, and engineering best practices delivered to your inbox.

Related Articles

Master and slave roles on a 100BASE-T1 link: the master PHY times its transmitter from a local clock, the slave recovers the clock from the received signal, with the both-master and both-slave misconfigurations that leave the link down, from GSAS Micro Systems India
Automotive Ethernet Automotive & Mobility

100BASE-T1 Link Won't Come Up: A Vendor-Neutral Checklist

A 100BASE-T1 link that will not come up is almost never a mystery, but the answers on the web are written per silicon vendor and do not transfer. This is the ordered bring-up checklist that holds regardless of which PHY, switch or SoC you have: physical layer first, then the PHY over MDIO, then the master and slave pairing, then the causes of a link that comes up and drops. The standards and tooling claims trace to IEEE 802.3 task force records, the Linux ethtool and kernel documentation or published test material. Written by the GSAS Micro Systems engineering team in India.

29 Aug 2026 · 14 min read
Five-step master and slave decision flow for a 100BASE-T1 media converter: read the ECU port role, set the converter to the complement, match the speed, check the wiring, link up, from GSAS Micro Systems India
Automotive Ethernet Automotive & Mobility

100BASE-T1 Media Converters: How to Choose One

Search for a 100BASE-T1 media converter and you get SKU pages that document their own DIP switches, plus a pile of copper-to-fibre converters that have nothing to do with single-pair automotive Ethernet. This is the selection guide neither publishes: what the box does at the PHY layer, when a converter is the wrong box, and the nine criteria that decide fitness, each written as a question to put to the supplier rather than a specification we invented. Standards claims trace to IEEE 802.3 task force records and the public OPEN Alliance specifications. Written by the GSAS Micro Systems engineering team in India.

29 Aug 2026 · 13 min read
Side by side comparison of a 10BASE-T1S multidrop mixing segment, one balanced pair with four nodes on short stubs and a termination at each end, against a point to point star of four separate links into switch ports, from GSAS Micro Systems India
Automotive Ethernet Automotive & Mobility

10BASE-T1S and PLCA: Multidrop Ethernet Explained

10BASE-T1S is the one member of the T1 single-pair Ethernet family that keeps a shared medium, and PLCA is the reconciliation sublayer that stops the nodes on it from colliding. This article covers what IEEE 802.3cg standardises, how the beacon and transmit opportunities schedule a cycle, the node count and segment length figures the OPEN Alliance interoperability test suite works to, and the failure modes that put a segment quietly back into contention while every link still looks up. Written by the GSAS Micro Systems engineering team in India for teams bringing up multidrop segments on the bench.

29 Aug 2026 · 12 min read