CAN-Hacking (war: OBD2 - ELM327 - Linux)

Alles, was mit dem Auslesen des CAN-Busses über den ODB2-Port zu tun hat (Scannen, OVMS und DashDAQ)
mikeljo
111 kW - voll elektrisch
Beiträge: 458
Registriert: 23. Sep 2011 18:35
Wohnort: Kaiserslautern
Kontaktdaten:

Re: CAN-Hacking (war: OBD2 - ELM327 - Linux)

Beitrag von mikeljo »

wecken des Buses funktioniert bisher nur teilweise.

Wagen ist aus, auf dem Bus keine Daten:
Senden von: $101 $08 $FD $02 $10 $04 .....
bringt nur als Antwort: 641 ........
direkt Senden der Anforderungs Codes:
send: 7E4 8 06 2C FE 43 69 43 68 00
send: 7E4 8 03 AA 04 FE 00 00 00 00
bringt keine Antwort des Buses.

Es ist also zuerst mal nur ein Gateway (ID $641) wach geworden. Jetzt gilt es herauszufinden wie man dieses GW dazu bringt weitere Daten herauszurücken.

Bye
mikeljo
Tachy
500 kW - overdrive
Beiträge: 1396
Registriert: 7. Aug 2011 13:16
Wohnort: Sulzburg-Laufen, Markgräflerland
Kontaktdaten:

Re: CAN-Hacking (war: OBD2 - ELM327 - Linux)

Beitrag von Tachy »

Naja, immerhin! :)

ich hätte gedacht, da kommt garnix....
Kratus
500 kW - overdrive
Beiträge: 1352
Registriert: 26. Dez 2011 12:49
Wohnort: 30 km nördlich von Straßburg, Frankreich
Kontaktdaten:

Re: CAN-Hacking (war: OBD2 - ELM327 - Linux)

Beitrag von Kratus »

Wie ist es wenn man das DashDAQ benutzt mit ausgeschaltete Zündung?
Kratus.

Grüße aus dem Elsaß (Frankreich)
Ampera Modell 2013A.
Tachy
500 kW - overdrive
Beiträge: 1396
Registriert: 7. Aug 2011 13:16
Wohnort: Sulzburg-Laufen, Markgräflerland
Kontaktdaten:

Re: CAN-Hacking (war: OBD2 - ELM327 - Linux)

Beitrag von Tachy »

Der DashDAQ sendet bei totem Bus nur diesen Kram hier:

Code: Alles auswählen

7DF      8 02 01 00 00 00 00 00 00 
pro Sekunde einmal und wartet, bis was zurückkommt. Aber aufwecken tut das so natürlich nicht und etwas zurückkommen schon gar nicht ;)

folgende 101er kommen beim DashDAQ alle 3 Sekunden, aber höchstwahrscheinlich nur dann, wenn der Bus lebt...

Code: Alles auswählen

101      8 FE 01 3E 00 00 00 00 00 
Ich kontrolliere das aber nochmals.
gecko
111 kW - voll elektrisch
Beiträge: 125
Registriert: 13. Sep 2012 19:47
Wohnort: Köppling, Stmk, AT
Kontaktdaten:

Re: CAN-Hacking (war: OBD2 - ELM327 - Linux)

Beitrag von gecko »

Code: Alles auswählen

101      8 FE 01 3E 00 00 00 00 00
0x3E ist die Tester Present Message. Die muß alle paar Sekunden gesendet werden. Macht auch der Elm so....automatisch.

edit:

Code: Alles auswählen

7DF      8 02 01 00 00 00 00 00 00
Das ist auch normal. 7Df ist an alle Steuergeräte. 01 00 ist Abfrage "Supported PID's". Das kann man so machen. Es müssten sich dann alle verfügbaren Steuergeräte, die den EOBD Standard unterstützen, mit den PID's melden.
LG
Ampera Cosmo, POWERBLAU, seit 25.09.2012 VIN xxxCU109394
gecko
111 kW - voll elektrisch
Beiträge: 125
Registriert: 13. Sep 2012 19:47
Wohnort: Köppling, Stmk, AT
Kontaktdaten:

Re: CAN-Hacking (war: OBD2 - ELM327 - Linux)

Beitrag von gecko »

Hallo mikeljo,
wecken des Buses funktioniert bisher nur teilweise.

Wagen ist aus, auf dem Bus keine Daten:
Senden von: $101 $08 $FD $02 $10 $04 .....
bringt nur als Antwort: 641 ........
direkt Senden der Anforderungs Codes:
send: 7E4 8 06 2C FE 43 69 43 68 00
send: 7E4 8 03 AA 04 FE 00 00 00 00
bringt keine Antwort des Buses.
Ich bin da jetzt auf nochwas gestossen. Vielleicht hift uns das. Habe aber vor lauter Internet Surfen keine Zeit zum Testen :-). Auf dem Github gibt es eine libvyoager (GM Voyager glaub ich) https://github.com/gtosoft/libvoyager. Dort sind viele GM Sachen für den Single Wire CAN umgesetzt. Wenn man sich die source näher anschaut, dann findet man in der CommandSession.java das hier:

