Specyfikacja i opis funkcji J2534 ›
Specyfikacja i opis komend ELM327 ›
Interfejs ELM327 jest dostępny w adapterze Nano ET. Pozostałe adaptery ScanDoc używają protokołu J2534 PassThru.
Zmiany w J2534 DLL, ELM327 i firmware adapterów ScanDoc dotyczące integracji: nowe funkcje, protokoły i parametry — z przykładami użycia.
Pobierz biblioteki J2534 2.0.0.200 — Windows x86/x64/ARM64 (osobne buildy dla Windows 7), macOS (universal), Linux (x64, x86, ARM, ARM64), Android (arm64-v8a, armeabi-v7a, x86, x86_64), iOS.
Nowości
ISO13400_PS (0x8FFD) i HSFZ_PS (0x8FFC). Nie wchodzą w skład standardu SAE J2534 — to własne rozszerzenie ScanDoc: diagnostyka przez Ethernet — wykrywanie pojazdów w sieci (VIN, adres logiczny), połączenie TCP, routing activation, wymiana UDS. Adres testera domyślnie wynosi 0 — ustaw ISO13400_SOURCE_ADDR przed routing activation, inaczej brama odmówi; adres ECU jest przekazywany w każdej wiadomości ([TA][SA][UDS]), ISO13400_TARGET_ADDR nie jest ustawiany przez Set/GetConfig. Wysyłanie jest serializowane wg P2: jedno otwarte żądanie UDS naraz, NRC 7F xx 78 wydłuża oczekiwanie do P2*max (6 s). Nowy parametr kanału ISO13400_P3_DOIP (0x8108) — pauza między wiadomościami.
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 — przed routing activation */
PassThruIoctl(ch, ISO13400_DISCOVER_VEHICLES, NULL, NULL); /* IP ECU zapamiętywane automatycznie */
PassThruIoctl(ch, ISO13400_CONNECT_TCP, NULL, NULL);
PassThruIoctl(ch, ISO13400_ACTIVATE_ROUTING, NULL, &code); /* 0x10 = sukces */
/* dalej PassThruWriteMsgs / PassThruReadMsgs — zwykłe UDS */
0x55 (znacznik ramki J2534) — J2534, każdy inny (tekstowa komenda AT) — ELM327.Poprawki
PassThruStartMsgFilter porównywał tylko 4 bajty CAN ID, ignorując zadaną długość filtra. Teraz ramka jest porównywana na całej długości, jak wymaga standard: PASS/BLOCK po zawartości ramki działają.
/* Wytłumienie odpowiedzi TesterPresent (07E8 02 7E ...) w kolejce odbiorczej */
pt_msg_t mask = {0}, pattern = {0};
mask.protocol_id = pattern.protocol_id = CAN;
mask.data_size = pattern.data_size = 6; /* 4 bajty CAN ID + 2 bajty danych */
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 przy aktywnym kanale CAN psuła Flow Control (FC wychodził bez paddingu, DLC=3 — brama nie wysyłała Consecutive Frames) i nadpisywała filtr odbiorczy własnym TX ID (odbiór bez AT CRA przestawał działać). Zgodnie z datasheetem AT SH ustawia tylko nagłówek nadawania — filtrem odbiorczym sterują teraz wyłącznie AT CRA/CF/CM.PassThruStopPeriodicMsg mógł wysłać dodatkową ramkę po zatrzymaniu._PS — wybór pinów przez SET_CONFIG(J1962_PINS) nie był stosowany, ramki nie trafiały na magistralę.Poprawki