J2534-Spezifikation und Funktionsbeschreibung ›
ELM327-Spezifikation und Befehlsbeschreibung ›
Die ELM327-Schnittstelle steht beim Nano ET zur Verfügung. Die übrigen ScanDoc-Adapter nutzen das J2534-PassThru-Protokoll.
Änderungen an der J2534 DLL, an ELM327 und an der Firmware der ScanDoc-Adapter, die die Integration betreffen: neue Funktionen, Protokolle und Parameter — mit Anwendungsbeispielen.
J2534-Bibliotheken 2.0.0.200 herunterladen — Windows x86/x64/ARM64 (separate Builds für Windows 7), macOS (universal), Linux (x64, x86, ARM, ARM64), Android (arm64-v8a, armeabi-v7a, x86, x86_64), iOS.
Neu
ISO13400_PS (0x8FFD) und HSFZ_PS (0x8FFC). Sie sind nicht Teil des SAE-J2534-Standards — eine proprietäre ScanDoc-Erweiterung: Diagnose über Ethernet — Fahrzeugerkennung im Netzwerk (VIN, logische Adresse), TCP-Verbindung, Routing Activation, UDS-Austausch. Die Tester-Adresse ist standardmäßig 0 — setzen Sie ISO13400_SOURCE_ADDR vor der Routing Activation, sonst lehnt das Gateway ab; die ECU-Adresse wird in jeder Nachricht übertragen ([TA][SA][UDS]), ISO13400_TARGET_ADDR wird nicht über Set/GetConfig gesetzt. Das Senden wird per P2 serialisiert: jeweils nur eine offene UDS-Anfrage, NRC 7F xx 78 verlängert die Wartezeit auf P2*max (6 s). Neuer Kanalparameter ISO13400_P3_DOIP (0x8108) — Pause zwischen Nachrichten.
uint32_t ch, code = 0;
pt_config_t sa = { ISO13400_SOURCE_ADDR, 0x0E80 };
pt_config_list_t cfg = { 1, &sa };
PassThruConnect(dev, ISO13400_PS, 0, 0, &ch);
PassThruIoctl(ch, SET_CONFIG, &cfg, NULL); /* SA — vor der Routing Activation */
PassThruIoctl(ch, ISO13400_DISCOVER_VEHICLES, NULL, NULL); /* die ECU-IP wird automatisch übernommen */
PassThruIoctl(ch, ISO13400_CONNECT_TCP, NULL, NULL);
PassThruIoctl(ch, ISO13400_ACTIVATE_ROUTING, NULL, &code); /* 0x10 = Erfolg */
/* danach PassThruWriteMsgs / PassThruReadMsgs — normales UDS */
0x55 (J2534-Rahmenmarker) — J2534, alles andere (textuelles AT-Kommando) — ELM327.Behoben
PassThruStartMsgFilter verglich nur die 4 Bytes der CAN-ID und ignorierte die angegebene Filterlänge. Jetzt wird der Rahmen über die volle Länge verglichen, wie es der Standard verlangt: PASS/BLOCK nach Rahmeninhalt funktioniert.
/* TesterPresent-Antworten (07E8 02 7E ...) in der Empfangswarteschlange unterdrücken */
pt_msg_t mask = {0}, pattern = {0};
mask.protocol_id = pattern.protocol_id = CAN;
mask.data_size = pattern.data_size = 6; /* 4 Bytes CAN-ID + 2 Datenbytes */
memcpy(mask.data, "\xFF\xFF\xFF\xFF\xFF\xFF", 6);
memcpy(pattern.data, "\x00\x00\x07\xE8\x02\x7E", 6);
uint32_t fid;
PassThruStartMsgFilter(ch, BLOCK_FILTER, &mask, &pattern, NULL, &fid);
AT SH bei aktivem CAN-Kanal zerstörte die Flow Control (das FC ging ohne Padding raus, DLC=3 — das Gateway sendete keine Consecutive Frames) und überschrieb den Empfangsfilter mit der eigenen TX-ID (der Empfang ohne AT CRA brach ab). Laut Datenblatt setzt AT SH nur den Sende-Header — den Empfangsfilter steuern jetzt ausschließlich AT CRA/CF/CM.PassThruStopPeriodicMsg konnte nach dem Stoppen einen zusätzlichen Rahmen senden._PS — die Pin-Auswahl über SET_CONFIG(J1962_PINS) wurde nicht übernommen, Rahmen erreichten den Bus nicht.Behoben