Subaru Diagnose Protokoll

Subaru Diagnose Protokoll

 

Die folgende Beschreibung soll einen Überblich über das eigentlich Protokoll geben und Möglichkeiten wie man Daten aus dem Steuergerät auslesen und decodieren kann. Es sollte sich auch jeder im Klaren darüber sein das man mit der Bastelei auch was kaputt machen kann (gerade die „write“ Anweisungen). Wer also sein Steuergerät im Bus dazu nutzt sollte wissen was er tut und mit Bedacht vorgehen.  Ich habe für all die Versuche ein def. Steuergerät benutzt wo die Kommunikation noch ok war. Das war perfekt zum spielen geeignet. (danke nochmal an den Spender).

 

 

 

Der binary Mode:

Grundsätzlich kann die ECU die Daten auf zwei Arten ausgeben. Der Binary Mode überträgt die Daten  als Pakete die das Hexadezimale Zahlensystem verwenden. Der ASCII Mode verwendet so wie der Name schon sagt ASCII Zeichen um die Daten auszugeben. Für uns interessant ist der Binary Mode. Wer jetzt nicht weiß was ASCII und  Hexadezimal ist sollte dafür auf jeden Fall das Internett bemühen, die hexadezimale Zahlendarstellung brauchen wir noch.

Im Gegensatz zu anderen Diagnosesystemen wie zB. dem Protokoll von VW ist das Subaru Protokoll sehr einfach aufgebaut. Bei VW benutzt man nur eine Leitung auf der kommuniziert wird (senden und empfang), das ist bei den älteren Autos die sogenannte K Line. Subaru hat das anders gelöst. Dort gibt es drei Leitungen die wir benötigen, TX (senden) auf Pin 2  , RX (empfang) auf Pin 3 und Masse auf Pin 9 am gelben Select Monitor Stecker.  Jetzt brauchen wir noch einen PC mit serieller Schnittstelle und einen RS 232 zu TTL Konverter,  welcher das  Diagnoseinterface ist was zB. für die Select Monitor Software benutzt wird. Die ECU benutzt das folgende Kommunikationsprotokoll :

1953 baud , 8 data bits , 1 stop bit , even parity und no flow control    (1953-8E1)

Damit die ECU weiß was wir von ihr wollen gibt es Kommandos die gesendet werden und das Steuergerät antwortet dann darauf. Zur Kommunikation müssen die Daten im hexadezimalen Datenformat gesendet werden und die ECU antwortet auch in HEX.

 

 

Sendekommandos:

Byte 1

Byte 2

Byte 3

Byte 4

Function

12

00

00

00

Stop

78

msb

lsb

00

Lese Daten von  ECU Addresse

AA

msb

lsb

data

Schreibe Daten auf Address

00

0F


0H


0I


Get ROM ID

 

Wie man sieht besteht ein Komando immer aus 4 Byte die an das Steuergerät gesendet werden. Will ich einen Wert aus der ECU wissen zB. Die Batteriespannung wird das Kommando dafür mit 78 beginnen. Zum schreiben in die ECU mit AA. So weit so gut, ich möchte nun aber meine Batteriespannung wissen und dafür fehlt noch etwas. Alle Daten die für uns wichtig sind, werden in Adressen gespeichert, das sind Byte 2 und 3 im Sendekommando.  Ein Beispiel:

Die Batteriespannung ist auf der Adresse 1335 abgelegt. Ich sende deshalb folgendes Kommando in HEX an das Steuergerät:    78133500. Das 4 Byte enthält eigentlich nichts, muss aber mit gesendet werden weil beim Schreibkommando dort der Wert enthalten ist.

 

Datenempfang:

So wir haben der ECU mitgeteilt das wir was von ihr wollen und zwar den Wert für die Batteriespannung, die sich auf der Adresse 1335 befindet. Das Steuergerät antwortet darauf mit einem Datenwort das aus 3 Byte besteht: Das macht die ECU solange bis ich ein anderen Wert wissen möchte oder den Stopp Befehl  12000000 sende. Die Antwort in einem Terminal Programm würde dann so aussehen:

781335AA 781335AA 781335AB 78133500 781335AA  usw  Zwischen den einzelnen Datenblöcken sind keine Steuerzeichen die Antworten werden einfach hintereinander ausgegeben

 

Byte 1

Byte 2

Byte 3

msb

lsb

Daten

13

35

AA

 

 

 

Das für uns Wichtige ist das Byte 3. Dort ist der Wert enthalten der unserer Batteriespannung entspricht. Mit dem Wert AA können wir aber noch keine Spannung erkennen, wir müssen es also umrechnen. Wir brauchen also einen Umrechnungsfaktor aus dem dann das passende Ergebnis wird und müssen unser Byte 3 von HEX in dezimal umrechnen und mit dem Faktor verrechnen:

(HEX) AA   umgerechnet ergibt  170 dezimal  der Faktor für die Batteriespannung ist * 0,08 ergibt 170*0,08 = 13,6 Volt

