Pour le développement de votre propre logiciel de diagnostic, les adaptateurs ScanDoc prennent en charge deux protocoles d'échange de données : J2534 PassThru et ELM327. L'ensemble des protocoles pris en charge dépend du modèle de l'adaptateur — choisissez celui qui convient le mieux à votre tâche.
Spécification et description des fonctions J2534 ›
Spécification et description des commandes ELM327 ›
L'interface ELM327 est disponible dans l'adaptateur Nano ET. Les autres adaptateurs ScanDoc utilisent le protocole J2534 PassThru.
Changements dans la DLL J2534, ELM327 et le firmware des adaptateurs ScanDoc concernant l'intégration : nouvelles fonctions, protocoles et paramètres — avec des exemples d'utilisation.
Télécharger les bibliothèques J2534 2.0.0.200 — Windows x86/x64/ARM64 (builds séparés pour Windows 7), macOS (universal), Linux (x64, x86, ARM, ARM64), Android (arm64-v8a, armeabi-v7a, x86, x86_64), iOS.
Nouveautés
ISO13400_PS (0x8FFD) et HSFZ_PS (0x8FFC). Ils ne font pas partie du standard SAE J2534 — c'est une extension propriétaire ScanDoc : diagnostic par Ethernet — découverte des véhicules sur le réseau (VIN, adresse logique), connexion TCP, routing activation, échange UDS. L'adresse du testeur vaut 0 par défaut — définissez ISO13400_SOURCE_ADDR avant le routing activation, sinon la passerelle refusera ; l'adresse de l'ECU est transmise dans chaque message ([TA][SA][UDS]), ISO13400_TARGET_ADDR ne se définit pas via Set/GetConfig. L'émission est sérialisée selon P2 : une seule requête UDS en cours à la fois, le NRC 7F xx 78 prolonge l'attente jusqu'à P2*max (6 s). Nouveau paramètre de canal ISO13400_P3_DOIP (0x8108) — pause entre les messages.
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 — avant le routing activation */
PassThruIoctl(ch, ISO13400_DISCOVER_VEHICLES, NULL, NULL); /* l'IP de l'ECU est mémorisée automatiquement */
PassThruIoctl(ch, ISO13400_CONNECT_TCP, NULL, NULL);
PassThruIoctl(ch, ISO13400_ACTIVATE_ROUTING, NULL, &code); /* 0x10 = succès */
/* ensuite PassThruWriteMsgs / PassThruReadMsgs — UDS classique */
0x55 (marqueur de trame J2534) — J2534, tout autre octet (commande AT texte) — ELM327.Corrections
PassThruStartMsgFilter ne comparait que les 4 octets du CAN ID, en ignorant la longueur de filtre indiquée. La trame est désormais comparée sur toute la longueur, comme l'exige le standard : PASS/BLOCK selon le contenu de la trame fonctionnent.
/* Supprimer les réponses TesterPresent (07E8 02 7E ...) de la file de réception */
pt_msg_t mask = {0}, pattern = {0};
mask.protocol_id = pattern.protocol_id = CAN;
mask.data_size = pattern.data_size = 6; /* 4 octets CAN ID + 2 octets de données */
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 sur un canal CAN actif cassait le Flow Control (le FC partait sans padding, DLC=3 — la passerelle n'envoyait pas de Consecutive Frames) et écrasait le filtre de réception avec son propre TX ID (la réception sans AT CRA était cassée). Selon la datasheet, AT SH ne définit que l'en-tête d'émission — le filtre de réception n'est plus contrôlé que par AT CRA/CF/CM.PassThruStopPeriodicMsg pouvait envoyer une trame supplémentaire après l'arrêt._PS — la sélection des broches via SET_CONFIG(J1962_PINS) n'était pas appliquée, les trames n'atteignaient pas le bus.Corrections