Code: Alles auswählen

	private boolean sendWakeupAllNodes() {
		String response;
		
		if (DEBUG) msg ("Setting headers and transmiting 11-bit wake-up message...");
		// set the header to "100"
		if (!ebt.sendATInitialization(new String[] {"AT SH 100"})) return false;
		// Transmit a CAN message consisting of a single null character (we have to send at least one byte. If we could send zero bytes we would do that, since just the header "100" is needed).
		response = ebt.sendOBDCommand("00");
		response = ebt.sendOBDCommand("00");
		if (!ebt.sendATInitialization(new String[] {"AT SH 621"})) return false;
		// Work your way up - 01 02, 01 7f, etc. That ramps it up I guess. 
		response = ebt.sendOBDCommand("01 02"); // Keyfob sets this network level upon press 
		response = ebt.sendOBDCommand("01 7F"); // lites up everything as far as I can tell.  
		if (!ebt.sendATInitialization(new String[] {"AT SH 638"})) return false;
		// Work your way up - 01 02, 01 7f, etc. That ramps it up I guess. 
		response = ebt.sendOBDCommand("01 02"); // Keyfob sets this network level upon press 
		response = ebt.sendOBDCommand("00 19"); // OnStar is alive when network is in this mode. 
		response = ebt.sendOBDCommand("01 7F"); // lites up everything as far as I can tell.  
//		response = ebt.sendOBDCommand("00 19"); // OnStar is alive when network is in this mode. 
//		response = ebt.sendOBDCommand("00 19"); // OnStar is alive when network is in this mode. 
//		response = ebt.sendOBDCommand("00 19"); // OnStar is alive when network is in this mode. 
//		response = ebt.sendOBDCommand("00 19"); // OnStar is alive when network is in this mode. 
		if (DEBUG) msg ("wake-up message has been sent.");
		
		return true;
	}
Lustig ist hierbei, dass der SW CAN offensichtlich 29bit CAN ist. Die scheinen aber beim GM Voyager folgende Sequenz zum Aufwachen zu benutzen, die jetzt 11bit CAN ist:

100 8 01 00 …..
100 8 01 00 …..
221 8 02 01 02 ….
221 8 02 01 7F …
238 8 02 01 02 …
238 8 02 00 19 …
238 8 02 01 7F …

Keine Ahnung welche Steuergeräte sich hinter CanID 221 und CanID 238 verbergen. Vielleicht Kombi & OnStar System?
Vielleicht kommen wir hier weiter? Wie gesagt, keine Zeit zum testen...nächste Woche sieht auch eng aus.

LG01 7F
Ampera Cosmo, POWERBLAU, seit 25.09.2012 VIN xxxCU109394
mikeljo
111 kW - voll elektrisch
Beiträge: 458
Registriert: 23. Sep 2011 18:35
Wohnort: Kaiserslautern
Kontaktdaten:

Re: CAN-Hacking (war: OBD2 - ELM327 - Linux)

Beitrag von mikeljo »

gecko hat geschrieben:Hallo mikeljo,
wecken des Buses funktioniert bisher nur teilweise.

Wagen ist aus, auf dem Bus keine Daten:
Senden von: $101 $08 $FD $02 $10 $04 .....
bringt nur als Antwort: 641 ........
direkt Senden der Anforderungs Codes:
send: 7E4 8 06 2C FE 43 69 43 68 00
send: 7E4 8 03 AA 04 FE 00 00 00 00
bringt keine Antwort des Buses.
Ich bin da jetzt auf nochwas gestossen. Vielleicht hift uns das. Habe aber vor lauter Internet Surfen keine Zeit zum Testen :-). Auf dem Github gibt es eine libvyoager (GM Voyager glaub ich) https://github.com/gtosoft/libvoyager. Dort sind viele GM Sachen für den Single Wire CAN umgesetzt. Wenn man sich die source näher anschaut, dann findet man in der CommandSession.java das hier:

Code: Alles auswählen

	private boolean sendWakeupAllNodes() {
		String response;
		
		if (DEBUG) msg ("Setting headers and transmiting 11-bit wake-up message...");
		// set the header to "100"
		if (!ebt.sendATInitialization(new String[] {"AT SH 100"})) return false;
		// Transmit a CAN message consisting of a single null character (we have to send at least one byte. If we could send zero bytes we would do that, since just the header "100" is needed).
		response = ebt.sendOBDCommand("00");
		response = ebt.sendOBDCommand("00");
		if (!ebt.sendATInitialization(new String[] {"AT SH 621"})) return false;
		// Work your way up - 01 02, 01 7f, etc. That ramps it up I guess. 
		response = ebt.sendOBDCommand("01 02"); // Keyfob sets this network level upon press 
		response = ebt.sendOBDCommand("01 7F"); // lites up everything as far as I can tell.  
		if (!ebt.sendATInitialization(new String[] {"AT SH 638"})) return false;
		// Work your way up - 01 02, 01 7f, etc. That ramps it up I guess. 
		response = ebt.sendOBDCommand("01 02"); // Keyfob sets this network level upon press 
		response = ebt.sendOBDCommand("00 19"); // OnStar is alive when network is in this mode. 
		response = ebt.sendOBDCommand("01 7F"); // lites up everything as far as I can tell.  
//		response = ebt.sendOBDCommand("00 19"); // OnStar is alive when network is in this mode. 
//		response = ebt.sendOBDCommand("00 19"); // OnStar is alive when network is in this mode. 
//		response = ebt.sendOBDCommand("00 19"); // OnStar is alive when network is in this mode. 
//		response = ebt.sendOBDCommand("00 19"); // OnStar is alive when network is in this mode. 
		if (DEBUG) msg ("wake-up message has been sent.");
		
		return true;
	}
