Introduction to SAE J2534
Summary
SAE J2534 is a family of standards that defines a common PassThru interface for vehicle diagnostics, ECU reprogramming, and other service applications. The goal is to allow a single hardware device, often referred to as a PassThru device, to be used across a wide range of vehicle manufacturers and communication protocols.
The connection between the J2534 device and the vehicle is typically through the SAE J1962 (OBD-II) connector. The device connects to a PC running a J2534-compatible application, while a J2534 API implementation provided by the hardware vendor manages communications between the application and the interface hardware.
Since its introduction, the standard has evolved through multiple revisions. The latest version, SAE J2534-1 Revision 05.00, was published in January 2022 and introduces a modernized API while maintaining the goal of standardized vehicle communication.
Developer Blog Series on J2534
This 3-part blog series introduces SAE J2534 (including it’s multiple editions), describes how to use the 2004 API, and then provides instruction on getting started with Kvaser and J2534.
SAE J2534 (Part I): An Introduction | READ MORE …
SAE J2534 (Part II): Using the 2004 API | READ MORE …
SAE J2534 (Part III): Getting Started with Kvaser and SAE J2534 | READ MORE …
Background
Modern vehicles contain dozens of Electronic Control Units (ECUs) that communicate over multiple in-vehicle networks, including CAN, CAN FD, LIN, and Automotive Ethernet.
Historically, vehicle manufacturers developed proprietary diagnostic and reprogramming tools, making it difficult for repair workshops to support multiple brands efficiently. To help standardize access to emissions-related diagnostics and reprogramming, the U.S. Environmental Protection Agency (EPA), the California Air Resources Board (ARB), and SAE collaborated on the development of the J2534 standard.
The first J2534 specification was published in 2002, defining a common interface between vehicle service applications and PassThru devices.
Evolution of SAE J2534
Since its introduction in 2002, SAE J2534 has undergone several revisions to meet evolving vehicle communication requirements.
Early implementations focused primarily on emissions-related reprogramming and diagnostics. Over time, the standard expanded to support additional protocols and use cases.
In January 2022, SAE published J2534-1 Revision 05.00, introducing a modernized PassThru API architecture designed for current and future diagnostic applications. As with previous revisions, the goal remains to provide a standardized interface between vehicle service applications and PassThru devices.
Hardware Requirements
The J2534 hardware, commonly referred to as a PassThru device, acts as a gateway between a vehicle ECU and a diagnostic application running on a computer.
Depending on the implementation, J2534 devices may support protocols including:
The protocols supported by a specific device depend on its hardware capabilities and software implementation.
The connection between the host computer and the PassThru device is determined by the device manufacturer and may use USB, Ethernet, wireless networking, or other communication technologies. The diagnostic application communicates through the J2534 API and is independent of the underlying connection method.
The connection to the vehicle is typically made through the SAE J1962 (OBD-II) connector, providing a standardized interface for vehicle communication and diagnostics.
Figure 2. J1962-male connector (to the left) and J1962-female connector (to the right).
J2534 devices are expected to provide sufficient message buffering, timing accuracy, and protocol handling to support reliable diagnostic and reprogramming operations.
Software Requirements
rogramming of an emission related ECU using J2534 is done from a PC, preferably a laptop computer, with a Win32 operating system (Windows 95 or later).
Each vehicle manufacturer will have their own application software used for analyzing and programming of their vehicles. If their vehicles only use i.e. ISO 9141, no other protocols have to be supported by the application. It is important that this application conforms to the functions in the J2534 API.
This application will have complete information of the ECUs that are supported by the application. This application also includes a user interface where choices can be made depending on the ECU and what action to perform.
A vehicle repair workshop that wants to analyze and re-program vehicles from different manufactures must have an application for each. This application software can be downloaded from the internet. How this API is provided depend on the manufacturer, but they do charge the customer (repair workshop) ordering it. The price differs a lot between manufacturers, a one year subscription costs between $75 and $2500.
Each manufacturer of a J2534 tool (hardware device) must provide a DLL-file that implements the J2534 API. The DLL-file is loaded by the vehicle manufacturer’s application giving the application control of the J2534 tool. The functions in the J2534 tool are linked to a corresponding function in the application. The DLL-file also includes routines for the connection (RS-232, USB etc.) between the J2534 tool and the PC.
The intention is that every J2534 tool should be capable of communicating with all protocols supported by the J2534 standard. The application provided by the vehicle manufacturers uses commands described in the J2534 standard to connect to a hardware tool (of any brand). The connection and initialization provides the hardware tool information on which protocol is used. Thereafter it is up to the hardware tool to manage the connection to the vehicle with the desired protocol. The PC application will send messages in the earlier determined protocol format to the hardware tool which buffers the messages and transmits the messages in the order they were received.
J2534 Application Programming Interface (API)
The J2534 API defines a standardized set of communication functions that must be supported by both the vehicle manufacturer application and the J2534 hardware interface. For application developers, all communication with the hardware is performed through the API functions defined by the J2534 specification. See table 1 below.
| Function | Description |
|---|---|
| PassThruConnect | Establish a connection with a protocol channel. |
| PassThruDisconnect | Terminate a connection with a protocol channel. |
| PassThruReadMsgs | Read message(s) from a protocol channel. |
| PassThruWriteMsgs | Write message(s) to a protocol channel. |
| PassThruStartPeriodicMsg | Start sending a message at a specified time interval on a protocol channel. |
| PassThruStopPeriodicMsg | Stop a periodic message. |
| PassThruStartMsgFilter | Start filtering incoming messages on a protocol channel. |
| PassThruStopMsgFilter | Stops filtering incoming messages on a protocol channel. |
| PassThruSetProgrammingVoltage | Set a programming voltage on a specific pin. |
| PassThruReadVersion | Reads the version information for the DLL and API. |
| PassThruGetLastError | Gets the text description of the last error. |
| PassThruIoctl | General I/O control functions for reading and writing protocol configuration parameters (e.g. initialization, baud rates, programming voltages, etc.). |
Table 1. J2534 function description.
Communication begins with PassThruOpen, which opens the device, and then PassThruConnect, which establishes a connection between the PC application and the J2534 device. This command includes information about which protocol to use, standard or extended CAN identifier or if ISO15765 is used. The command also includes a channel identification which will be used for all following communication. If the connection was established successfully, the API returns a STATUS_NOERROR.
Before any messages can be sent, the device is typically configured using PassThruIoctl,, where parameters like node address, baud rate or protocol specific parameters are set.
J2534 messages use a common structure that includes protocol information, message status, transmit flags, timestamps, data length, and the message payload itself. When ISO 15765 is used, the API also supports the transmission of CAN messages longer than 8 bytes through transport protocol functionality.
To reduce communication overhead, J2534 provides message filtering through PassThruStartMsgFilter. Filters can be configured to block or pass selected messages before they are transferred to the PC application. Filtering is performed by applying a mask to the message identifier and comparing the result against a specified pattern, allowing applications to focus on relevant traffic while reducing unnecessary data transfer.
J2534 API DLL
The J2534 API implementation provides the link between the diagnostic application and the PassThru device. The API abstracts vendor-specific hardware details, allowing applications to communicate with supported devices through a standardized interface. Each hardware vendor provides its own J2534 implementation, while maintaining compliance with the applicable SAE specification.
Kvaser J2534 Support
Kvaser provides J2534 software implementations for use with Kvaser CAN interfaces.
J2534 05.00 PassThru API (1.0.0) is compliant with SAE J2534-1 Revision 05.00 for CAN and ISO15765 (ISO-TP) protocols. The API provides a straightforward route for developing and testing diagnostic applications using Kvaser hardware.
The J2534 05.00 implementation can be installed alongside Kvaser’s existing J2534 04.04 implementation, allowing users to evaluate and develop applications for both specifications.
While our J2534 v04.04 implementation includes CAN FD support, the current J2534 v05.00 implementation is limited to a single CAN channel and does not yet support CAN FD.
