TRACE Request access
EN
Vehicle diagnostics · OBD-II on CAN

Read OBD-II on the CAN bus — see what the scan tool asks.

Trace listens passively on the CAN bus, reassembles ISO-TP messages and decodes the OBD-II services: mode, PID and the measured value with its unit — 1726 rpm instead of 1A F8.

No mail app set up? Write directly to support@trace-analyzer.net.

Access is currently free and granted on request.

  • ISO-TP reassembly
  • Values with units
  • Modes 01–03, 06–0A
  • Listens only, never sends
Example

From the wire to the telegram.

A scan tool asks for the engine speed, ECU 1 answers — followed by the vehicle speed.

// On the CAN bus · ID + 8 data bytes
7DF 02 01 0C 00 00 00 00 00 ↳ request from the scan tool (broadcast) 7E8 04 41 0C 1A F8 00 00 00 ↳ response from ECU 1 7E8 03 41 0D 50 00 00 00 00
// In Trace · decoded telegrams
OBD-II · Req-CurrentData
ID0x7DF
SID1 (Req-CurrentData)
PID12 (RPM)
OBD-II · Resp-CurrentData
ID0x7E8
SID65 (Resp-CurrentData)
PID12 (RPM)
EngineRPM1726 rpm
OBD-II · Resp-CurrentData
ID0x7E8
SID65 (Resp-CurrentData)
PID13 (Speed)
VehicleSpeed80 km/h

Each CAN frame starts with an ISO-TP header (for a single frame one byte: the length); Trace removes it while reassembling, multi-frame answers like the VIN included. RPM = (256 · 0x1A + 0xF8) / 4. Shown abridged.

What Trace does

OBD-II traffic as readable values.

Reassembled, not fragmented

Long answers such as the VIN span several CAN frames. Trace joins first and consecutive frames into one message before decoding it.

Physical values, not hex

More than 80 mode 01 PIDs — RPM, speed, coolant, mass air flow, oxygen sensors, catalyst and oil temperature, fuel rate, odometer and more — appear as physical values with units. Fault codes show as P0143, the VIN as plain text.

A definition you can adapt

Scaling is part of the open TrIML definition: value = raw · scale + offset. More PIDs need one line each — no code.

  • SearchFull-text search across all telegrams, even in the live stream.
  • RecordingRaw bytes and the finished interpretation in one .msf file.
  • Multiple portsSeveral interfaces in one session, on a shared timeline.
  • RemoteProbe at the machine, analysis in the browser — no inbound port.
Honest about the state

What is still missing.

So you don't have to find the limits by trying:

  • Not yet tested in a vehicle. Capture via SocketCAN (Linux) and PEAK PCAN-Basic (Windows) is built; the test with real hardware is still pending. The decoding is tested with synthetic message sequences built to the standard.
  • Control requests only as far as standardized. Mode 08 shows which test a scan tool requests – such as the EVAP leak test – and which tests a control unit supports. Anything a manufacturer defines beyond that appears as raw bytes.
  • Unknown PIDs end the split. Multi-PID answers and freeze frames are decoded pair by pair. A PID the definition does not know has no known length — its bytes and everything after it in that answer appear as one hex block.
  • OBD-II on CAN only. K-Line (ISO 9141, KWP2000), J1939 and UDS are not defined yet.
The definition

Scaling is an attribute.

Each PID is a case with its size, factor, offset and unit. The engine applies the formula — the definition only states it.

Open the TrIML reference →

<!-- Mode 01: value = raw · scale + offset -->
<case value="0x05"><byte name="CoolantTemp"
      scale="1" offset="-40" unit="C" /></case>
<case value="0x0C"><word name="EngineRPM"
      bigendian="true" scale="0.25" unit="rpm" /></case>
<case value="0x0D"><byte name="VehicleSpeed"
      unit="km/h" /></case>
FAQ

Frequently asked questions

Does Trace query the car itself?

No. Trace never transmits on the bus. With PCAN, Trace switches the adapter to listen-only before opening it and reads the setting back — if that fails, the adapter is not opened. On Linux you switch the interface to listen-only yourself (ip link … listen-only on), otherwise the CAN controller acknowledges frames. To see values, something on the bus has to ask for them.

Which CAN adapter do I need?

On Linux any interface with a SocketCAN driver — bitrate and listen-only are set on the interface with ip link. On Windows a PEAK PCAN adapter (PCAN-Basic), default 500 kbit/s, the usual OBD-II setting. Capture on real hardware has not been verified yet — see "What is still missing".

What about 29-bit IDs?

They are captured and decoded. The OBD-II definition does not interpret the CAN ID, it only displays it — 0x18DAF110 just like 0x7E8. With 29 bits the tester requests functionally on 0x18DB33F1, answers come from 0x18DAF1xx.

Try OBD-II with Trace.

Tell us briefly what you are measuring. We will enable your access — and whatever you find missing goes straight into development.

No mail app set up? Write directly to support@trace-analyzer.net.