ALDL - Assembly Line Data Link
Das ALDL-Protokoll, welches Lada bei den SPI-Modellen verwendet, orientiert sich an den gängigen GM-Formaten. Leider gibt es kein anderes Fahrzeug, welches exakt den Lada-Code verwendet.
Die Kommunikation mit dem Steuergerät erfolgt mit 8192 Baud mit TTL-typischer Spannung von 5V. Für die Kommunikation mit einem PC kann ein Eigenbau-Interface genutzt werden. Auch ein TECH1 oder Selbstbaulösungen kommunizieren über ALDL mit dem Steuergerät.
Um an die Daten des Steuergerätes zu kommen, die sämtliche Sensorwerte, gespeicherte Fehler und sonstige Fahrzeugdaten enthalten, ist es notwendig das Steuergerät in einem bestimmten Modus anzusprechen
.
Der ALDL-Modus 1 (0x01) ist hierbei der Wichtigste. Angestoßen wird dieser, indem
zum Steuergerät gesendet wird.
Auf diesen Initialisierungsstring antwortet das Steuergerät einige Millisekunden später mit einem Datenwort aus 69 Bytes. Hier eine Beispiel-Kommunikation (Zeilenumbrüche eingefügt):
Modus 4 ist der „Controller-Mode“. Er dient dazu, dem Steuergerät klare Anweisungen zu geben wie z.B. Aktoren ansteuern/einstellen oder gespeicherte Fehler zu löschen.
Die Anforderung zum Löschen des Fehlerspeichers sieht beispielsweise so aus:
In diesem Modus stecken die wichtigen Informationen im Sendewort und das empfangene Wort ist immer gleich und bedeutet nur „OK, Anweisung verstanden“.
Um die empfangenen Daten deuten zu können, muss man sich mit dem GM-typischen Protokollaufbau anderer GM-Steuerteile befassen. Eine Liste verschiedener Steuerteile und deren Codes findet sich hier: http://www.diy-efi.org/files/gmecm/ALDLstuff.zip
David Rolston (http://ladaniva.co.uk) hat ein Configfile (http://www.ladaniva.co.uk/nivalive.zip) für EFILive V4 geschrieben, welches einen Großteil der Bytes deuten kann. Dieses Configfile ist aktuell wahrscheinlich die vollständigste Zusammenfassung des Lada-ALDL-Protokolles, die verfügbar ist. Es stammt ursprünglich vermutlich von einem anderen Fahrzeug und enthält deshalb falsche Fragmente, die nicht zum Lada passen.
Die empfangenen Bytes sind hier hexadezimal dargestellt. Die meisten Werte müssen zur Weiterverarbeitung in Dezimalzahlen (z.B. Sensorwerte) oder Binärdaten (z.B. Fehlercodes) umgerechnet werden.
Byte | Bedeutung | Faktor | Offset | Beispiel | Ergebnis |
Initialisierung (Frame-ID) | $F4 | ||||
Initialisierung (Länge des Strings) | $97 | ||||
ALDL-Modus | $01 | ||||
1(16bit) | Eprom-ID ($19$6D=Lada 21073, $19$63=Lada 21214) | $19$6D | Lada 21073 | ||
3 | Fehlercodes 1 (Bit0=Fehler Nr.24, Bit1=23, Bit2=22, Bit3=21, Bit4=15, Bit5=14, Bit6=13,Bit7=12) | $40 | |||
4 | Fehlercodes 2 (Bit0=Fehler Nr.42, Bit1=41, Bit2=35, Bit3=34, Bit4=33, Bit5=32, Bit6=31,Bit7=25) | $04 | |||
5 | Fehlercodes 3 (Bit0=Fehler Nr.55, Bit1=54, Bit2=53, Bit3=26, Bit4=51, Bit5=45, Bit6=44,Bit7=43) | $00 | |||
6 | Kühlmitteltemperatur | 0,75 | -40 | $74 | 47°C |
7 | Startup Coolant Temp (?) | 0,75 | -40 | $46 | 12,5°C |
8 | Spannung Drosselklappensensor | 0,019608 | 0 | $11 | 0,33V |
9 | Drosselklappenöffnung in % | 0,392157 | 0 | $03 | 1,18% |
10 | Motordrehzahl | 25 | 0 | $32 | 1250 RPM |
11 | Refpulse MSB (?) | $06 | |||
12 | Refpulse LSB (?) | $1D | |||
13 | Geschwindigkeit | 1 (1,60934 für km/h) | $00 | 0MPH | |
14 | ungenutzt | $00 | |||
15 | Spannung Lambdasonde | 4,44 | 0 | $19 | 111mV |
16 | O2-Sensor Cross Counts (?) | $56 | |||
17 | $FB | ||||
18 | $78 | ||||
19 | $23 | ||||
20 | $7B | ||||
21 | IST-Position Leerlaufregler | 1 | 0 | $06 | 6 (0 geschlossen, 255 offen) |
22 | SOLL-Position Leerlaufregler | 1 | 0 | $06 | 6 (0 geschlossen, 255 offen) |
23 | Solldrehzahl Leerlauf | 12,5 | 0 | $50 | 1000RPM |
24 | wahrscheinlich Ventil Aktivkohlefilter in % | 0,392157 | 0 | $00 | geschlossen |
25 | $F4 | ||||
26 | MAP (Unterdruck am Ansaug) | 0,37 | 10,34 | $60 | 46kPa |
27 | $53 | ||||
28 | $B1 | ||||
29 | Ansauglufttemperatur | 0,75 | -40 | $50 | 40°C |
30 | $C7 | ||||
31 | Batteriespannung | 0,1 | 0 | $88 | 13,6V |
32 | Zündwinkelvorverstellung | 0,351565 | 0 | $94 | 52° (?) |
33 | Zündwinkelvorverstellung (? | $00 | |||
34 | Zündwinkelvorverstellung (?) | $00 | |||
35(16bit) | Einspritzdauer | 0,07629 | 0 | $00$66 | 7,78ms |
37 | SOLL-Verhältnis Luft/Kraftstoff | 0,1 | 0 | $87 | 13,5 |
38 | $70 | ||||
39 | Motor Laufzeit (wird um 1 erhöht, wenn Bit40 bei 255 angekommen ist) | 0 | 255 | $00 | 0 |
40 | Motor Laufzeit in Sekunden | 0 | 1 | $F3 | 243Sekunden |
41 | $A7 | ||||
42 | $00 | ||||
43 | ungenutzt | $00 | |||
44 | $85 | ||||
45 | $00 | ||||
46 | $00 | ||||
47 | $CC | ||||
48 | $01 | ||||
49 | $20 | ||||
50 | Modeword1 (Bit1=Fahrzeug bewegt sich, Bit7=Motor läuft) | $E9 | Bit1=0 steht; Bit7=1 Motor läuft | ||
51 | $00 | ||||
52 | CLCCMW (Bit3=Schubabschaltung aktiv, Bit7=Drosselklappe geschlossen) | $81 | Bit3=0 Schubabschaltung nicht aktiv, Bit7=1 Drosselklappe geschlossen | ||
53 | $01 | ||||
54 | $80 | ||||
55 | $6F | ||||
56 | $00 | ||||
57 | LCCPMW (Bit0 Motorlüfter aktiv) | $00 | Bit0=0 Motorlüfter nicht aktiv | ||
58 | $04 | ||||
59 | $A4 | ||||
60 | $09 | ||||
61 | $80 | ||||
62 | $0A | ||||
63 | $44 | ||||
64 | $13 | ||||
65 | $00 | ||||
66 | Prüfsumme | $CB |
(Tabelle wird ergänzt, die mit Fragezeichen versehenen Felder sollten besser beschrieben werden bzw. müssen noch verstanden werden)
Dieses Byte soll den Wert des Zündzeitpunktes im Bezug auf den OT angeben. Er sollte Werte von 0 bis 40 ($00 bis $72) haben und gibt an, wieviel Grad vor OT gezündet wird. Wir gehen für die Berechnung von einem Faktor von 0,351565 aus. In unteren Drehzahlbereichen werden aber größere Winkel (teilweise >40°) angezeigt, die weder stimmen können noch mit Werten übereinstimmen, die ein TECH1 zu diesem Zeitpunkt liefert. Bei höheren Drehzahlen befinden sich die übermittelten Werte in denkbaren Größenordnungen. Möglicherweise muss auf den Hexadezimalwert zunächst das Zweierkomplement oder ähnliche Umrechnungen angewandt werden.
Die Zustände aller Aktoren außer des Leerlaufreglers, des Lüfters und vermutlich des Ventils des Aktivkohlefilters (Lambdasondenheizung, Saugrohrheizung, Benzinpumpe) sind bisher nicht erkennbar. Vermutet wird eine binäre Übertragung in einem Modeword. Das aktive Ansprechen (aus-/einschalten oder einstellen) aller Aktoren (vermutlich im Modus 4) ist ebenfalls noch nicht gelungen.