{{ wiki:aldl01.jpg?300}}
======ALDL-Protokoll======
=====Allgemein=====
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 [[elektrik:Steuergerät]] erfolgt mit 8192 Baud mit TTL-typischer Spannung von 5V. Für die Kommunikation mit einem PC kann ein [[elektrik:eigenbau-interface_spi|Eigenbau-Interface]] genutzt werden. Auch ein [[sonstiges:spezialwerkzeug#Diagnosegerät-SPI|TECH1]] oder [[elektrik:eigenbau-interface_spi#Andere_Selbstbaulösungen|Selbstbaulösungen]] kommunizieren über ALDL mit dem Steuergerät.
=====Kommunikation mit dem Steuergerät=====
====ALDL Modus 01 auswählen====
Um an die Daten des Steuergerätes zu kommen, die sämtliche Sensorwerte, [[elektrik:fehlercode_uebersicht#fehlercodetabelle_singlepoint_euro_2|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
*$F4,$57,$01,$20,$94
zum Steuergerät gesendet wird.
*$F4 = Frame ID
*$57 = Message length ($55+Anzahl Datenbytes)
*$01 = data byte 1 (hier Mode Number)
*$20 = data byte 2 (hier offensichtlich ein Parameter)
*$94 = Prüfsumme (die Berechnung dieser ist in der EFIlive-Hilfe erklärt)
====Antwort vom Steuergerät====
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):
*gesendet:
*$F4,$57,$01,$20,$94
*empfangen:
*$F4,$97,$01,
*$19,$6D,$40,$04,$00,$74,$46,$11,$03,$32,
*$06,$1D,$00,$00,$19,$56,$FB,$78,$23,$7B,
*$06,$06,$50,$00,$F4,$60,$53,$B1,$50,$C7,
*$88,$94,$00,$00,$00,$66,$87,$70,$00,$F3,
*$A7,$00,$00,$85,$00,$00,$CC,$01,$20,$E9,
*$00,$81,$01,$80,$6F,$00,$00,$04,$A4,$09,
*$80,$0A,$44,$13,$00,$CB
====ALDL Modus 04 auswählen====
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:
*gesendet:
*$F4 $60 $04 $00 $00 $40 $00 $00 $00 $00 $00 $00 $00 $68
*empfangen:
*$F4 $56 $04 $B2
In diesem Modus stecken die wichtigen Informationen im Sendewort und das empfangene Wort ist immer gleich und bedeutet nur "OK, Anweisung verstanden".
----
{{ wiki:aldl02.jpg?300}}
=====Der Inhalt der empfangenen Bytes im Modus 01=====
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 [[elektrik: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 |[[elektrik:aldl-protokoll#Byte 32, Zündzeitpunkt|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)
=====Aktuelle Probleme und Unklarheiten=====
====Byte 32, Zündzeitpunkt====
Dieses Byte soll den Wert des [[elektrik:zuendzeitpunkt|Zündzeitpunkt]]es 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 [[http://de.wikipedia.org/wiki/Zweierkomplement|Zweierkomplement]] oder ähnliche Umrechnungen angewandt werden.
====Aktoren====
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.