Christians Webseite        << zurueck        vor >>

ELM327

Das ELM327 (Wiki-Link) ist ein sehr populäres Spezial-IC für OBD-Interfaces der Firma ELM Electronics. Die erste Version wurde um das Jahr 2005 vorgestellt. Es vereinfachte die Kommunikation erheblich indem es die komplexen Protokolle in simple Befehle abstrahierte. Dadurch hat es sich als Quasi-Standard für praktisch alle aktuell verfügbaren Low-Cost-OBD2-Dongle etabliert.

Das ELM327 ist sehr gut geeignet die aktuellen Zustandsdaten der Motorsteuerung und eventuelle Fehlercodes auszulesen. Das sind die Daten die gesetzlich von jedem Fahrzeug bereitgestellt werden müssen um die Funktion der Abgasreinigung nachzuweisen. Nach meiner Einschätzung funktionieren alle "aktuellen Klone" (v2.3 oder so) für diese simplen "Spielereien" sehr gut und die immer wieder zu lesenden "Warnungen" vor China-Klonen sind nicht wirklich zutreffend.

Der ELM327, bzw. seine Klone, sind NICHT für das Modifizieren oder Beschreiben von Steuergeräten ausgelegt. Für solche Aufgaben wäre z.B. ein SAE J2534-Adapter, mit passender Software, die richtigere Wahl.

ELM327

Die Firma ELM Electronics hat den Geschäftsbetrieb im Jahr 2022 eingestellt.

Den Erzählungen nach wurde bei einer frühen Versionen versäumt die Copy-Protection für die Firmware zu aktivieren. Als Folge gab es kurz darauf jede Menge Klone die alle auf dieser Variante basierten. Etwas später wurden die Klone gepatched um den (PC-)Programmen eine höhere Variantennummer vorzugaukeln, was häufig zu Fehlverhalten führte.

Über die Zeit gab es diverse Varianten (v1.0 .. v2.3) mit jeweils erweitertem und fehlerbereinigtem Funktionsumfang. Auch die Klone entwickelten sich eigenständig weiter und wurden besser.

Mittlerweile gibt es auf dem Markt einen ganzen Zoo von Varianten mit unbekannter Basis. Findige Zeitgenossen haben deshalb diverse "ELM-Identifier" Apps geschrieben. Diese Apps überprüfen welche Befehle der Chip akzeptiert und schätzen daraus ab um welche Variante es sich handeln könnte.

ELM327 v2.3 Datasheet
Liste der AT-Kommandos
Programmierbare Parameter
Schaltplan

Software

Man könnte fast sagen das für einen ELM327 garkeine spezielle Software benötigt wird. Alle Befehle werden als ASCII über einen UART zum IC geschickt, die Daten kommen ebenso zurück. Die korrekten Reihenfolgen und Parameter der Befehlssequenzen zu kennen ist natürlich essentiell. Es braucht sonst aber "nur" eine Shell um alles hübsch darzustellen.

Software zum Experimentieren ist z.B. hier im GitHub zu finden.

Hier eine weitere Quelle (DDT4ALL) im GitHub.

Dazu gibt es jede Menge Apps für Smartphones.

STN1110

Ein sehr ähnlicher Chipsatz ist der STN1110 von "OBD Solutions". Er soll vollständig rückwärtskompatibel zum ELM327 sein, fehlerbereinigt, schneller und in allen Belangen besser. Für neue Designs wird empfohlen seinen Nachfolger STN2100 einzusetzen.

Von SparkFun, z.B., gibt es ein fertiges STN1110-Board mit allen für die OBD2-Analyse notwendigen Schnittstellen. Die zugehörige Dokumentation ist im GitHub abgelegt.
STN1110

Identifikation

Der ELM327 kann über seine serielle Schnittstelle über simple ASCII-Befehle angesprochen werden. Ein einfaches Terminalprogramm ist dafür ausreichend. Durch senden sog. "AT"-Befehle erhält man (z.B.) als Antwort die Versionsnummer der implementierten Software.

Beispiel Parameter "Z" = Reset All and start up by sending Identification String

>AT Z
ELM327 v1.5
Beispiel Parameter "I" = Send Identification String
>AT I
ELM327 v2.1

Dieser Beispiel-Klon meldet sich als v2.1 und auch als v1.5, er scheint sich selbst nicht ganz so sicher zu sein ..

Eine weitere Methode zur Identifikation ist die Prüfung ob der Chip auf die in jeder SW-Variante neu hinzugekommenen Funktionen korrekt antwortet. Die letzte korrekte Antwort zeigt die vorhandene Variante an:
## ELM327 Variants Check
AT AL      ## v1.0
AT PPS     ## v1.1
AT AR      ## v1.2
AT D0      ## v1.3
AT FE      ## v1.3a
AT CEA     ## v1.4
AT CRA     ## v1.4b
AT AMC     ## v2.0
AT CTM1    ## v2.1
AT IB12    ## v2.2
AT C0      ## v2.3
ST DI      ## STN1110 


Wer es noch genauer wissen möchte kann auf die folgende Liste prüfen. Sie enthält alle von ELM ausgegebenen SW-Varianten und die jeweils unterstützten Befehle.
Bei einem Klon hat man damit leider immer noch keine Gewissheit ob der jeweilige Befehl auch korrekt implementiert wurde.
Command/Version1.01.0a1.11.21.2a1.31.31.3a1.41.4b2.02.12.22.3
@1
@2
@3 cccccccccccc
<CR>
AL
AMC
AMT hh
AR
AT0
AT1
AT2
BD
BI
BRD hh
BRT hh
C0
C1
CAF0
CAF1
CEA
CEA hh
CER hh
CF hh hh hh hh
CF hhh
CFC0
CFC1
CM hh hh hh hh
CM hhh
CP hh
CRA
CRA hhh
CRA hhh
CRA hhhhhhhh
CRA hhhhhhhh
CS
CS (with Freq)
CSM0
CSM1
CTM1
CTM5
CV 0000
CV dddd
D
D0
D1
DM1
DP
DPN
E0
E1
FC SD [1-5 bytes]
FC SH hh hh hh hh
FC SH hhh
FC SM 1
FC SM 2
FC SM 3
FC SM 8
FC SM 9
FC SM A
FE
FI
FT
FT hh
H0
H1
I
IA
IB 10
IB 12
IB 15
IB 48
IB 96
IFR H
IFR S
IFR0
IFR1
IFR2
IFR4
IFR5
IFR6
IGN
IIA hh
JE
JHF0
JHF1
JS
JTM1
JTM5
KW
KW0
KW1
L0
L1
LP
M0
M1
MA
MP hhhh
MP hhhh n
MP hhhhhh
MP hhhhhh n
MR hh
MT hh
NL
PB xx yy
PC
PP FF OFF
PP FF ON
PP xx OFF
PP xx ON
PP xx SV yy
PPS
R0
R1
RA hh
RD
RTR
RV
S0
S1
SD hh
SH ww xx yy zz
SH xx yy zz
SH xyz
SI
SP 00
SP Ah
SP h
SR hh
SS
ST hh
SW 00
SW hh
TA hh
TP Ah
TP h
V0
V1
WM [1-6 bytes]
WM xxyyzzaa
WM xxyyzzaabb
WM xxyyzzaabbcc
WS
Z