Daraus ergibt sich das jeder Parameter und Wert eine spezielle Adresse und Umrechnungsfaktor hat

 

Adress und Parameterliste (Beispiel)

 

Funktion
Code

Funktion lang

Funktion kurz

value

Adressen

Rom ID   7032

Formel

Adressen  

Rom ID 7232,7332,7432

Formel

 

 

 

 

 

 

 


F01

Batteriespannung

VB

Volt

4780

x*0,08

1335

x*0,08

F03

Vehicle-Speed kmh

VSP

kmh

4781

x*2

1336

x*2

F04

Engine-Speed  prm

EREV

rpm (1/min)

43BC

x*25

1338

x*25

F06

Water-Temp  Celsius

TW

°C

4782

x-50

1337

x-50

F07

Vor-Zündung

ADVS

deg (Grad)

43C8

x

1323

x

F08

Luftmengensignal

QA

V

43AD

x*5/256

1307

x*5/256

F09

Lastzustand

LOAD (LDATA)

%

43AA

x

1305

x

F10

Drosselklappen Stellung

THV

Volt

4784

x*5/256

1329

x*5/256

F11

Einspritzimpuls Dauer

TIM

mS

43AB

x*256/1000

1306

x*256/1000

F12

Bypass-Luft-Steuerung

ISC (IAC)

%

43E3

x*100/256

1314

x*100/256

F13

Lambda-Ausgangssignal

O2

Volt

43CF

x*5/512

1310

x*5/256

F14

Lambda-max

O2-max

Volt

4785

x*5/512

133A

x*5/256

F15

Lambda-min

O2-min

Volt

4786

x*5/512

133B

x*5/256

F19

Korrekturkoeeffizient Benzin/Luft

ALPHA

%

43CE

x-128

133E

x-128

F20

Benzin/Luft Korrektur

RTDR

deg (Grad)

440D

x-128

1328

x-128

 

 

 

 

 

 

 

 

FA0

Binary # 1 Upper      

IG, AT, UD, RM,  --

 

4789

x (binär)

1343

x (binär)

 

 --,  NT,   --,   --,   --

 

 

 

 

 

FA1

Binary # 2 Upper

 --, AC,  AR,  R1, R2

 

478A

x(binär)

1344

x(binär)

 

 FP, CP, KS,  --,  --

 

 

 

 

 



Funktion
Code

Funktion lang

Funktion kurz

value


Adressen  

Rom ID 7632

Formel

 

 

 

 



 


F01

Batteriespannung

VB

Volt



0E35

x*0,08

F03

Vehicle-Speed kmh

VSP

kmh



0E36

x*2

F04

Engine-Speed  prm

EREV

rpm (1/min)



0E38

x*25

F06

Water-Temp  Celsius

TW

°C



0E37

x-50

F07

Vor-Zündung

ADVS

deg (Grad)



0E23

x

F08

Luftmengensignal

QA

V



0E07

x*5/256

F09

Lastzustand

LOAD (LDATA)

%



0E05

x

F10

Drosselklappen Stellung

THV

Volt



0E29

x*5/256

F11

Einspritzimpuls Dauer

TIM

mS



0E06

x*256/1000

F12

Bypass-Luft-Steuerung

ISC (IAC)

%



0E14

x*100/256

F13

Lambda-Ausgangssignal

O2

Volt



0E10

x*5/256

F14

Lambda-max

O2-max

Volt



0E3A

x*5/256

F15

Lambda-min

O2-min

Volt



0E3B

x*5/256

F19

Korrekturkoeeffizient Benzin/Luft

ALPHA

%



0E3E

x-128

F20

Benzin/Luft Korrektur

RTDR

deg (Grad)



0E28

x-128

 

 

 

 



 

 

FA0

Binary # 1 Upper      

IG, AT, UD, RM,  --

 



0E43

x (binär)

 

 --,  NT,   --,   --,   --

 



 

 

FA1

Binary # 2 Upper

 --, AC,  AR,  R1, R2

 



0E44

x(binär)

 

 FP, CP, KS,  --,  --

 



 

 

Die Sache mit der ROM ID :

Leider hat Subaru nicht für jedes Steuergerät die gleiche Zuordnung der Adressen verwendet. Bei dem originalen Subaru Tester hat man das mit Steckarten gelöst auf denen die Zuordnung der Adressen nach Modell und Motor gemacht wird.  Wir brauchen die Rom ID um festzustellen auf welchen Adressen die benötigten Daten liegen.  Aus der oberen Liste kann man einfach die Adressen und Umrechnungsfaktoren entnehmen. Sie gelten jeweils für die Subaru Motoren EJ 22 vom Baujahr 91 bis 94.Die Umrechnungsfaktoren und Adressen sind mit einem originalen Subaru Tester aufgenommen und verglichen worden. Sie sollten für diese Steuergeräte stimmen.

 
Comments