Scantool Application Manual

[ Home ] [ Download @Sourceforge ] [ Documentation ]
[ Mailing List ] [ Source code @github [primary] ] [ Source code @sf [mirror] ]

This manual applies to freediag version 1.08 and following.

Table of contents:

OBDII Introduction

In the Mid 1990's the US introduced mandated diagnostics on all vehicles sold in the USA for certain emissions related information. The idea behind this is that cars would monitor for emissions related problems and when they occur to light a "Check Engine" lamp on the dashboard and log fault information that could be then read by a Scantool. Scantools would become cheap and available to the smallest of vehicle repairers. These diagnostic protocols were grouped under the term "OBD II".

Europe has recently introduced similar, compatible systems, which are known as EOBD (European OBD).

OBDII/EOBD requires a standardised physical connector to be present within a small distance of the vehicle’s steering wheel. OBDII allows 3 types of physical interface (ISO9141/14230, SAEJ1850 VPW and SAEJ1850-PWM) and the related software protocols that are used with those physical interfaces.

This manual assumes that you have some knowledge of vehicle systems and have probably used a scantool before.

Scantool Introduction

This Scantool uses SAEJ1979 (ODB II) protocol on ISO9141, ISO14230, SAEJ1850 VPW and SAEJ1850-PWM interfaces depending on what hardware interface is attached to the PC. The scantool does not yet support any manufacturer specific protocols for talking to non OBDII vehicles.

It is configured by default to use a generic (dumb) serial to ISO9141 converter such as those used on the VAG-COM software, It also supports smart interfaces from Multiplex Engineering and from B.Roadman for SAEJ1850 vehicles (mainly Ford and GM). Support for ELMxxx devices is being added but should be considered inexistant as of early 2014.

Support for CANbus (ISO 15765) is incomplete and unusable.

Please refer to Supported Interfaces to determine which protocols are supported by each interface type.

1) Building the scantool

Refer to most up-to-date instructions in doc/build_system.txt

2) Running Scantool

Under Linux / unix variants, the scantool should no longer be run as superuser / root, for obvious security reasons. A regular user account should be sufficient, provided you setup the udev rules (or equivalent) to give access to the relevant hardware. Running as root was recommended in previous versions of freediag in the hope of improving precision of timing, but the effect has not proved to be worth the risk.

Start the Scantool CLI by running "./scantool", you will get a command prompt:

The scantool will read commands from a startup file called .scantoolrc in your home directory or scantool.ini in the program directory, depending on options set at compile time.

Many people will put the appropriate set interface <type> command (see section 4) in their .freediagrc file and will just want to use the scan, and the cleardtc commands.

3) Using the Command Line Interface (CLI)

The CLI is hierarchical, with normal commands at the top level. Some commands include:

Please refer to the complete list in the next section.

2nd level commands, such as commands to set the address used by the scantool, can be accessed as:

or by entering the set menu:

and then using the testerid command

Note the cli prompt will change from


To leave a submenu and return to the main menu, type:

All numeric values can be entered as:

The help (or simply ?)command is available at every menu and gives you help for the commands available at that menu. Further information about a specific command can be obtained by typing help <command>.

The CLI supports shell like command line editing if supported by your OS.

4) Commands

The following commands are available. Other commands may be visible from the CLI but are not supported

5) Hardware Interfaces

Please refer to the Supported Interfaces document to determine which hardware interface is appropriate for your usage and which version of the interface you should purchase.

In order to use the appropriate driver for your hardware interface, the appropriate set interface [name] command needs to be run. The default interface driver is the dumb driver which works with most generic serial to ISO9141 interfaces. It is recommended that you put this command in your .scantoolrc file.

Note, if you have a Multiplex Engineering interface not purchased for the freediag software, it will have a different ID to that used in the freediag project. Freediag uses ID 0x38. If you know the ID of your interface you can change the INTERFACE_ADDRESS definition in diag_l0_me.c and recompile.