Compatibility in revisions of J2534

j2534_3

Share This Post

The J2534 standard was established by the Society of Automotive Engineers (SAE) to facilitate communication between a vehicle's onboard diagnostics (OBD) system and external diagnostic tools or programming devices. The goal of the standard is to make it possible for any ECU reprogramming software application from any vehicle manufacturer (in the United States) to work with any aftermarket vehicle data link tool from any supplier. However, in a bit of irony, the multiple revisions of the J2534 standard often introduce breaking changes, leaving tool interoperability at the mercy of whatever revision the vehicle manufacturer and tool supplier decided to implement. This blog post will go over some of the differences with each revision, as well as some possible strategies to overcome this hurdle.

J2534_200202

  • API version: 02.02
  • Registry key name: PassThruSupport

This is the initial release of the J2534 standard. Connection is straightforward, using only the PassThruConnect and PassThruDisconnect functions. PassThruReadVersion can be called before connecting to read version strings from the DLL, and the returned API version must be 02.02.

Initialization flow for 02.02

J2534/1_200412

  • API version: 04.04
  • Registry key name: PassThruSupport.04.04

This version of the standard adds PassThruOpen and PassThruClose functions, as a way to support global initialization and cleanup in the DLL. PassThruOpen takes a name parameter that must be null.

Initialization flow for 04.04

Unlike the first revision, the host is not allowed to call PassThruReadVersion before calling PassThruOpen. Because of this, where in the first version you could call PassThruReadVersion before doing anything else to verify that the API version is what you expect, on this version calling PassThruReadVersion on an unopened device will (or at least should) generate an error.

J2534/1_201510

  • API version: 05.00
  • Registry key name: PassThruSupport.05.00

Unlike in the previous revisions, this version of the standard was built to facilitate accessing multiple devices (from the same tool supplier) from a single DLL. PassThruScanForDevices and PassThruGetNextDevice have been added for multi-device support. In addition, the name parameter to PassThruOpen that was required to be null in the previous revision is now required to be not null, as it is used to differentiate between which device is being opened.

Initialization flow for 05.00

As you can see, things have gotten significantly more complex here with the addition of "logical" connections, connections for higher-level protocols. Previously protocols like CAN and ISO 15765 were treated equally, but in this version of the standard, ISO 15765 is a higher-level protocol that operates as a logical connection on top of the CAN physical connection.

J2534_201907

  • API version: 02.02
  • Registry key name: PassThruSupport

Confusingly, in July of 2019, the original, first revision (J2534_200202) was stabilized by SAE. No additional modifications have been made. So now, when searching for the latest version of the specification, you are likely to actually end up with the earliest version.

Which version to use?

If you are a tool supplier, and you are wondering which revision of J2534 to support for a given vehicle manufacturer's reprogramming software, your best bet is to use a tool like Procmon from Microsoft's Sysinternals Suite, and look to see what registry keys are being enumerated.

If you are trying to use a specific J2534 tool, you should look in the registry to see which API version the DLL is using. The tool's registry keys should be under HKEY_LOCAL_MACHINE\SOFTWARE\PassThruSupport.XX.XX, but on 64-bit Windows, the path becomes HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\PassThruSupport.XX.XX.

If you have a DLL and you don't know what API version it is using, it may be possible to determine it by checking for the presence of PassThruScanForDevices and PassThruOpen. If both are missing, it's 02.02. If PassThruOpen is present and PassThruScanForDevices is absent, it's likely 04.04. And if both are present, it should be 05.00.

Subscribe To Our Newsletter

Get updates and learn from the best

Loading

Subscribe To Our Newsletter Get Updates And Learn From The Best

Loading
Scroll to Top