ELM327
AT Commands (continued)
AT0, AT1 and AT2
[ Adaptive Timing control ]
When receiving responses from a vehicle, the
ELM327 has traditionally waited the time set by the
AT ST hh setting for a response. To ensure that the IC
would work with a wide variety of vehicles, the default
value was set to a conservative (slow) value. Although
it was adjustable, many people did not have the
equipment or experience to determine a better value.
The new Adaptive Timing feature will automatically
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
algorithm learns from them, and makes appropriate
adjustments. Note that it always uses your AT ST hh
setting as a maximum setting, however. With this new
Adaptive Timing, sampling rates are often doubled or
tripled from those typically experienced with prior
versions.
There are three adaptive timing settings that are
available for use. By default, Adaptive Timing option 1
(AT1) is selected, and is the recommended setting.
AT0 is used to disable Adaptive timing (usually used
when experimenting), while AT2 is a more agressive
version of AT1 (the effect is more noticeable for very
slow connections – you may not see much difference
with faster OBD systems). The J1939 protocol does
not support Adaptive Timing – responses for J1939
use fixed timeouts as set in the standard.
BD
[ perform an OBD Buffer Dump ]
All messages sent and received by the ELM327
are stored temporarily in a set of twelve memory
storage locations called the OBD Buffer. Occasionally,
it may be of use to view the contents of this buffer,
perhaps to see why an initiation failed, to see the
header bytes in the last message, or just to learn more
of the structure of OBD messages. You can ask at any
time for the contents of this buffer to be ‘dumped’
(printed) – when you do, the ELM327 sends a length
byte (representing the length of the message in the
buffer) followed by the contents of all twelve OBD
buffer locations.
The length byte represents the actual number of
bytes received, whether they fit into the OBD buffer or
not. This may be useful when viewing long data
streams (with AT AL), as the number accurately
represents the number of bytes received, mod 256.
Note that only the first twelve bytes received are
stored in the buffer.
BI
[ Bypass the Initialization sequence ]
This command should be used with caution. It
allows an OBD protocol to be made active without
requiring any sort of initiation or handshaking to occur.
The initiation process is normally used to validate the
protocol, and without it, results may be difficult to
predict. It should not be used for routine OBD use, and
has only been provided to allow the construction of
ECU simulators and training demonstrators.
BRD hh
[ try Baud Rate Divisor hh ]
This command is used to change the RS232 baud
rate divisor to the hex value provided by hh. The actual
baud rate (in kbps) will be 4000 divided by this divisor.
For example, a setting of 115.2kbps would require a
divisor of 4000/115.2 or 35. In hexadecimal notation,
35 is written as 23, so the actual command that needs
to be sent would be AT BRD 23.
Since the ELM327 may be able to operate at
much higher rates than some interfaces can support,
the BRD command allows requested rates to be tested
before they are committed to (with automatic fall-back
to the previous baud rate if there are problems). In
use, the command is sent to request a change in the
baud rate, and the ELM327 responds with the familiar
“OK”. After that, an internal timer begins waiting, to
ensure that the controlling computer has sufficient time
to change their baud rate to the new rate. The ELM327
then sends the poweron message at the new baud
rate, and begins waiting while the controlling computer
assesses what has been received. If the AT I message
was received without errors, the controlling computer
sends a carriage return character, and if received by
the ELM327, the rate will be retained. If the controlling
computer sees errors (or worse, nothing), it provides
no response, and switches back to the initial baud
rate. If the ELM327 times out after receiving no
response, or has received something that does not
appear to be a carriage return character, it will revert
back to the former baud rate. A more detailed
discussion of this entire process is provided in the
‘Using Higher RS232 Baud Rates’ section.
Any new baud rate that is set in this manner is
retained across calls to set defaults (AT D), and for
warm starts (AT WS), but will not survive a hardware
reset (a power off/on or a call to AT Z). If you are in the
habit of calling AT Z in your code, we advise using AT
WS instead.
ELM327DSC
Elm Electronics – Circuits for the Hobbyist
www.elmelectronics.com
7 of 51