Lustig ist hierbei, dass der SW CAN offensichtlich 29bit CAN ist. Die scheinen aber beim GM Voyager folgende Sequenz zum Aufwachen zu benutzen, die jetzt 11bit CAN ist:

100 8 01 00 …..
100 8 01 00 …..
221 8 02 01 02 ….
221 8 02 01 7F …
238 8 02 01 02 …
238 8 02 00 19 …
238 8 02 01 7F …

Keine Ahnung welche Steuergeräte sich hinter CanID 221 und CanID 238 verbergen. Vielleicht Kombi & OnStar System?
Vielleicht kommen wir hier weiter? Wie gesagt, keine Zeit zum testen...nächste Woche sieht auch eng aus.

LG01 7F
hm....
wenn ich das jetzt richtig verstehe, senden die dort auf ID 621 und 638.
Sowie ich das ganze jetzt aber verstanden habe sind das aber die Antwort Adressen.
Die Anfragen sollten doch eigentlich an 221 und 238 gehen.
Ich hab nirgends in dem Sourcecode gefunden wo von 621 auf 221 umgerechnet wird.
Oder macht das der ELM?
Sendet auf 221 und setzt dann den Filter auf 621?

Bei 100 wird ja auch direkt gesendet. Sind die selben Sequenzen.
Kann der ELM das unterscheiden?

Bye
mikeljo
gecko
111 kW - voll elektrisch
Beiträge: 125
Registriert: 13. Sep 2012 19:47
Wohnort: Köppling, Stmk, AT
Kontaktdaten:

Re: CAN-Hacking (war: OBD2 - ELM327 - Linux)

Beitrag von gecko »

Hallo mikeljo,

das war ein kleiner Test ob jemand mitdenkt :-)
Ja du hast recht, habe mich vertipped weil ich schon wieder an die GMW3110 gedacht habe.
Richtig ist 621 und 638.

Die ganze Sequenz in der libvyoager sieht ja so aus:

Code: Alles auswählen

		switchTo11BitTransmitMode();
		sendWakeupAllNodes();
		switchTo29BitTransmitMode();
		send29BitWakeup(); 
Für den 11bit CAN wird an den Elm also folgende initialisierung gesendet:

"AT PP 2C SV C0" --> Protocol B 11bit CAN mode

"ATWS", // reset chip so changes take effect
"ATCAF1", // CAN auto-formatting on
"ATSPB", // set protocol to B (user defined 1)
"ATH1", // show headers
"ATR0" // responses off - we don't expect responses to what we're sending.

Und dann gehts weiter mit AT SH xyz. Der Elm sendet also wirklich an xyz und hört auf alles.
Aber ATR0 bedeutet, dass der ELM nicht auf eine Antwort wartet sondern gleich das nächste Kommando absendet.

LG
Ampera Cosmo, POWERBLAU, seit 25.09.2012 VIN xxxCU109394
micky4
500 kW - overdrive
Beiträge: 2081
Registriert: 5. Apr 2012 08:39
Wohnort: Wien, Österreich
Kontaktdaten:

Re: AW: CAN-Hacking (war: OBD2 - ELM327 - Linux)

Beitrag von micky4 »

Habt ihr eigentlich den CANUSB Stecker am OVMS-Diagnosestecker angehängt, bzw. war das die ursprünglich Idee für diesen "Diagnose" Ausgang am OVMS ?
(Der wird im user manual nicht einmal erwähnt; OVMS Version 2)
Liebe Grüße, Michael CU#13068, lithiumweiss, ePionier
myampera.wordpress.com
mikeljo
111 kW - voll elektrisch
Beiträge: 458
Registriert: 23. Sep 2011 18:35
Wohnort: Kaiserslautern
Kontaktdaten:

Re: AW: CAN-Hacking (war: OBD2 - ELM327 - Linux)

Beitrag von mikeljo »

micky4 hat geschrieben:Habt ihr eigentlich den CANUSB Stecker am OVMS-Diagnosestecker angehängt, bzw. war das die ursprünglich Idee für diesen "Diagnose" Ausgang am OVMS ?
(Der wird im user manual nicht einmal erwähnt; OVMS Version 2)
Hi,

das ist KEINE OBD Weiterleitung.
Dort liegen die Serielle Signale an die zum GSM Modul gehen an.

Bye
mikeljo
Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 14 Gäste