Elm327 PDF
Elm327 PDF
Elm327 PDF
Description Features
Almost all new automobiles produced today are Supports 12 protocols
required, by law, to provide an interface from which
Automatically searches for a protocol
test equipment can obtain diagnostic information.
The data transfer on these interfaces follow several Fully configurable with AT commands
standards, none of which are directly compatible
RS232 baud rates to 500Kbps
with PCs or PDAs. The ELM327 is designed to act
as a bridge between these On-Board Diagnostics Voltage input for battery monitoring
(OBD) ports and standard RS232 ports.
Low power CMOS design
The ELM327 builds on improved versions of our
proven ELM320, ELM322, and ELM323 interfaces
by adding seven CAN protocols to them. The result Connection Diagram
is an IC that can automatically sense and convert PDIP and SOIC
the most common protocols in use today. There are (top view)
a number of other improvements as well a high
speed RS232 option, battery voltage monitoring, and MCLR OBD Tx LED
customizable features through programmable Vmeasure OBD Rx LED
parameters, to name only a few. J1850 Volts RS232 Tx LED
The ELM327 requires few external components J1850 Bus+ RS232 Rx LED
to make a fully functioning circuit. The following Memory CAN Rx
pages discuss the interface details, and show how to
Baud Rate CAN Tx
use the IC to talk to your vehicle, then concludes
LFmode ISO L
with two schematics to get you started.
VSS ISO K
XT1 VDD
Applications XT2 VSS
VPW In RS232 Rx
Diagnostic trouble code readers
ISO In RS232 Tx
Automotive scan tools PWM In Busy
Teaching aids J1850 Bus- RTS
4.00 MHz
Block Diagram
Memory MCLR
XT1 9 10 XT2
5 1 Vmeasure
2
RTS 15
23 24 21 22 12 3 4 14 13 11
Busy 16 25 28
status LEDs OBD interfaces *some support
Pin Descriptions
MCLR (pin 1)
A momentary logic low applied to this input will reset interface. If it is at a high level during power-up or
the IC. If unused, this pin should be connected to a reset, the baud rate will be set to 38400 (or the
logic high (VDD) level. rate that has been set by PP 0C). If at a low level,
the baud rate will be 9600.
Vmeasure (pin 2)
This analog input is used to measure a 0 to 5V LFmode (pin 7)
signal that is applied to it. Care must be taken to This input is used to select the default linefeed
prevent the voltage from going outside of the supply mode to be used after a power-up or system reset.
levels of the ELM327, or damage may occur. If it is If it is at a high level, then by default messages
not used, this pin should be tied to either VDD or VSS. sent by the ELM327 will be terminated with both a
carriage return and a linefeed character. If it is at a
J1850 Volts (pin 3) low level, lines will be terminated by a carriage
This output can be used to control a voltage supply return only. This behaviour can always be modified
for the J1850 Bus+ output. The pin will output a logic by issuing an AT L1 or AT L0 command (see the
high level when a nominal 8V is required (for J1850 section on AT Commands).
VPW), and will output a low level when 5V is needed
(as for J1850 PWM applications). If this switching VSS (pins 8 and 19)
capability is not required for your application, this Circuit common must be connected to these pins.
output can be left open-circuited.
XT1 (pin 9) and XT2 (pin 10)
J1850 Bus+ (pin 4)
A 4.000 MHz oscillator crystal is connected
This active high output is used to drive the between these two pins. Loading capacitors as
J1850 Bus+ Line to an active level. Note that this required by the crystal (typically 27pF each) will
signal does not have to be used for the Bus- Line (as also need to be connected between each of these
was the case for the ELM320), since a separate pins and circuit common (Vss).
J1850 Bus- drive output is provided on pin 14.
Note that this device has not been configured for
operation with an external oscillator it expects a
Memory (pin 5)
crystal to be connected to these pins. Use of an
This input controls the default state of the memory external clock source is not recommended.
option. If this pin is at a high level during power-up or
reset, the memory function will be enabled by VPW In (pin 11)
default. If it is at a low level, then the default will be
This is the active high input for the J1850 VPW
to have it disabled. Memory can always be enabled
data signal. When at rest (bus recessive) this pin
or disabled with the AT M1 and AT M0 commands.
should be at a low logic level. This input has
Schmitt trigger waveshaping, so no special
Baud Rate (pin 6)
amplification is required.
This input controls the baud rate of the RS232
All rights reserved. Copyright 2005, 2006, and 2007 by Elm Electronics Inc.
Every effort is made to verify the accuracy of information provided in this document, but no representation or warranty can be
given and no liability assumed by Elm Electronics with respect to the accuracy and/or use of any products or information
described in this document. Elm Electronics will not be responsible for any patent infringements arising from the use of these
products or information, and does not authorize or warrant the use of any Elm Electronics product in life support devices and/or
systems. Elm Electronics reserves the right to make changes to the device(s) described in this document in order to improve
reliability, function, or design.
Ordering Information
These integrated circuits are 28 pin devices, available in either a 300 mil wide plastic (skinny) DIP format or in a
300 mil SOIC surface mount type of package. To order, add the appropriate suffix to the part number:
300 mil 28 pin Plastic DIP..............................ELM327P 300 mil 28 pin SOIC....................................ELM327SM
Electrical Characteristics
All values are for operation at 25C and a 5V supply, unless otherwise noted. For further information, refer to note 1 below.
Notes:
1. This integrated circuit is produced with one of Microchip Technology Inc.s PIC18F2x8x family of devices as
the core embedded microcontroller. For further device specifications, and possibly clarification of those
given, please refer to the appropriate Microchip documentation (available at http://www.microchip.com/).
2. This spec must be met in order to ensure that a correct power on reset occurs. It is quite easily achieved
using most common types of supplies, but may be violated if one uses a slowly varying supply voltage, as
may be obtained through direct connection to solar cells or some charge pump circuits.
3. Device only. Does not include any load currents.
4. Pins 1, 11, 12, 13, 15 and 18 (only) have internal Schmitt trigger waveshaping circuitry. All other inputs use
standard CMOS circuitry.
5. The typical width of the Busy output pulse while the ELM327 interprets the command, measures the voltage,
scales it and then transmits the result of a mid-range measurement, with the RS232 rate at 38400 baud.
Overview
The following describes how to use the ELM327 to features of this product as well.
obtain information from your vehicle. Using the ELM327 is not as daunting as it first
We begin by discussing just how to talk to the IC seems. Many users will never need to issue an AT
using a PC, then explain how to change options using command, adjust timeouts, or change the headers. For
AT commands, and finally we show how to use the most, all that is required is a PC or a PDA with a
ELM327 to obtain trouble codes (and reset them). For terminal program (such as HyperTerminal or ZTerm),
the more advanced experimenters, there are also and knowledge of one or two OBD commands, which
sections on how to use some of the programmable we will provide in the following sections
AT Commands
Several parameters within the ELM327 can be command, so the user knows that it has been
adjusted in order to modify its behaviour. These do not executed.
normally have to be changed before attempting to talk Some of the following commands allow passing
to the vehicle, but occasionally the user may wish to numbers as arguments in order to set the internal
customize these settings for example by turning the values. These will always be hexadecimal numbers
character echo off, adjusting a timeout value, or which must generally be provided in pairs. The
changing the header bytes. In order to do this, internal hexadecimal conversion chart in the OBD Commands
AT commands must be issued. section may prove useful if you wish to interpret the
Those familiar with PC modems will immediately values. Also, one should be aware that for the on/off
recognize AT commands as a standard way in which types of commands, the second character is the
modems are internally configured. The ELM327 uses number 1 or 0, the universal terms for on and off.
essentially the same method, always watching the The following is a description of all of the AT
data sent by the PC, looking for messages that begin commands that are recognized by the current version
with the character A followed by the character T. If of the ELM327. Since there are many, a summary
found, the next characters will be interpreted as page is provided after this section.
internal configuration or AT commands, and will be
executed upon receipt of a terminating carriage return
character. The ELM327 will usually reply with the
characters OK on the successful completion of a
AL [ Allow Long messages ] message is being sent to. With the auto receive mode
in effect, the value used for the receive address will be
The standard OBDII protocols restrict the number
chosen based on the current header bytes, and will
of data bytes in a message to seven, which the
automatically be updated whenever the header bytes
ELM327 normally does as well (for both send and
are changed.
receive). If AL is selected, the ELM327 will allow long
The value that is used for the receive address is
sends (eight data bytes) and long receives (unlimited
determined based on the contents of the first header
in number). The default is AL off (and NL selected).
byte. If it shows that the message uses physical
addressing, the third header byte of the header is used
AR [ Automatically set the Receive address ] for the receive address, otherwise (for functional
addressing) the second header byte, increased in
Responses from the vehicle will be acknowledged value by 1, will be used. Auto Receive is turned on by
and displayed by the ELM327, if its internally stored default, and is not used by the J1939 formatting.
receive address matches the address that the
AT Commands (continued)
AT0, AT1 and AT2 [ Adaptive Timing control ] BI [ Bypass the Initialization sequence ]
When receiving responses from a vehicle, the This command should be used with caution. It
ELM327 has traditionally waited the time set by the allows an OBD protocol to be made active without
AT ST hh setting for a response. To ensure that the IC requiring any sort of initiation or handshaking to occur.
would work with a wide variety of vehicles, the default The initiation process is normally used to validate the
value was set to a conservative (slow) value. Although protocol, and without it, results may be difficult to
it was adjustable, many people did not have the predict. It should not be used for routine OBD use, and
equipment or experience to determine a better value. has only been provided to allow the construction of
The new Adaptive Timing feature will automatically ECU simulators and training demonstrators.
set the timeout value for you, based on the actual
response times that your vehicle is responding in. As
conditions such as bus loading, etc. change, the BRD hh [ try Baud Rate Divisor hh ]
algorithm learns from them, and makes appropriate This command is used to change the RS232 baud
adjustments. Note that it always uses your AT ST hh rate divisor to the hex value provided by hh. The actual
setting as a maximum setting, however. With this new baud rate (in kbps) will be 4000 divided by this divisor.
Adaptive Timing, sampling rates are often doubled or For example, a setting of 115.2kbps would require a
tripled from those typically experienced with prior divisor of 4000/115.2 or 35. In hexadecimal notation,
versions. 35 is written as 23, so the actual command that needs
There are three adaptive timing settings that are to be sent would be AT BRD 23.
available for use. By default, Adaptive Timing option 1 Since the ELM327 may be able to operate at
(AT1) is selected, and is the recommended setting. much higher rates than some interfaces can support,
AT0 is used to disable Adaptive timing (usually used the BRD command allows requested rates to be tested
when experimenting), while AT2 is a more agressive before they are committed to (with automatic fall-back
version of AT1 (the effect is more noticeable for very to the previous baud rate if there are problems). In
slow connections you may not see much difference use, the command is sent to request a change in the
with faster OBD systems). The J1939 protocol does baud rate, and the ELM327 responds with the familiar
not support Adaptive Timing responses for J1939 OK. After that, an internal timer begins waiting, to
use fixed timeouts as set in the standard. ensure that the controlling computer has sufficient time
to change their baud rate to the new rate. The ELM327
BD [ perform an OBD Buffer Dump ] then sends the poweron message at the new baud
rate, and begins waiting while the controlling computer
All messages sent and received by the ELM327 assesses what has been received. If the AT I message
are stored temporarily in a set of twelve memory was received without errors, the controlling computer
storage locations called the OBD Buffer. Occasionally, sends a carriage return character, and if received by
it may be of use to view the contents of this buffer, the ELM327, the rate will be retained. If the controlling
perhaps to see why an initiation failed, to see the computer sees errors (or worse, nothing), it provides
header bytes in the last message, or just to learn more no response, and switches back to the initial baud
of the structure of OBD messages. You can ask at any rate. If the ELM327 times out after receiving no
time for the contents of this buffer to be dumped response, or has received something that does not
(printed) when you do, the ELM327 sends a length appear to be a carriage return character, it will revert
byte (representing the length of the message in the back to the former baud rate. A more detailed
buffer) followed by the contents of all twelve OBD discussion of this entire process is provided in the
buffer locations. Using Higher RS232 Baud Rates section.
The length byte represents the actual number of Any new baud rate that is set in this manner is
bytes received, whether they fit into the OBD buffer or retained across calls to set defaults (AT D), and for
not. This may be useful when viewing long data warm starts (AT WS), but will not survive a hardware
streams (with AT AL), as the number accurately reset (a power off/on or a call to AT Z). If you are in the
represents the number of bytes received, mod 256. habit of calling AT Z in your code, we advise using AT
Note that only the first twelve bytes received are WS instead.
stored in the buffer.
AT Commands (continued)
BRT hh [ set Baud Rate Timeout to hh ] be inserted for you. Similarly, when sending a data
request with formatting off, you must provide all of the
This command allows the timeout used for the
required data bytes exactly as they are to be sent
Baud Rate handshake (AT BRD) to be varied. The
the ELM327 will not perform any formatting for you
time delay is given by hh x 5.0 msec, where hh is a
other than to add some trailing 'padding' bytes to
hexadecimal value. The default value for this setting is
ensure that the required eight data bytes are sent. This
0F, providing 75msec. Note that a value of 00 does not
allows operation in systems that do not use PCI bytes
result in 0 msec - it provides the maximum time of 256
as ISO 15765-4 does.
x 5.0 msec.
Note that turning the display of headers on (with
AT H1) will override some of the CAF1 formatting of
the received data frames, so that the received bytes
CAF0 and CAF1 [ CAN Auto Formatting off or on ]
will appear much like in the CAF0 mode (ie. as
These commands determine whether the ELM327 received). It is only the printing of the received data
assists you with the formatting of the CAN data that is that will be affected when both CAF1 and H1 modes
sent and received. With CAN Automatic Formatting are enabled, though; when sending data, the PCI byte
enabled (CAF1), the IC will automatically generate will still be created for you and padding bytes will still
formatting (PCI) bytes for you when sending, and will be added. Auto Formatting on (CAF1) is the default
remove them when receiving. This means that you can setting for the ELM327.
continue to issue OBD requests (01 00, etc.) as usual,
without regard to these extra bytes that the CAN
diagnostics systems require. With formatting on, the CF hhh [ set the CAN ID Filter to hhh ]
trailing (unused) data bytes that are received in a The CAN Filter works in conjunction with the CAN
frame will be removed as well, and only the relevant Mask to determine what information is to be accepted
ones will be shown. Beginning with v1.2 of the by the receiver. As each message is received, the
ELM327, lines with invalid PCI bytes are now ignored, incoming CAN ID bits are compared to the CAN Filter
rather than showing them as <DATA ERRORs. bits (when the mask bit is a 1). If all of the relevant
Occasionally, long (multi-frame) responses are bits match, the message will be accepted, and
returned by the vehicle. To help you analyze these, the processed by the ELM327, otherwise it will be
Auto Formatting mode will extract the total data length discarded. This three nibble version of the CAN Filter
and print it on one line. Following this will be each command makes it a little easier to set filters with 11
segment of the message, with the segment number (a bit ID CAN systems. Only the rightmost 11 bits of the
single hexadecimal digit) shown at the beginning of the provided nibbles are used, and the most significant bit
line with a colon (':') as a separator. is ignored. The data is actually stored as four bytes
You may also see the characters 'FC: ' at the internally however, with this command adding leading
beginning of a line (if you are experimenting). This zeros for the other bytes. See the CM command(s) for
represents a Flow Control message that is sent in more details.
response to a multi-line message. Flow Control
messages are automatically generated by the ELM327
in response to a First Frame reply, as long as the CF hh hh hh hh [ set the CAN ID Filter to hhhhhhhh ]
CFC setting is on (it does not matter whether you have
This command allows all four bytes (actually 29
selected the CAF1 or the CAF0 modes).
bits) of the CAN Filter to be set at once. The 3 most
Another type of message the RTR (or Remote
significant bits will always be ignored, and can be
Transfer Request) will be automatically hidden for
given any value. Note that this command can be used
you when in the CAF1 mode, since they contain no
to enter 11 bit ID filters as well, since they are stored in
data. When auto formatting is off (CAF0), you will see
the same locations internally (entering AT CF 00 00 0h
the characters 'RTR' printed when a remote transfer
hh is exactly the same as entering the shorter AT CF
request frame has been received.
hhh command).
Turning the CAN Automatic Formatting off (CAF0),
will cause the ELM327 to print all of the received data
bytes. No bytes will be hidden from you, and none will
AT Commands (continued)
CFC0 and CFC1 [ CAN Flow Control off or on ] bits are set with the AT SH command). Some systems
use several of these bits to assign a priority value to
The ISO 15765-4 protocol expects a Flow
messages, which is how the command was named.
Control message to always be sent in response to a
Any bits provided in excess of the five required will be
First Frame message. The ELM327 automatically
ignored, and not stored by the ELM327 (it only uses
sends these, without any intervention by the user. If
the five least significant bits of this byte). The default
experimenting with a non-OBD system, it may be
value for these priority bits is hex 18.
desirable to turn this automatic response off, and the
AT CFC0 command has been provided for that
purpose. The default setting is CFC1 - Flow Controls CS [ show the CAN Status ]
on.
Note that during monitoring (AT MA, MR, or MT), The CAN protocol requires that statistics be kept
there are never any Flow Controls sent no matter what regarding the number of transmit and receive errors
the CFC option is set to. detected. If there should be a significant number of
them, the device can even go off-line in order not to
affect other data on the bus, should there be a
CM hhh [ set the CAN ID Mask to hhh ] hardware or software fault. The AT CS command lets
you see both the Tx and the Rx error counts. If the
There can be a great many messages being
transmitter should be off (count >FF), you will see
transmitted in a CAN system at any one time. In order
OFF rather than a specific count.
to limit what the ELM327 views, there needs to be a
system of filtering out the relevant ones from all the
others. This is accomplished by the filter, which works CV dddd [ Calibrate the Voltage to dd.dd volts ]
in conjunction with the mask. A mask is a group of bits
that show the ELM327 which bits in the filter are The voltage reading that the ELM327 presents for
relevant, and which ones can be ignored. A must an AT RV reading can be calibrated with this
match condition is signaled by setting a mask bit to '1', command. The argument (dddd) must always be
while a 'don't care' is signaled by setting a bit to '0'. provided as 4 digits, with no decimal point (it assumes
This three digit variation of the CM command is used that a decimal place is between the second and the
to provide mask values for 11 bit ID systems (the most third digits).
significant bit is always ignored). To use this calibration feature, simply use a meter
Note that a common storage location is used with sufficient accuracy to read the actual input
internally for the 29 bit and 11 bit masks, so an 11 bit voltage. If, for example, the ELM327 consistently says
mask could conceivably be assigned with the next the voltage is 12.2V when you measure 11.99 volts,
command (CM hh hh hh hh), should you wish to do the simply issue AT CV 1199, and the device will
extra typing. The values are right justified, so you recalibrate itself for the provided voltage (it should then
would need to provide five leading zeros followed by read 12.0V due to roundoff). If you use a test voltage
the three mask bytes. that is less than 10 volts, dont forget to add a leading
zero (that is, 9.02 volts should be entered as AT CV
0902).
CM hh hh hh hh [ set the CAN ID Mask to hhhhhhhh ]
This command is used to assign mask values for D [ set all to Defaults ]
29 bit ID systems. See the discussion under the
CM hhh command it is essentially identical, except This command is used to set the options to their
for the length. Note that the three most significant bits default (or factory) settings, as when power is first
that you provide in the first digit will be ignored. applied. The last stored protocol will be retrieved from
memory, and will become the current setting (possibly
closing other protocols that are active). Any settings
CP hh [ set CAN Priority bits to hh ] that the user had made for custom headers, filters, or
masks will be restored to their default values, and all
This command is used to set the five most
timer settings will also be restored to their defaults.
significant bits in a 29 bit CAN ID word (the other 24
AT Commands (continued)
DM1 [ monitor for DM1s ] FC SM h [ Flow Control Set Mode to h ]
The SAE J1939 Protocol broadcasts trouble codes This command sets how the ELM327 responds to
periodically as they are detected, using Diagnostic First Frame messages when automatic Flow Control
Mode 1 (DM1) messages. This command sets the responses are enabled. The single digit provided can
ELM327 to continually monitor for this type of either be 0 (the default) for fully automatic responses,
message for you, following multi-segment transport 1 for completely user defined responses, or 2 for
protocols as required. Note that a combination of user defined data bytes in the response. More
masks and filters could be set to provide a similar complete details and examples can be found in the
output, but they would not allow multiline messages to Altering Flow Control Messages section.
be detected. The DM1 command adds the extra logic
needed for multiline messages.
This command is only available when a CAN FC SH hhh [ Flow Control Set Header to ]
Protocol (A, B, or C) has been selected for J1939 The header (or more properly CAN ID) bytes
formatting. It returns an error if attempted under any used for CAN Flow Control response messages can
other conditions. be set using this command. Only the right-most 11 bits
of those provided will be used - the most significant bit
DP [ Describe the current Protocol ] is always removed. This command currently only
affects Flow Control mode 1.
The ELM327 is capable of automatically
determining the appropriate OBD protocol to use for
each vehicle that it is connected to. When the IC FC SH hhhhhhhh [ Flow Control Set Header to ]
connects to a vehicle, however, it returns only the data
This command is used to set the header (or CAN
requested, and does not report the protocol found. The
ID) bits for Flow Control responses with 29 bit CAN ID
DP command is used to determine the current protocol
systems. Since the 8 nibbles define 32 bits, only the
that the ELM327 is selected for (even if not
right-most 29 bits of those provided will be used - the
connected). If the automatic option is also selected,
most significant three bits are always removed. This
the protocol will show the word "AUTO" before it,
command currently only affects Flow Control mode 1.
followed by the type. Note that the actual protocol
names are displayed, not the numbers used by the
protocol setting commands. FC SD [1-5 bytes] [ Flow Control Set Data to ]
The data bytes that are sent in a CAN Flow
DPN [ Describe the Protocol by Number ] Control message can be set with this command. The
current version of the software allows one to five data
This command is similar to the DP command, but
bytes to be defined, with the remainder of the data
it returns a number which represents the current
bytes in the message being automatically set to the
protocol. If the automatic search function is also
default CAN filler byte. Data provided with this
enabled, the number will be preceded with the letter
command is only used when Flow Control modes 1 or
A. The number is the same one that is used with the
2 have been enabled.
set protocol and test protocol commands.
AT Commands (continued)
PCI bytes, and possibly the CAN data length code (IFR) byte is normally the same as the value sent as
(DLC) if it has been enabled with PP 29. The current the Source (or Tester) Address byte that was in the
version of this IC does not display the CAN CRC code, header of the request. There may be occasions when
nor the special J1850 IFR bytes (which some protocols it is desireable to use some other value, however, and
use to acknowledge receipt of a message). this set of commands allows for this.
If you send AT IFR S, the ELM327 will use the
value defined as the Source Address (usually F1, but it
I [ Identify yourself ] can be changed by PP 06), even if another value was
Issuing this command causes the chip to identify sent in the Header bytes. This is not what is normally
itself, by printing the startup product ID string (currently required, and caution should be used when using
ELM327 v1.2). Software can use this to determine AT IFR S. AT IFR H restores the sending of the IFR
exactly which integrated circuit it is talking to, without bytes to those provided in the Header. AT IFR H is the
having to reset the IC. default setting.
IB 10 [set the ISO Baud rate to 10400 ] IIA hh [ set the ISO Init Address to hh ]
This command restores the ISO 9141-2 and The ISO 9141-2 and ISO 14230-4 standards state
ISO 14230-4 baud rates to the default value of 10400. that when beginning a session with an ECU, the
initiation sequence is to be directed to a specific
address ($33). If you wish to experiment by directing
IB 96 [set the ISO Baud rate to 9600 ] the slow five baud sequence to another address, it is
done with this command. For example, if you prefer
Several users have requested this command. It is
that the initiation be performed with the ECU at
used to change the baud rate used for the ISO 9141-2
address $7A, then simply send:
and ISO 14230-4 protocols (numbers 3, 4, and 5) to
9600 baud, while relaxing some of the requirements
>AT IIA 7A
for the initiation byte transfers. It may be useful for
experimenting with some vehicles. Normal 10,400
and the ELM327 will use that address when called to
baud operation can be restored at any time by issuing
do so (protocols 3 or 4). The full eight bit value is used
an IB 10 command.
exactly as provided no changes are made to it (ie no
adding of parity bits, etc.)
IFR0, IFR1, and IFR2 [ IFR control ] Note that setting this value does not affect any
address values used in the header bytes, and that this
The SAE J1850 protocol allows for an In-Frame value is reset to to $33 whenever the defaults, or the
Response (IFR) byte to be sent after each message, ELM327, are reset.
usually to acknowledge the correct receipt of that
message. The ELM327 automatically generates and
sends this byte for you by default, but you can override KW0 and KW1 [ Key Word checks off (0) or on (1) ]
this behaviour with this command. The ELM327 looks for specific bytes (called Key
The AT IFR0 command will disable the sending of Words) to be sent to it during the ISO 9141-2 and
all IFRs, no matter what the header bytes require. ISO14230-4 initiation sequences. If those bytes are
AT IFR2 is the opposite - it will force an IFR byte to not found, the initiation is said to have failed (you
always be sent, no matter what header bytes indicate. might see UNABLE TO CONNECT or perhaps BUS
The AT IFR1 command restores the response to INIT: ...ERROR). This may be because you are trying
provide the automatic sending of IFRs, as determined to connect to a non-OBD compliant ECU, or perhaps
by the K bit of the header byte. IFR1 is the default to an older one.
setting of the ELM327. If you wish to experiment, but do not want the
ELM327 to check the values contained in the key
IFR H and IFR S [ IFR from Header or Source ] words, you can turn the checking off with:
AT Commands (continued)
after which the IC will look for a response, but will not tells the ELM327 to always start in an 'Automatic'
look at the actual values of the bytes in the response. protocol search mode, which is the most useful for an
This may allow a connection in an otherwise unknown environment. ICs come from the factory set
impossible situation. Normal behaviour can be to this mode. If, however, you have only one vehicle
returned with AT KW1, which is the default setting. that you regularly connect to, storing that vehicles
Caution should be used with this command, as protocol as the default would make the most sense.
you are bypassing the checks that are normally As mentioned, the default setting for the memory
performed on the keyword bytes. The ELM327 sends function is determined by the voltage level at pin 5 at
an acknowledgement to the ECU for these bytes, but power up (or system reset). If it is connected to a high
that is without considering what the bytes actually are. level (VDD), then the memory function will be on by
You could be incorrectly activating an ISO 9141, or default. If pin 5 is connected to a low level, the
KWP 2000 protocol, so should be very careful. memory saving will be off by default.
AT Commands (continued)
are always assumed to be 00. For example, the DM2 PC [ Protocol Close ]
PGN has an assigned value of 00FECB (see SAE
There may be occasions where it is desirable to
J1939-73). To monitor for all DM2 messages, you
stop (deactivate) a protocol. Perhaps you are not using
would issue AT MP FECB, eliminating the 00, since
the automatic protocol finding, and wish to manually
the ELM327 always assumes that the PGN is
activate and deactivate protocols. Perhaps you wish to
preceeded by these two zeros.
stop the sending of idle (wakeup) messages, or have
This command is only available when a CAN
another reason. The PC command is used in these
Protocol (A, B, or C) has been selected for SAE J1939
cases to force a protocol to close.
formatting. It returns an error if attempted under any
other conditions. Note also that this version of the
ELM327 only displays responses that match the PP hh OFF [ turn Prog. Parameter hh OFF ]
criteria, not the requests that are asking for the
information. This command disables Programmable Parameter
number hh. Any value assigned using the PP hh SV
command will no longer be used, and the factory
MR hh [ Monitor for Receiver hh ] default setting will once again be in effect. The actual
This command also places the IC in a bus time when the new value for this parameter becomes
monitoring mode, displaying only messages that were effective is determined by its type. Refer to the
sent to the hex address given by hh. These are Programmable Parameters section for more
messages which are found to have the value hh in the information on the types.
second byte of a traditional three byte OBD header, in Note that PP FF OFF is a special command that
bits 8 to 15 of a 29 bit CAN ID, or in bits 8 to 10 of an disables all of the Programmable Parameters, as if you
11 bit CAN ID. Any single RS232 character aborts the had entered PP OFF for every possible one.
monitoring, as with the MA command. It is possible to alter some of the Programmable
Parameters so that it may be difficult, or even
impossible, to communicate with the ELM327. If this
MT hh [ Monitor for Transmitter hh ] occurs, there is a hardware means of resetting all of
the Programmable Parameters at once. Connect a
This command places the IC in a bus monitoring
jumper from circuit common to pin 28, holding it there
mode, displaying only messages that were sent by the
while powering up the ELM327 circuit. Hold it in
transmitter at the hex address given by hh. These are
position until you see the RS232 Receive LED begin to
messages which are found to have that value in the
flash (which indicates that all of the PPs have been
third byte of a traditional three byte OBD header, or in
turned off). At this point, remove the jumper to allow
bits 0 to 7 for CAN IDs. As with the MA and MR
the IC to perform a normal startup. Note that a reset of
monitoring modes, any RS232 activity (single
the PPs occurs quite quickly if you are holding the
character) aborts the monitoring.
jumper on for more than a few seconds and do not see
the RS232 receive light flashing, remove the jumper
NL [ Normal Length messages ] and try again there may be a problem with your
connection. This feature is only available beginning
Setting the NL mode on forces all sends and with v1.2, and is not a provided with any earlier
receives to be limited to the standard seven data bytes versions of the ELM327 IC.
in length, similar to the other ELM32x OBD ICs. To
allow longer messages, use the AL command.
Beginning with v1.2, the ELM327 does not require PP hh ON [ turn Programmable Parameter hh ON ]
a change to AL to allow longer message lengths for
This command enables Programmable Parameter
the KWP protocols to be received (as determined by
number hh. Once enabled, any value assigned using
the header length values). You can simply leave the IC
the PP hh SV command will be used where the factory
set to the default setting of NL, and all of the received
default value was before. Note that all programmable
bytes will be shown.
parameter values are set to FF at the factory, so
enabling a programmable parameter before assigning
AT Commands (continued)
a value to it might result in unexpected behaviour. The Vss), and that the ELM327 supply is a nominal 5V.
actual time when the value for this parameter becomes This will allow for the measurement of input voltages
effective is determined by its type. Refer to the up to about 28V, with an uncalibrated accuracy of
Programmable Parameters section for more typically about 2%.
information on the types.
Note that PP FF ON is a special command that
enables all of the Programmable Parameters at the SH xx yy zz [ Set the Header to xx yy zz ]
same time. This command allows the user to manually control
the values that are sent as the three header bytes in a
message. These bytes are normally assigned values
PP xx SV yy [ Prog. Param. xx: Set the Value to yy ]
for you (and are not required to be adjusted), but there
A value is assigned to a Programmable Parameter may be occasions when it is desirable to change them
using this command. The system will not be able to (particularly if experimenting with physical addressing).
use this new value until the Programmable Parameter The value of hex digits xx will be used for the first or
has been enabled, however. priority/type byte, yy will be used for the second or
receiver/target byte, and zz will be used for the third or
transmitter/source byte. These remain in effect until
PPS [ Programmable Parameter Summary ] set again, or until restored to their default values with
The complete range of current Programmable the D, WS, or Z commands.
Parameters are displayed with this command (even This command is used to assign all header bytes,
those not yet implemented). Each is shown as a PP whether they are for a J1850, ISO 9141, ISO 14230, or
value followed by a colon and the value that is a CAN system. The CAN systems will use these three
assigned to it. This is followed by a single digit either bytes to fill bits 0 to 23 of the ID word (for a 29 bit ID),
N or F to show that it is ON (enabled), or OFF or will use only the rightmost 11 bits for an 11 bit CAN
(disabled), respectively. See the Programmable ID. The additional 5 bits needed for a 29 bit system are
Parameters section for a more complete discussion. provided through the AT CP command (since they
rarely change).
If assigning header values for the KWP protocols
R0 and R1 [ Responses off (0) or on(1) ] (4 and 5), care must be taken when setting the first
header byte (xx) value. The ELM327 will always insert
These commands control the ELM327s automatic
the number of data bytes for you, but how it is done
display of responses. If responses have been turned
depends on the values that you assign to this byte. If
off, the IC will not wait for a reply from the vehicle after
the second digit of this first header byte is anything
sending a request, and will return immediately to wait
other than 0 (zero), the ELM327 assumes that you
for the next RS232 command. This is useful if sending
wish to have the length value inserted in that first byte
commands blindly when using the IC for a non-OBD
when sending. In other words, providing a length value
network application, or simulating an ECU in a basic
in the first header byte tells the ELM327 that you wish
learning environment. It is not recommended that this
to use a traditional 3 byte header, where the length is
option normally be used, however, as the vehicle may
stored in the first byte of the header.
have difficulty if it is expecting an acknowledgement
If you provide a value of 0 for that second digit of
byte and never receives one. The default is R1, or
the first header byte, the ELM327 will assume that you
responses on.
wish that value to remain as 0, and that you want to
have a fourth header (length) byte inserted into the
RV [ Read the input Voltage ] message. This is contrary to the ISO 14230-4 OBD
standard, but is in use by many KWP2000 systems for
This initiaties the reading of the voltage present at (non-OBD) data transfer, so may be useful when
pin 2, and the conversion of it to a decimal voltage. By experimenting. Support for 4 byte headers has only
default, it is assumed that the input is connected to the been added with v1.2 of the ELM327 IC, and was not
voltage to be measured through a 47K and 10K supported in previous versions.
resistor divider (with the 10K connected from pin 2 to
AT Commands (continued)
SH xyz [ Set the Header to 00 0x yz ] is selected with this command (eg. AT SP 3), that
protocol will become the default, and will be the only
Entering CAN 11 bit ID words (headers) normally
protocol used by the ELM327. Failure to initiate a
requires that extra leading zeros be added (eg. AT SH
connection in this situation will result in familiar
00 07 DF), but this command simplifies doing so. The
responses such as BUS INIT: ...ERROR, and no
AT SH xyz command accepts a three digit argument,
other protocols will be attempted. This is a useful
takes only the right-most 11 bits from that, adds
setting if you know that your vehicle(s) only require the
leading zeros, and stores the result in the header
one protocol.
storage locations for you. As an example, AT SH 7DF
is a valid command, and is quite useful for working
with 11 bit CAN systems. It actually results in the SP Ah [ Set Protocol to Auto, h ]
header bytes being internally stored as 00 07 DF.
This variation of the SP command allows you to
choose a starting (default) protocol, while still retaining
SP h [ Set Protocol to h ] the ability to automatically search for a valid protocol
on a failure to connect. For example, if your vehicle is
This command is used to set the ELM327 for
ISO 9141-2, but you want to occasionally use the
operation using the protocol specified by 'h', and to
ELM327 circuit on other vehicles, you might set
also save it as the new default. Note that the protocol
AT SP A3. The default protocol will then be 3, but with
will be saved no matter what the AT M0/M1 setting is.
the ability to automatically search for other protocols.
The currently valid protocols are:
Don't forget to disable the memory function if doing
0 - Automatic this, or your neighbours protocol could become your
1 - SAE J1850 PWM (41.6 Kbaud) new default. As for AT SP h, an AT SP Ah will save
2 - SAE J1850 VPW (10.4 Kbaud) the protocol information even if the memory option is
off. Note that the A can come before or after the h, so
3 - ISO 9141-2 (5 baud init, 10.4 Kbaud)
AT SP A3 can also be entered as AT SP 3A.
4 - ISO 14230-4 KWP (5 baud init, 10.4 Kbaud)
5 - ISO 14230-4 KWP (fast init, 10.4 Kbaud)
6 - ISO 15765-4 CAN (11 bit ID, 500 Kbaud) SR hh [Set the Receive address to hh ]
7 - ISO 15765-4 CAN (29 bit ID, 500 Kbaud) Depending on the application, users may wish to
8 - ISO 15765-4 CAN (11 bit ID, 250 Kbaud) manually set the address to which the ELM327 will
9 - ISO 15765-4 CAN (29 bit ID, 250 Kbaud) respond. Issuing this command will turn off the AR
A - SAE J1939 CAN (29 bit ID, 250* Kbaud) mode, and force the IC to only accept responses
addressed to hh. Use caution with this setting, as
B - USER1 CAN (11* bit ID, 125* Kbaud)
depending on what you set it to, you may end up
C - USER2 CAN (11* bit ID, 50* Kbaud) accepting (acknowledging with an IFR) a message that
* default settings (user adjustable) was actually meant for another module.
This command does not affect addresses used by
The first protocol shown (0) is a convenient way of the J1939 protocol. The J1939 routines derive the
telling the ELM327 to automatically try all protocols, required addresses from the header values, as
when looking for a valid one. It causes the ELM327 to required by the SAE standard.
sequence through each of the protocols, looking for
one that can be initiated correctly. When a valid
protocol is found, and the memory function is enabled, ST hh [ Set Timeout to hh ]
that protocol will then be remembered, and will After sending a request, the ELM327 waits a
become the new default setting. When saved like this, preset time for a response before it can declare that
the automatic mode searching will still be enabled, and there was NO DATA from the vehicle. The same
the next time the ELM327 fails to connect to the saved timer setting is also used after a response has been
protocol, it will again search all protocols for another received, to be sure that no more responses are
valid one. coming. The AT ST command allows this time to be
If another protocol (other than the Automatic one) adjusted, in increments of about 4 msec.
AT Commands (continued)
Setting the timer to a new value simply requires TP Ah [ Try Protocol h with Auto ]
using the ST command. For example, AT ST 19 will
This command is very similar to the AT TP
give a setting of about 100 msec (19 in hex is 25 in
command above, except that if the protocol that is tried
decimal). The ST timer is set to 32 by default (205
should fail to initialize, the ELM327 will then
msec), but the default setting can be adjusted by
automatically sequence through all of the protocols,
changing PP 03. Note that a value of 00 does not
attempting to connect to one of them.
result in 0 msec it is a special value that sets the
timer to the default value.
When Adaptive Timing is enabled, the AT ST time WM [1 to 6 bytes] [ set Wakeup Message to]
is modified by the actual measured response times,
however, the timer will never be set to a value that is This command allows the user to override the
greater than the AT ST setting. default settings for the wakeup messages (sometimes
known as the periodic idle messages). Simply provide
the bytes that you wish to have sent (one to six of
SW hh [ Set Wakeup to hh ] them), and the ELM327 will then send them as
Once a data connection has been made, some required, at the rate determined by the AT SW setting.
vehicles require that there be data flow every few Note that you do not have to add a checksum byte to
seconds, or the connection may time out and go to the data the ELM327 calculates the value and adds
sleep. The ELM327 will automatically generate it for you.
periodic wakeup messages in order to maintain this
connection, whenever the user is not requesting any
WS [ Warm Start ]
data. (Currently, only protocols 3, 4, and 5 generate
these messages.) The replies to these messages are This command causes the ELM327 to perform a
always ignored, and are not visible to the user. complete reset which is very similar to the AT Z
The time interval between these periodic wakeup command, but does not include the power on LED
messages can be adjusted in 20 msec increments test. Users may find this a convenient means to
using the AT SW hh command, where hh is any quickly start over without having the extra delay of the
hexadecimal value from 00 to FF. The maximum AT Z command.
possible time delay of just over 5 seconds thus occurs If using variable RS232 baud rates (ie AT BRD
when a value of FF (decimal 255) is used. The default commands), it is preferred that you reset the IC using
setting provides a nominal delay of 3 seconds between this command, rather than AT Z, as AT WS will not
messages. affect the chosen RS232 baud rate.
Note that the value 00 (zero) is treated as a very
special case, and must be used with caution, as it will
stop all periodic messages. This is provided as it may Z [ reset all ]
be convenient in certain circumstances. Issuing This command causes the chip to perform a
AT SW 00 will not change a prior setting for the time complete reset as if power were cycled off and then on
between wakeup messages, should the protocol be re- again. All settings are returned to their default values,
initialized. and the chip will be put in the idle state, waiting for
characters on the RS232 bus. Any baud rate set with
the AT BRD command will be reset to the default
TP h [ Try Protocol h ]
setting.
This command is identical to the SP command,
except that the protocol that you select is not
immediately saved in internal memory, so does not
change the default setting. Note that if the memory
function is enabled (AT M1), and this new protocol that
you are trying is found to be valid, that protocol will
then be stored in memory as the new default.
AT Command Summary
OBD Commands
CAN Specific Commands (protocols 6 to C)
AL Allow Long (>7 byte) messages
CAF0, CAF1 Automatic Formatting Off, or On*
AR Automatically Receive
CF hhh set the ID Filter to hhh
AT0, 1, 2 Adaptive Timing Off, Auto1*, Auto2
CF hhhhhhhh set the ID Filter to hhhhhhhh
BD perform a Buffer Dump
CFC0, CFC1 Flow Control Off, or On*
BI Bypass the Initialization sequence
CM hhh set the ID Mask to hhh
DP Describe the current Protocol
CM hhhhhhhh set the ID Mask to hhhhhhhh
DPN Describe the Protocol by Number
CP hh set CAN Priority (only for 29 bit)
H0, H1 Headers Off*, or On
CS show the CAN Status
MA Monitor All
DM1 (J1939) Monitor for DM1 messages
MR hh Monitor for Receiver = hh
FC SM h Flow Control Set the Mode to h
MT hh Monitor for Transmitter = hh
FC SH hhh FC Set the Header to hhh
NL Normal Length messages*
FC SH hhhhhhhh FC Set the Header to hhhhhhhh
PC Protocol Close
FC SD [1 - 5 bytes] FC Set Data to [...]
R0, R1 Responses Off, or On
MP hhhh (J1939) Monitor for PGN hhhh
SH xyz Set Header
SH xxyyzz Set Header
Misc. Commands
SP h Set Protocol to h and save it
SP Ah Set Protocol to Auto, h and save it CV dddd Calibrate the Voltage to dd.dd volts
SR hh Set the Receive address PP xx OFF disable Prog Parameter xx
ST hh Set Timeout to hh x 4 msec PP FF OFF all Prog Parameters Off
TP h Try Protocol h PP xx ON enable Prog Parameter xx
TP Ah Try Protocol h with Auto search PP FF ON all Prog Parameters On
PP xx SV yy for PP xx, Set the Value to yy
PPS print a PP Summary
* = default setting RV Read the Voltage
>at cv 1247
OK
OBD Commands
If the bytes that you send to the ELM327 do not five bytes would typically be sent to the vehicle. Note
begin with the letters A and T, they are assumed to that the carriage return character is only a signal to the
be OBD commands for the vehicle. Each pair of ASCII ELM327, and is not sent on to the vehicle.
bytes will be tested to ensure that they are valid After sending the command, the ELM327 listens
hexadecimal digits, and will then be combined into on the OBD bus for messages, looking for ones that
single data bytes for transmitting to the vehicle. are directed to it. If a message address matches,
OBD commands are actually sent to the vehicle those received bytes will be sent on the RS232 port to
embedded in a data packet. Most standards require the user, while messages received that do not have
that three header bytes and an error checksum byte matching addresses will be ignored (but are often still
be included with every OBD message, and the available for viewing with the AT BD command).
ELM327 adds these extra bytes to your command The ELM327 will continue to wait for messages
bytes automatically. The initial (default) values for addressed to it until there are none found in the time
these extra bytes are usually appropriate for most that was set by the AT ST command. As long as
requests, but if you wish to change them, there is a messages are received, the ELM327 will continue to
method to do so (see the Setting the Headers reset this timer. Note that the IC will always respond
section). with something, even if it is to say NO DATA
Most OBD commands are only one or two bytes in (meaning that there were no messages found that
length, but some can be longer. The ELM327 will limit were addressed to it).
the number of bytes that can be sent to the maximum
number allowed by the standards (seven bytes or 14
hexadecimal digits). Attempts to send more bytes, or
an odd number of hex digits, will result in a syntax
error the entire command is then ignored and a Hexadecimal Decimal
single question mark printed. Number Equivalent
Hexadecimal digits are used for all of the data 0 0
exchange with the ELM327 because it is the data 1 1
format used most often in the OBD standards. Most 2 2
mode request listings use haxadecimal notation, and it 3 3
is the format most frequently used when results are
4 4
shown. With a little practice, it should not be very
5 5
difficult to deal in hex numbers, but some people may
want to use a table such as Figure 1, or keep a 6 6
calculator nearby. All users will be required to 7 7
manipulate the results in some way, though 8 8
combining bytes and dividing by 4 to obtain rpm, 9 9
dividing by 2 to obtain degrees of advance, etc., and A 10
may find a software front-end to be of help. B 11
As an example of sending a command to the
C 12
vehicle, assume that A6 (or decimal 166) is the
D 13
command that is required to be sent. In this case, the
user would type the letter A, then the number 6, then E 14
would press the return key. These three characters F 15
would be sent to the ELM327 by way of the RS232
port. The ELM327 would store the characters as they Figure 1. Hex to Decimal Conversion
are received, and when the third character (the
carriage return) was received, would begin to assess
the other two. It would see that they are both valid hex
digits, and would convert them to a one byte value (the
decimal value is 166). The header bytes and a
checksum byte would then be added, and a total of
>04
to reset the codes
Bus Initiation
Both the ISO 9141-2 and ISO 14230-4 (KWP2000) vehicle.)
standards require that the vehicles OBD bus be Once the bus has been initiated, communications
initialized before any communications can take place. must take place regularly (typically at least once every
The ISO 9141 standard allows for only a slow (2 to 3 five seconds), or the bus will revert to a low-power
second) initiation process, while ISO 14230 allows for sleep mode. If you are not sending data requests
both a slow method, and a faster alternative. often enough, the ELM327 will generate requests for
The ELM327 will perform this bus initiation for you, you to ensure that the bus stays awake. You will
but not until your request needs to be sent. If the bus never see the responses to these, but you may see
initiation occurs during the automatic search process, the transmit LED flash periodically when these are
you will not see any status reporting, but if you have being sent.
the Auto option off (and are set to protocols 3, 4, or 5), By default, the ELM327 ensures that these
then you will see a message similar to this: wakeup or idle messages are sent every 3 seconds,
but this is adjustable with the AT SW command. The
BUS INIT: ...
contents of the wakeup message are also user
The three dots appear only as the slow initiation programmable with the AT WM command, if you
process is carried out a fast initiation does not show should wish to change them. Users generally do not
them. This will be followed by either the expression have to change either of the above though, as the
OK to say it was successful, or else an error message default settings work well with almost all systems.
to indicate that there was a problem. (The most
common error encountered is in forgetting to turn the
vehicles key to ON before attempting to talk to the
Wakeup Messages
After an ISO 9141 or ISO 14230 connection has provide some margin, the ELM327 will send a wakeup
been established, there needs to be periodic data message after three seconds of inactivity. This time
transfers in order to maintain that connection, and interval is fully programmable, should you prefer a
prevent it from going to sleep. If normal requests and different setting (see the AT SW command).
responses are being sent, that is usually sufficient, but As with the ELM323, the ELM327 allows users to
the ELM327 occasionally has to create its own change the actual wakeup message that is sent. To do
messages to prevent the connecton from timing out. so, simply send the ELM327 a Wakeup Message
We term these periodic messages that are created command, telling it what you wish the message to be
the Wakeup Messages, as they keep the connection changed to. For example, if you would like to send the
alive, and prevent the circuitry from going back to an data bytes 44 55 with the header bytes set to 11 22
idle or sleep mode. (Some texts refer to these 33, simply send the command:
messages simply as idle messages.) The ELM327
automatically creates and sends these for you if there >AT WM 11 22 33 44 55
appears to be no other activity there is nothing that
you need do to ensure that they occur. To see these, From that point forward, every wakeup message
once a connection is made, simply monitor the OBD that the ELM327 sends will be as shown above.
transmit LED you will see the periodic blips created You can change these as often as you want, the
when the ELM327 sends one. If you are curious as to only restriction being that every time you do, you must
the actual contents of the messages, you can then provide the complete message the header bytes and
perform a Buffer Dump to see the bytes. Note that the the data bytes (the current version of the ELM327 only
ELM327 never obtains or prints a response to any of allows for messages of one to six bytes in length). You
the wakeup messages. should not provide a checksum byte, as it will be
The standards state that if there is no activity at automatically added for you.
least every five seconds, the data connection may
close. To ensure that this does not happen, and to
Selecting Protocols
The ELM327 supports several different OBD you might want to use the Try Protocol command for
protocols (see Figure 2 below). As a user, you may your friends vehicle, rather than setting it to something
never have to choose which one it should use (since permanently. You can either say:
the factory settings cause an automatic search to be
>AT TP 3
performed for you), but while experimenting, you may
OK
want to specify which protocol is used.
For example, if you know that your vehicle uses if you already know that your friends vehicle uses
the SAE J1850 VPW protocol, you may want the protocol 3, or else you can say:
ELM327 to only try that protocol, and no others. If that
>AT TP 0
is what you want, simply determine the protocol
OK
number (from the chart below), then use the Set
Protocol AT Command as follows: which automatically tries all of the protocols (as
allowed by PP 07) looking for one that responds.
>AT SP 2
In general, users find that enabling the memory
OK
(setting pin 5 to 5V) and choosing the Auto option
From this point on, the default protocol (used after (the easiest way is to say AT SP 0) works very well.
every power-up or AT D command) will be protocol 2 After the initial search, the protocol used by your
(or whichever one that you have chosen). Verify this vehicle becomes the new default mode (so it is tried
by asking the ELM327 to describe the current protocol: first every time), and if the interface is used on another
vehicle, there is only a minor delay while it performs an
>AT DP
automatic search.
SAE J1850 VPW
Now what happens if your friend has a vehicle that
uses ISO 9141-2? How do you use the ELM327
interface for that vehicle? There are a few choices... Protocol Description
One possibility is to change your protocol selection
to allow for the automatic searching for another 0 Automatic
protocol, on failure of the current one. This is done by 1 SAE J1850 PWM (41.6 Kbaud)
putting an A with the protocol number, as follows:
2 SAE J1850 VPW (10.4 Kbaud)
>AT SP A2
OK 3 ISO 9141-2 (5 baud init)
TA SA
priority receiver transmitter
>AT CP vv >AT SH xx yy zz
>AT SH xx yy zz
vv xx yy zz
5 bits only
xx yy zz
vv xx yy zz
11 bit ID
29 bit ID
Electronics does not maintain lists of this information, is the default value used by the ELM327). Since it is
and cannot provide any further details for you. Mode rarely changed, it is assigned separately from the
22 and others are described in more detail in SAE other header bytes, using the CP command. Changing
document J2190, Enhanced E/E Diagnostic Test of this value is usually only required if experimenting
Modes. with J1939 systems.
The ISO14230-4 standard defines its header The next byte (xx) describes the type of message
bytes a little differently. Advanced experimenters will that this is, and is set to hex DB for functional
be aware that for ISO 14230-4, the first header byte addressing, and to DA if using physical addressing.
must always include the length of the data field, which The next two bytes are as defined previously for the
varies from message to message. From that, one other standards yy is the receiver (or Target
might assume that the you would need to redefine the Address), and zz is the transmitter (or Source
header for every message that is to be sent not so! Address). For the functional diagnostic requests, the
The ELM327 always determines the number of bytes receiver is always 33, and the transmitter is F1, which
that you are sending, and inserts that length for you, in is very similar to ISO 14230-4.
the proper place for the header that you are using. If Those that are familiar with the SAE J1939
you are using the standard ISO 14230-4 header, the standard will likely find this header structure to be very
length will be put into the first header byte, and you familiar (J1939 is a CAN standard for use by heavy-
need only provide the two (most significant) bits of this duty vehicles such as trucks and buses). We use
byte when defining the header. What you place in the slightly different terminology, but there is a direct
rest of the byte will be ignored by the ELM327 unless parallel between the bytes used by J1939 for the
you set them all to 0s. If they are all 0, it is assumed headers and the grouping of the bytes in the ELM327.
that you are experimenting with KWP four byte Refer to page 36 for a discussion of the J1939 support
headers, and the ELM327 then creates the fourth that is provided by the ELM327.
header byte for you. Again, you do not need to provide The final header format to discuss is that used in
any length to be put into this byte it is done for you. 11 bit CAN systems. They also use a priority/address
Addressing within the CAN (ISO 15765-4) structure, but shorten it into roughly three nibbles
protocols is quite similar in many ways. First, consider rather than three bytes. The ELM327 uses the same
the 29 bit standard. The ELM327 splits the 29 bits into commands to set these values as for other headers,
a CAN Priority byte and the three header bytes that we except that it only uses the 11 least significant (right-
are now familiar with. Figure 5 shows how these are most) bits of the provided header bytes, and ignores
combined for use by the ELM327. the others (as shown in Figure 6). It quickly becomes
The CAN standard states that for diagnostics, the inconvenient to have to enter six digits when only three
priority byte (vv in the diagram) will always be 1B (this are required, so there is a special short version of the
>01 00
7E8 06 41 00 BE 3F B8 13 00
>AT SH 7E0
OK
>01 05
7E8 03 41 05 46 00 00 00 00
Multiline Responses
There are occasions when a vehicle must respond making the reading of the data easier. With formatting
with more information than one message is able to on, the sequence numbers are shown with a colon (:)
show. In these cases, it responds with several lines after each, so that they clearly stand out (0:, 1:, etc.).
which must be assembled into one complete message. CAN systems add this hex digit (it goes from 0 to F
One example of this is a request for the serial then repeats), to aid in reassembling the data, just as
number of the vehicle (mode 09, PID 02). This is often the J1850 vehicle did.
a multiline reply that needs to be joined. In these The first line of this response says that there are
situations, you must take care to ensure that all of the 014 bytes of information to follow. That is 14 in
reply has been received and it is in the correct order hexadecimal, or 20 in decimal terms, which agrees
before assembling the message. The actual response with the 6 + 7 + 7 bytes shown on the three lines.
usually has a byte that shows the sequence of the Serial numbers are generally 17 digits long however,
data, to help with this. Here is one example for a so how do we assemble the number from 20 digits?
typical SAE J1850 vehicle: The second line shown begins with the familiar 49
02, as this is a response to an 09 02 request. Clearly
>0902
they are not part of the serial number. CAN will
49 02 01 00 00 00 31
occasionally add a third byte to the response which we
49 02 02 44 34 47 50
see next (the 01), which shows the number of data
49 02 03 30 30 52 35
items that are to follow (the vehicle can only have one
49 02 04 35 42 31 32
VIN, so the response says there is only one data item).
49 02 05 33 34 35 36
That third byte can be ignored, so this leaves 17 data
Note that all OBD compliant vehicles do not bytes which are the serial number (purposely chosen
necessarily provide this information. Many older ones to be identical to the those of the previous example).
do not, but as a rule the newer ones do. If your vehicle All that is needed is a conversion to ASCII, in order to
does not support this parameter, you will only see a read them, exactly as before.
NO DATA response. The following shows an example of a different type
The first two bytes (49 and 02) on each line of the of multiline response that can occur when two or more
above response do not show any vehicle information. ECUs respond to one request. Here is a typical
They only show that this is a response to an 09 02 response to an 01 00 request:
request. The next byte on each line shows the order in
>01 00
which the data is to be assembled. Assembling the
41 00 BE 3E B8 11
remainder of the data in that order, and ignoring the
41 00 80 10 80 00
first few 00s gives:
This is difficult to decipher without knowing a little
31 44 34 47 50 30 30 52 35 35 42 31 32
more information. We need to turn the headers on to
33 34 35 36
actually see who is doing the talking:
Using an ASCII table to convert these hex digits >AT H1
gives the following serial number for the vehicle: OK
1 D 4 G P 0 0 R 5 5 B 1 2 3 4 5 6 >01 00
48 6B 10 41 00 BE 3E B8 11 FA
CAN systems will display this information in a 48 6B 18 41 00 80 10 80 00 C0
somewhat different fashion. Here is a typical response
Now, if you analyze the header, you can see that
from a CAN vehicle:
the third byte shows ECU 10 (the engine controller)
>0902 and ECU 18 (the transmission) are both responding
014 with a reply that is valid for them. This type of
0: 49 02 01 31 44 34 response occurs often, and you should be prepared for
1: 47 50 30 30 52 35 35 it.
2: 42 31 32 33 34 35 36 A final example shows how similar messages
might occasionally be mixed up in a CAN system. We
CAN Formatting has been left on (the default),
>AT H1
OK
>09 04
7E8 10 13 49 04 01 35 36 30
7E8 21 32 38 39 34 39 41 43
7E9 10 13 49 04 01 35 36 30
7E8 22 00 00 00 00 00 00 31
7E9 21 32 38 39 35 34 41 43
7E9 22 00 00 00 00 00 00 00
7E8 10 13 49 04 01 35 36 30
7E8 21 32 38 39 34 39 41 43
7E8 22 00 00 00 00 00 00 31
and
7E9 10 13 49 04 01 35 36 30
7E9 21 32 38 39 35 34 41 43
7E9 22 00 00 00 00 00 00 00
>AT FC SH 7E8
OK
>AT FC SD 00 11 22
OK
J1939 Support
The SAE J1939 CAN standard is a relatively new defined by the transport protocol (J1939-21). If the
protocol that is being used in many types of heavy responses are multisegment, the ELM327 handles all
machinery trucks, agricultural equipment, and of the negotiation for you (transparently - you wont
busses, to name a few. It uses a standard CAN see it happen). If formatting is on (ie CAF1), the output
(ISO 11898) physical interface, and defines its own will resemble the format used to print the ISO 15765-4
format for data transfer (although it is very similar to multiline responses. Note that if you provide three data
the ISO 15765 that is used for automobiles). bytes, the ELM327 will assume that you are sending a
The ELM327 offers some support for the J1939 PGN, and will look for responses to that. If you send
standard in Protocol A. (Protocols B and C can be other than 3 data bytes, it will assume that you are
selected for J1939 formatting if needed, with making a general request, and will only look for
Programmable Parameters 2C and 2E). Although this responses to the Source Address (as given in the third
is not full support as dictated by the standards, the byte of the header).
ELM327 implementation should at least allow you to The SAE J1939 standard predefines several
begin experimenting. Diagnostic Messages, and assigns ID values to them.
The default data rate for Protocol A has been set The first of these (designated DM1) are reserved for
to 250 kbps, as set by the SAE J1939-11 standard. trouble codes, which are periodically broadcast over
Should your application require a different speed, it is the CAN network. Since these are commonly required,
easily changed with PP 2B. the ELM327 provides a special command to monitor
J1939 messages use 29 bit CAN IDs, and up to 8 for them (aptly named DM1). If you wish to monitor for
data bytes for each message (ISO 15765 always uses all DM1 messages, simply issue:
8 bytes). Diagnostics on SAE J1939 are defined by the
J1939-73 standard, and the actual data transfer >AT DM1
protocol is described in J1939-21. If you are going to
and the ELM327 will print out all that it finds.
do a lot of work with J1939, it may be wise to purchase
The DM1 message is the only one that is presently
these standards documents from the Society of
predefined by the ELM327 for you. To monitor for any
Automotive Engineers (SAE).
other diagnostic message, you need to know its PGN
The ELM327 handles the sending of messages
number (in hexadecimal), and monitor for that using
with the J1939 protocol in the same way as any of the
the AT MP command. For example, the DM2 PGN
other protocols. The header bytes are predefined for
number is 65227, or 00FECB in hexadecimal. The
you and all you need do is provide the data bytes that
ELM327 requires hexadecimal, and assumes that all
you wish to send.
PGNs begin with 00 so to monitor for DM2s, you
For example, assume that you wish to send a
need only send:
request for engine temperature (PGN 00FEEE). J1939
specifies a reverse order for the data bytes, so when >AT MP FECB
you tell the ELM327 what to send, you need to switch
the order of the data bytes, and then send them as you and the IC will begin looking for all replies to DM2
would any other request: requests.
Please note that the ELM327s support for the
>EE FE 00 SAE J1939 standard is only basic (it does not support
address negotiation as described in J1939-73, for
The ELM327 then adds the required header (ID)
example), and it has not undergone the extensive
bytes, etc. and sends the message for you. (It also
testing that our automotive protocols have. We simply
configures itself correctly to be able to receive the
have had a large number of requests for support of the
response.) Note that the ELM327 sets the header
protocol, and wanted to provide something for you to
bytes to EC FF F9 by default (for global requests from
begin experimenting with. As always, we are quite
OBD service tool #1), so if you want something else,
open to your feedback and your suggestions for future
you will have to change the headers, using the AT SH
upgrades.
command.
All responses to a request are printed by the
ELM327, whether they are a single CAN message
transmission, or a multisegment transmission as
Restoring Order
There may be times when it seems the ELM327 is the four status LEDs in sequence. A much quicker
out of control, and you will need to know how to option is available with the ELM327, however, if the
restore order. Before we continue to discuss modifying led test is not required the Warm Start command:
too many parameters, this seems to be a good point to
discuss how to get back to the start. Perhaps you >AT WS
have told the ELM327 to monitor all data, and there
This new command performs a software reset,
are screens and screens of data flying by. Perhaps the
restoring exactly the same items as the AT Z does, but
IC is now responding with NO DATA when it did work
it omits the LED test, so it is considerably faster. Also,
previously. This is when a few tips may help.
it does not affect any baud rates that have been set
The ELM327 can always be interrupted from a
with the AT BRD command, so is essential if you are
task by a single keystroke from the keyboard. As part
modifying baud rates with software.
of its normal operation, checks are made for received
Any of the above methods should be effective in
characters, and if found the IC will stop what it is doing
restoring order while experimenting. There is always
at the next opportunity. Often this means that it will
the chance that you may have changed a
continue to send the information on the current line,
Programmable Parameter, however, and are still
then stop, print a prompt character, and wait for your
having problems with your system. In this case, you
input. The stopping may not always seem immediate if
may want to simply turn off all Programmable
the RS232 send buffer is almost full, though you will
Parameters (which forces them to their default values).
not actually see the prompt character until the buffer
To do so, send the command:
has emptied, and your terminal program has finished
printing what it has received. >AT PP FF OFF
There are times when the problems seem more
serious and you dont remember just what you did to which should disable all of the changes that you have
make them so bad. Perhaps you have adjusted some made. You can then start over with what is essentially
of the timers, then experimented with the CAN filter, or a device with factory settings. There may be times
perhaps tried to see what happens if the header bytes when even this command is not recognized, however.
were changed. All of these can be reset by sending If that is the case, you will need to use the hardware
the set to Defaults AT Command: method of turning the PPs off (see the next section
Programmable Parameters, for more details).
>AT D
OK
>AT Z
Programmable Parameters
The ELM327 contains several programmable >AT PPS
memory locations that retain their data even after 00:FF F 01:00 N 02:FF F 03:32 F
power is turned off. Every time the IC is powered up, 04:01 F 05:FF F 06:F1 F 07:09 F
these locations are read and used to change the 08:FF F 09:00 F 0A:0A F 0B:FF F
default settings for such things as whether to display 0C:68 F 0D:0D F 0E:FF F 0F:FF F
the headers, or how often to send wakeup messages. 10:0D F 11:00 F 12:FF F 13:32 F
The settings, or parameters, can be altered by the 14:FF F 15:FF F 16:FF F 17:92 F
user at any time using a few simple commands. These 18:00 F 19:FF F 1A:FF F 1B:FF F
Programmable Parameter commands are standard AT 1C:FF F 1D:FF F 1E:FF F 1F:FF F
Commands, with one exception: each one requires a 20:FF F 21:FF F 22:FF F 23:FF F
two-step process to complete. This extra step provides 24:00 F 25:00 F 26:00 F 27:FF F
some security against random inputs that might try to 28:FF F 29:FF F 2A:FF F 2B:02 F
make changes. 2C:E0 F 2D:04 F 2E:80 F 2F:0A F
The following pages list the currently supported
Programmable Parameters for this version of the You can see that PP 01 now shows a value of 00,
ELM327. As an example of how to use a and it is enabled (oN).
Programmable Parameter, consider PP 01 (the Another example shows how you might change
printing of headers). If you are constantly powering the CAN filler byte. Some systems use AA as the
your ELM327 and then using AT H1 to turn the value to put into unused CAN bytes, while the ELM327
headers on, you may want to change its default uses 00 by default. To change the ELM327s
setting, so that they are always on by default. To do behaviour, simply change PP 26:
this, simply set the value of PP 01 to 00:
>AT PP 26 SV AA
>AT PP 01 SV 00 OK
OK
>AT PP 26 ON
This changes the value associated with PP 01, but OK
does not enabled it. To make the change effective, you
Again, PP 26 is of type D, so the above change
must also type:
will not actually take effect until the AT D command is
>AT PP 01 ON issued, or the ELM327 is reset.
OK The Programmable Parameters are a great way to
customize your ELM327 for your own use, but you
At this point, you have changed the default setting
should do so with caution if using commercial
for AT H1/H0, but you have not changed the actual
software. Most software expects an ELM327 to
value of the current AT H1/H0 setting. From the Type
respond in certain ways to commands, and may be
column in the table on page 39, you can see that the
confused if the headers are on when not expected, or
change only becomes effective the next time that
if the CAN response shows data length codes, for
defaults are restored. This could be from a reset, a
example. If you make changes, it might be best to
power off/on, or possibly an AT D command.
make small changes and then see the effect of each,
It is occasionally difficult to know what changes
so that it is easier to retrace your steps and undo
you have made to the Programmable Parameters. To
what you have done. If you get in too deeply, dont
help with that, the ELM327 provides a Programmable
forget the all off command:
Parameter Summary (PPS) command. This simply
prints a list of all of the supported PPs, their current >AT PP FF OFF
value, and whether they are on/enabled (N), or
No matter what software you use, you might get
off/disabled (F). For an ELM327 v1.2 IC, with only the
into more serious trouble, should you change the baud
headers enabled (as discussed above), the summary
rate, or the Carriage Return character, for example,
table would look as follows:
and forget what you have set them to. The Carriage
Return value set by PP 0D is the only character that is
recognized by the ELM327 as ending a command, so
The following is a summary of the currently implemented Programmable Parameters (ELM327 v1.2):
0A Linefeed Character 00 to FF 0A R
0C Here are some example baud rates, and the divisor to be used for
(contd) each:
19.2 D0 (208)
38.4 68 (104)
57.6 45 (69)
115.2 23 (35)
230.4 11 (17)
500 08 (8)
29 Printing of the CAN data length (DLC) when printing header bytes 00 = ON FF D
FF = OFF (OFF) (see note 2)
Note that b7 is the msb, and b0 is the lsb. For example, the default
value of E0 can be shown as 11100000 in binary, which has b7, b6
and b5 set to 1s. This means that by default, 11 bit IDs will be
sent, the data length will vary, and the ELM327 will receive
messages with either 11 or 29 bit IDs.
Notes: 1. The Type column indicates when changes to the Programmable Parameter take effect. Possible values
are:
I - the effect is immediate,
D - takes effect after Defaults are restored (AT D, AT Z, AT WS or power off/on)
R - will only become apparent after a Reset (AT Z, AT WS or power off/on)
P - only takes effect after power off/on or AT Z.
2. These are changes since the last version of the IC.
Computer Control
A common question we receive with our OBD ready to receive an input. To use them, set one of your
interpreters is Can I connect the ELM32x circuit port pins to normally provide a high output, and
directly to my own circuit, or must I use the RS232 connect it to the RTS input. Use another port pin as an
interface shown? Certainly you may connect directly input to monitor the ELM327 Busy output. When you
to our ICs you do not need to use an RS232 want to send a command, simply check the Busy
interface. output first. If it is at a logic high level, then bring your
The ELM327 does not use an inverted RS232 Rx RTS line low and wait for the Busy line to go low (you
input (as was the case with the ELM320, ELM322 and might want to consider using an edge triggered
ELM323), so interfacing without RS232 levels is now interrupt for this, if one is available). When Busy does
even simpler. If you have a microprocessor that uses go low, restore your RTS line to a high level, and then
the same 5V supply as the ELM327, and has an send your command to the ELM327. No need to worry
internal UART, all you will generally need to do is about the ELM327 becoming busy again after you
connect your processors transmit output to the raise the RTS line at this point once Busy goes low,
ELM327s receive input, and then your receive input to the ELM327 waits (indefinitely) for your command.
the ELM327s transmit output. Communications should If you do not use the RTS input on the ELM327,
work fine with this connection (and a correct baud rate dont forget to tie it to a high logic level.
setting). The ELM327 is a CMOS device that uses
industry standard levels for all inputs and outputs, so is
easily interfaced to almost any logic circuit.
The ELM327 has a hand-shaking feature that may
be very useful for some interfaces. There is a request
to send (RTS) input, and a Busy output that can be
used to interrupt the ELM327, and to see when it is
Error Messages
When hardware or data problems occur, the ELM327 automatic search for a protocol, and are only visible if
will respond with one of the following short messages. not in the auto mode. Here is a brief description of
Some of the messages are suppressed during an each:
DATA ERROR ?
There was a response from the vehicle, but the This is the standard response for a misunderstood
information was incorrect or could not be recovered. command received on the RS232 input. Usually it is
due to a typing mistake.
<DATA ERROR
There was an error in the line that this points to,
either from an incorrect checksum, or a problem with
the format of the message (the ELM327 still shows
you what it received). There could have been a noise
burst which interfered, possibly a circuit problem, or
perhaps you have the CAN Auto Formatting (CAF) on
and you are looking at a system that is not of the
ISO 15765-4 format. Try re-sending the command
again if it was a noise burst, it may be received
correctly the second time.
NO DATA
The IC waited for the period of time that was set
by AT ST, but detected no response from the vehicle.
Example Applications
The SAE J1962 standard dictates that all OBD produce CAN transceiver ICs look at the NXP
compliant vehicles must provide a standard connector 82C251 (NXP was formerly Philips), the Texas
near the drivers seat, the shape and pinout of which is Instruments SN65LBC031, and the Linear Technology
shown in Figure 8 below. The circuitry described here LT1796, to name only a few. Be sure to pay attention
can be used to connect to this J1962 plug without to the voltage limits depending on the application,
modification to your vehicle. you may have to tolerate 24V, not just 12V.
The male J1962 connector required to mate with a The next interface shown is for the ISO 9141 and
ISO 14230 connections. We provide two output lines,
as required by the standards, but depending on your
vehicle, you may not need to use the ISO-L output.
1 8 (Many vehicles do not require this signal for initiation,
9 16
but some do, so it is shown here.) If your vehicle does
not require the L line, simply leave pin 22 unused.
The ELM327 controls both of the ISO outputs
Figure 8. The J1962 Vehicle Connector through NPN transistors Q6 and Q7 as shown. These
transistors have 510 pullup resistors connected to
their collectors, as the standard requires. We are often
vehicles connector may be difficult to obtain in some asked about substitutes for these resistors if you
locations, and you could be tempted to improvise by need to substitute, you can either go up to 560 or
making your own connections to the back of your possibly make 510 from two resistors (1/4W 240 +
vehicles connector. If doing so, we recommend that 270 resistors work well), but we do not recommend
you do nothing that would compromise the integrity of using a lower value as it stresses every device on the
your vehicles OBD network. The use of any connector bus. Note that 1/2W resistors should be used as a
which could easily short pins (such as an RJ11 type short at 13.8V causes about 0.4W dissipation.
telephone connector) is definitely not recommended. Data is received from the K Line of the OBD bus
The circuit on page 48 (Figure 9) shows how the and connected to pin 12 after being reduced by the
ELM327 might typically be used. Circuit power is R20/R21 voltage divider shown. Because of the
obtained from the vehicle (via OBD pins 16 and 5) Schmitt trigger input on pin 12, these resistors will give
and, after a protecting diode and some capacitive typical threshold levels of 9.1V (rising) and 4.7V
filtering, is presented to a five volt regulator. (Note that (falling), providing a large amount of noise immunity
a few vehicles have been reported to not have a pin 5 while also protecting the IC.
on these you will use pin 4 instead of pin 5.) The The final OBD interface shown is for the two
regulator powers several points in the circuit as well as J1850 standards. The J1850 VPW standard needs a
an LED (for visual confirmation that power is present). positive supply of up to 8V while the J1850 PWM
We have shown a 78L05 for the regulator as that limits needs 5V, so we have shown a two level supply that
the current available to about 100mA which is a safe can provide both. This dual voltage supply uses a
value for experimenting. The CAN interface is a low 317L adjustable regulator as shown, controlled by the
impedance circuit however, and if doing sustained pin 3 output. With the resistor values given, the
transmissions on CAN, this type of regulator may shut selected voltages will be about 7.5V and 5V, which
down on over-temperature. Should you experience this works well for most vehicles. The two J1850 outputs
problem, you may want to consider using a 1 Amp are driven by the Q1-Q2 combination for the Bus+,
version of the regulator. and Q3 for the Bus-.
The top left corner of Figure 9 shows the CAN The J1850 VPW input uses a resistor divider as
interface circuitry. We do not advise making your own was used for the ISO input. Typical threshold voltages
interface using discrete components CAN buses with the resistors shown will be about 4.2V (rising) and
may have a lot of critical information on them, and you 2.2V (falling). The J1850 PWM input is a little different
can easily do more harm than good if you fail. It is in that it must convert a differential input into a single-
strongly recommended that you use a commercial ended one for use by the ELM327. In operation, Q4 is
transceiver chip as shown. The Microchip MCP2551 is actually used as the difference amplifier. The Q4-D3
used in our circuit, but most major manufacturers series circuit sets a threshold voltage of about 1V (for
CAN-L
14
Vbat +12V U3 +5V
6
CAN-H R32 R33 16 78L05
8 7 6 5 Battery L5
100 100 R31 D1 PWR
Positive
4.7K C1 C6
C8 C9 MCP2551 0.1F 0.1F
560pF 560pF U2 R1
5 470
1 2 3 4
+5V Signal
Ground
Semiconductors Resistors
D1 = 1N4001 R32, R33= 100
D2, D3, D4, D5 = 1N4148 R5 = 240
L1, L2, L3, L4 = Yellow LED R1, R2, R3, R4, R27, R28, R29, R30 = 470
L5 = Green LED R17, R19 = 510 1/2W
Q1, Q3, Q5, Q6, Q7, Q9 = 2N3904 (NPN) R16, R18 = 2.2 K
Q2, Q4, Q8 = 2N3906 (PNP) R6, R7, R14, R15, R23, R26, R31 = 4.7 K
U1 = ELM327 R8, R9, R11, R13, R22, R24, R25, R35 = 10 K
U2 = MCP2551 R10, R21, R36 = 22 K
U3 = 78L05 (5V, 100mA regulator) R20, R34 = 47 K
U4 = 317L (adj. 100mA regulator) R12 = 100 K
Capacitors Misc
C1, C2, C5, C6, C7 = 0.1uF 16V X1 = 4.000MHz crystal
C3, C4 = 27pF RS232 Conn = DB9F
C8, C9 = 560pF IC Socket = 28pin 0.3 (or 2 x 14pin)
+12V +5V
16 78L05
USB
Battery PWR 5.0V
Positive TVS Interface
+5V (type B
0.1F 0.1F
470 connector)
5
Signal
Ground 7 8 1 (+5)
SiLabs 5 2 (D-)
1F 6 CP2102 4 3 (D+)
+5V
3 4 (SG)
26 25
0.1F
4x +5V +5V
470
28 27 26 25 24 23 22 21 20 19 18 17 16 15
4.00MHz
+12V
10K
4.7K
22K
4.7K
10K
2
J1850 Bus +
Section Index
Description and Features....................................................................................... 1
Pin Descriptions..................................................................................................... 2
Ordering Information.............................................................................................. 3
Absolute Maximum Ratings....................................................................................4
Electrical Characteristics........................................................................................ 4
Overview................................................................................................................ 5
Communicating with the ELM327...........................................................................5
AT Commands....................................................................................................... 6
AT Command Summary.......................................................................................17
Reading the Battery Voltage................................................................................ 18
OBD Commands.................................................................................................. 19
Talking to the Vehicle........................................................................................... 20
Interpreting Trouble Codes...................................................................................21
Resetting Trouble Codes......................................................................................22
Quick Guide for Reading Trouble Codes............................................................. 22
Bus Initiation.........................................................................................................23
Wakeup Messages...............................................................................................23
Selecting Protocols...............................................................................................24
OBD Message Formats........................................................................................25
Setting the Headers..............................................................................................27
Monitoring the Bus............................................................................................... 30
CAN Messages and Filtering................................................................................31
Multiline Responses............................................................................................. 32
CAN Message Formats........................................................................................ 34
Altering Flow Control Messages...........................................................................35
J1939 Support...................................................................................................... 36
Restoring Order....................................................................................................37
Programmable Parameters.................................................................................. 38
Using Higher RS232 Baud Rates.........................................................................42
Computer Control................................................................................................. 44
Error Messages.................................................................................................... 44
Example Applications........................................................................................... 46