Seite 12 von 13

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

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

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

Verfasst: 2. Jan 2013 19:01
von Tachy
Naja, immerhin! :)

ich hätte gedacht, da kommt garnix....

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

Verfasst: 2. Jan 2013 19:05
von Kratus
Wie ist es wenn man das DashDAQ benutzt mit ausgeschaltete Zündung?

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

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

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

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

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

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

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

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

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

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

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

Verfasst: 7. Jan 2013 21:20
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)

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

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