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 » 2. Jan 2013 17:07

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 » 2. Jan 2013 19:01

Naja, immerhin! :)

ich hätte gedacht, da kommt garnix....
Gruß, Johannes
Opel Ampera Forum - Admin
Ampera ePionier Edition, lithium-weiß, #6681, seit 29.12.2011
PV 6,88 kWp - eigene Solar-Überschussladesteuerung!
www.gutshof-guentert.de
Einmal elektrisch, immer elektrisch!

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 » 2. Jan 2013 19:05

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 » 2. Jan 2013 22:01

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.
Gruß, Johannes
Opel Ampera Forum - Admin
Ampera ePionier Edition, lithium-weiß, #6681, seit 29.12.2011
PV 6,88 kWp - eigene Solar-Überschussladesteuerung!
www.gutshof-guentert.de
Einmal elektrisch, immer elektrisch!

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 » 3. Jan 2013 07:08

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 » 6. Jan 2013 20:44

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 » 7. Jan 2013 00:08

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 » 7. Jan 2013 06:48

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: 2070
Registriert: 5. Apr 2012 08:39
Wohnort: Wien, Österreich
Kontaktdaten:

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

Beitrag von micky4 » 7. Jan 2013 21:20

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 » 7. Jan 2013 22:56

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 3 Gäste