
ELM329
47 of 83
ELM329DSC
Elm Electronics – Circuits for the Hobbyist
www.elmelectronics.com
Setting Timeouts - the AT ST and AT AT Commands
Users often ask about how to obtain faster OBD
scanning rates. There is no definite answer for all
vehicles, but the following information may help with
your understanding of how the AT ST and AT AT
settings are used by the ELM329.
A typical vehicle request and response is shown in
the diagram below:
ELM329
Vehicle
request is sent
response
ELM waits up
to 100 msec
ELM waits 100 msec
for more responses
The ELM329 sends a request then waits up to
100 msec for a reply (the standard requires 50 msec).
If no reply arrives in that time, an internal timer stops
the waiting, and the ELM329 prints ‘NO DATA’. If a
reply has been received, the ELM329 must wait to see
if any more replies are coming (and it uses the same
internal timer to stop the waiting if no more replies
arrive). While all replies should be received within 50
msec, the 100 msec setting ensures that a response is
not missed.
As an example, consider a vehicle that responds
to a query in 10 msec. With the ST timeout set to
100 msec, the fastest scan rate possible would only be
about 9 queries per second (it’s 10 + 100 msec per
response). Changing the ST time to about 40 msec
would more than double that rate, giving about 20
queries per second. Clearly, if you were to know how
long it takes for your vehicle to reply, you would be
able to improve on the scan rate, by adjusting the ST
time.
It is not easy to tell how fast a vehicle replies to
requests. For one thing, requests all have priorities
assigned, so responses may be fast at some times,
and slower at others. Even when a response begins,
different frames within a multi-frame response can
have very different delays. The physical measurement
of the time is not easy either - it requires expensive
test equipment just to make one measurement. To
help with this, the ELM329 includes a feature called
‘Adaptive Timing’.
Adaptive Timing actually measures the response
times for you, averages several readings, and then
adjusts the AT ST time to a value that should work for
most situations. It is enabled by default, but can be
disabled with the AT0 command should you not agree
with what it is doing (there is also an AT2 setting that
is a little more aggressive, should you wish to
experiment). For 99% of all vehicles, we recommend
that you simply leave the settings at their default
values, and let the ELM329 make the adjustments for
you.
OK - the ELM329 is able to measure times, and
suggest a setting for the AT ST time, but the IC still
has to wait after receiving a reply to see if any more
are coming. Surely there has to be a way to eliminate
that final timeout, if you know how many responses to
expect? There is a way - by telling the ELM329 how
many messages to receive.
If you wish to make a request, and know how
many responses there should be, simply add that
response count as a single digit after your request. For
example, if you know that two ECUs will respond to an
01 00 request, then send:
>01 00 2
The ELM329 will send the 01 00 request, and will
return to the prompt state immediately after the second
response is received (or after the ST timer times out if
the response does not arrive). In this way, every
response is shortened by that ST time. This can
increase the polling rate considerably for most vehicles
(many users report achieving 50 or more samples per
second).
In general, you do not know how many ECUs will
respond to a request, so this feature is best used by
software that can query the vehicle to determine the
number of responses that will be coming, store that
value, and then use it to set the responses digit for
subsequent requests.