9 destinations

← CAN bus guides

Read J1939 DM1 Without Guessing

Separate the 29-bit CAN ID, PGN and source address from DM1 lamp and DTC interpretation using controlled data revisions.

Read a J1939 DM1 capture as layered evidence: first the 29-bit CAN identifier, then the PGN and source address, then lamp and diagnostic data using a current licensed definition.

If you are still choosing hardware, start with the J1939 USB CAN interface guide. A raw SocketCAN adapter, a vendor SDK and an RP1210 service interface are not interchangeable purchase paths.

J1939 is more than an extended CAN identifier

SAE J1939 is a higher-layer protocol built on CAN. Linux exposes J1939-specific addressing and transport support as well as raw CAN access. On the wire, J1939 commonly uses the 29-bit CAN identifier to carry priority, Parameter Group Number information and a source address.

Keep three questions separate:

  1. Did the physical CAN frame arrive correctly?
  2. Which J1939 parameter group and source address does the identifier represent?
  3. How does the current J1939 data definition map the payload to lamps and diagnostic trouble codes?

Answering the third question cannot repair errors in the first two.

1. Identify the PGN and source address

The Linux kernel J1939 documentation divides the identifier into priority, PGN-related fields and source address. It also distinguishes PDU1 and PDU2 formats: in PDU1, the PDU Specific field is a destination address and is not part of the PGN; in PDU2, it is a group extension and is part of the PGN.

For every candidate DM1 frame, record:

  • full 29-bit CAN identifier;
  • derived PGN;
  • source address;
  • timestamp and payload length;
  • bus bitrate and capture point.

The sample interface on this site labels PGN 65226 (0xFECA) as DM1. Confirm that value and all payload definitions against the current SAE J1939 documents or an authorized, revision-controlled database used by your project.

2. Capture the raw traffic first

Start from a stable SocketCAN interface and save the unmodified frame stream:

candump -L can0 | tee j1939-raw.log

If you already have an authorized DBC that includes the relevant J1939 messages, create a separate decoded view:

cat j1939-raw.log | python3 -m cantools decode --single-line j1939.dbc

Do not discard frames from other source addresses. Multiple ECUs can report diagnostic information, and the same PGN from two sources is not one combined message.

3. Decode lamps and DTCs without guessing

SAE J1939-73 defines diagnostic services, including the reporting of active diagnostic trouble codes and diagnostic lamp status. Use the current revision required by the project and, where applicable, the current J1939 Digital Annex.

A practical decoder should expose at least:

  • reporting source address;
  • lamp states described by the selected definition;
  • each diagnostic trouble code’s Suspect Parameter Number (SPN), Failure Mode Identifier (FMI) and occurrence information;
  • raw payload bytes alongside the decoded fields;
  • the database/specification revision used.

Do not infer component replacement from an SPN/FMI pair alone. The code needs system context, service information, operating conditions and confirmation tests.

Why DM1 may appear to change between captures

  • a different ECU source address is being viewed;
  • an active condition cleared or reappeared;
  • lamp or occurrence information changed;
  • the decoder used a different data revision;
  • frames were dropped during capture.

4. Preserve evidence that another engineer can reproduce

Store the raw log, decoded export, DBC or data-definition revision, adapter and firmware version, wiring diagram, bitrate, termination state, tested operating condition and UTC capture time. Redact customer identifiers and confidential payloads before sharing.

A useful report states what was observed and under which conditions. It does not turn one trace into a universal compatibility or safety claim.

Evaluate the local workflow

If your pilot case involves J1939, include the required bitrate, connector, operating system, authorized data source and expected PGNs in the pilot request. No proprietary J1939 database is bundled or promised.

Primary references