English
Language : 

ELM329 Datasheet, PDF (26/76 Pages) ELM Electronics – CAN Interpreter
ELM329
OBD Commands
If the bytes that you send to the ELM329 do not
begin with the letters ‘A’ and ‘T’, they are assumed to
be OBD commands for the vehicle. Each pair of ASCII
bytes will be tested to ensure that they are valid
hexadecimal digits, and will then be combined into
data bytes for transmitting to the vehicle.
Commands to the vehicle are actually sent
embedded in a data packet. The packet consists of
header bytes (ie CAN ID bits), as well as checksum
and other bits as defined by the ISO standards. The
ELM329 adds these extra bits and bytes to your
message as required - you do not normally have to
even consider them. If you do want to change the ID
bits or data lengths at some point, there is a
mechanism to do so (see the ‘Setting the Header / ID
Bits’ section).
Most OBD commands are only one or two bytes in
length, but some can be longer. The current version of
the ELM329 will accept up to eight data bytes to be
sent (there is no way to send any more bytes with this
version). Attempts to send more than eight bytes will
result in an error – the entire command is then ignored
and a single question mark printed.
Hexadecimal digits are used for all of the data
exchange with the ELM329 because it is the data
format used most often in the OBD standards. Most
mode request listings use hexadecimal notation, and it
is the format most frequently used when results are
shown. With a little practice, it should not be very
difficult to deal in hex numbers, but some people may
want to use a table such as Figure 1, or keep a
calculator nearby. Dealing with the hex digits can not
be avoided - eventually all users need to manipulate
the results in some way (combining bytes and dividing
by 4 to obtain rpm, dividing by 2 to obtain degrees of
advance, converting temperatures, etc.).
As an example of sending a command to the
vehicle, assume that A6 (or decimal 166) is the
command that is required to be sent. In this case, the
user would type the letter A, then the number 6, then
would press the return key. These three characters
would be sent to the ELM329 by way of the RS232
port. The ELM329 would store the characters as they
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/ID bytes would then
be added, and the complete message would then be
sent to the vehicle. Note that the carriage return
character is only a signal to the ELM329, and is never
sent to the vehicle.
After sending the command, the ELM329 listens
on the OBD bus for replies, looking for ones that are
directed to it. If a message address matches, the
received bytes will be converted to ascii characters
and sent on the RS232 port to the user, while
messages received that do not have matching
addresses will be ignored.
The ELM329 will continue to wait for messages
addressed to it until there are none found in the time
that was set by the AT ST command. As long as
messages continue to be received, the ELM329 will
continue to reset this timer, and look for more. Note
that the IC will always respond to a request with some
reply, even if it is to say ‘NO DATA’ (meaning that
there were no messages found, or that some were
found but they did not match the receive criteria).
Hexadecimal
Number
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
Decimal
Equivalent
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Figure 1. Hex to Decimal Conversion
ELM329DSB
Elm Electronics – Circuits for the Hobbyist
www.elmelectronics.com
26 of 76