Trouver, vérifier et utiliser une définition de calibration
Ce guide explique pourquoi une définition (A2L, XDF, CSV) rend la conversion E85 fiable sur les calculateurs modernes, où la chercher, comment s'assurer qu'elle correspond à la version logicielle de votre fichier, et donne une fiche par famille de calculateur (Bosch, Siemens/Continental, Marelli, Sagem, Delphi, Denso…).
- 1. Pourquoi une définition ?
- 2. Lire les identifiants de votre fichier
- 3. Formats acceptés et conversions
- 4. Où chercher une définition
- 5. Vérifier la correspondance (version logicielle)
- 6. Créer soi-même une définition minimale (CSV)
- 7. Fiches par famille de calculateur
- 8. Embarquer des définitions dans l'application
- 9. Aspects légaux
- 10. Dépannage
- 11. Calculateurs anciens : cartes fragmentées, rôles E85, déduplication, export
- 12. Marge injecteur (duty-cycle théorique) et scores séparés
- 13. Politique de checksum : GarageDVS, outil de flash ou inconnu
1. Pourquoi une définition ?
Un fichier de calculateur (« dump » de la flash) contient du code et des milliers de données de calibration, sans aucun nom. L'analyse statistique de ReprogAutoLive retrouve seule les cartographies (tables avec axes) : sur les calculateurs anciens à tables de temps d'injection (Motronic M, Marelli IAW, Sagem, Sirius, Multec…), cela suffit à générer une version E85 en multipliant les bonnes cartes.
Sur les calculateurs à injection calculée (Bosch ME7, ME9/MED9, MED17, MG1, Siemens SIMOS, MSx BMW, Delphi MT, Denso…), le temps d'injection n'est pas dans une table : il est calculé à partir de la charge et d'une constante injecteur (KRKTE chez Bosch), puis corrigé par la régulation lambda dans des limites d'adaptation (FRAMNN/FRAMXN…). Ces scalaires (une ou deux valeurs de 16 bits) sont indétectables statistiquement : sans définition, l'outil ne peut ni les localiser ni les modifier, et le score est plafonné à 45.
Une définition associe des noms, adresses, dimensions et échelles à ces données. Avec elle, l'outil :
- nomme les cartes détectées (KFZW, LAMFA, KFKHFM…) et corrige leur classification ;
- rend modifiables les paramètres nommés selon des règles E85 par nom (constante injecteur × facteur, limites d'adaptation élargies, enrichissements à froid, cibles lambda inchangées, débitmètre et temps mort intouchés) ;
- vérifie la compatibilité définition ↔ fichier avant toute modification (base d'adressage, chaîne EPK, coïncidence des structures, valeurs lues plausibles).
2. Lire les identifiants de votre fichier
Tout part des identifiants inscrits dans le binaire. Déposez ici votre fichier (il ne quitte pas votre navigateur) : l'outil affiche la famille reconnue, les références trouvées, la fiche correspondante et des requêtes de recherche prêtes à l'emploi. Vous pouvez aussi déposer une définition pour voir ses empreintes et son score de correspondance avec le fichier.
Fichier
Aucun fichier chargé.
Définition
Aucune définition chargée.
Identifiants reconnus automatiquement
Les mêmes motifs sont appliqués au binaire, au contenu des définitions et à leur nom de fichier, ce qui permet la correspondance automatique de la bibliothèque :
Le numéro logiciel Bosch (10 chiffres commençant par 103…) et l'EPK (chaîne « xx/1/ME7.5/… ») sont les indices les plus fiables : ils identifient une version logicielle précise. Une référence pièce (06A906032HN, 96xxxxxx80…) identifie un calculateur mais peut couvrir plusieurs versions.
3. Formats acceptés et conversions
| Format | Origine | Lecture par l'outil | Remarques |
|---|---|---|---|
A2L (ASAP2, .a2l) | Fichier de calibration d'usine (INCA, CANape) ou reconstruit par la communauté | Directe : caractéristiques (VALUE, CURVE, MAP), dispositions (RECORD_LAYOUT), conversions (COMPU_METHOD linéaires), EPK, segments mémoire | Le plus complet. Les adresses sont des adresses ECU (0x800000, 0x80000000…) : la base est détectée automatiquement. Fichiers volumineux (5 à 60 Mo) : le navigateur les lit, mais le dépôt côté serveur dépend des limites PHP. |
XDF (TunerPro, .xdf) | Définitions communautaires (tunerpro.net, forums) | Directe : tables, courbes, constantes, adresses, taille d'élément, signe, ordre des octets, équations linéaires | Les équations non linéaires sont ignorées (valeur brute conservée). Base d'adressage prise dans l'XDF ou détectée. |
| CSV (format ReprogAutoLive) | Créé à la main, exporté d'un tableur ou d'un autre outil | Directe : une ligne par paramètre (nom, offset dans le fichier, taille, dimensions, échelle, description) | Idéal pour quelques paramètres clés recopiés d'un forum ou d'un outil commercial. Voir section 6. |
DAMOS (.dam) | Format binaire Bosch ancien (Motronic M, ME7) | Non lue | Cherchez l'A2L équivalent (souvent distribué avec), ou importez le DAMOS dans un outil qui le lit (WinOLS, TunerPro avec le module adéquat) et recopiez les paramètres clés dans un CSV. |
| XML RomRaider / EcuFlash | Subaru, Mazda, Mitsubishi | Non lue | Chaque table indique une adresse (storageaddress), un type et une échelle : recopiez les tables carburant dans un CSV. |
Packs WinOLS (.ols, .kp), drivers ECM Titanium, projets commerciaux | Outils professionnels | Non lue (formats propriétaires) | Exportez la liste des cartes en texte depuis l'outil (nom, adresse, dimensions, facteur) puis convertissez-la en CSV. Respectez la licence du pack. |
| Hondata / Crome / NISTune / Binary Editor… | Communautés Honda, Nissan, Ford | Non lue | Même démarche : recopie des offsets des tables carburant dans un CSV, ou recherche d'un XDF équivalent. |
Le format est reconnu au contenu (pas seulement à l'extension) : un A2L renommé .txt fonctionne.
4. Où chercher une définition
Cherchez toujours avec les identifiants exacts lus dans votre fichier (section 2) : le numéro logiciel Bosch, la référence pièce, l'EPK, et les mots-clés A2L, DAMOS, XDF, definition, mappack. Par ordre de préférence :
- Ce que vous avez déjà. Le préparateur ou le fournisseur qui a lu le calculateur dispose souvent d'un projet WinOLS avec les cartes nommées ; demandez un export texte de la liste des cartes. Un fichier « ori » venu d'une base de données de fichiers originaux est parfois accompagné de sa définition.
- La bibliothèque de cette instance. L'administrateur peut avoir déposé des définitions : la liste « Bibliothèque du serveur » du convertisseur affiche les candidates avec un score ★ de correspondance calculé sur les identifiants de votre fichier.
- Communautés spécialisées (inscription généralement requise) :
- nefmoto.com — référence pour les Bosch ME7 / MED9 / MED17 des groupes VAG : A2L et DAMOS classés par version logicielle (numéro 1037…), outils, documentation des fonctions (FR = Funktionsrahmen).
- tunerpro.net — dépôt de définitions XDF par constructeur et par calculateur, éditeur TunerPro gratuit pour les consulter ou les créer.
- ecuconnections.com, digital-kaos.co.uk — sections « definitions / damos / mappacks » multi-constructeurs (Marelli, Siemens, Sagem, Delphi, PSA, Renault…). Vérifiez la version avant de faire confiance à un fichier.
- pcmhacking.net — GM / Delphi / Opel-Holden (Multec, MT80, E38/E67), XDF et documentation.
- romraider.com (Subaru, Mazda), evolutionm.net et EcuFlash (Mitsubishi) — définitions XML à convertir en CSV.
- ms4x.net — wiki BMW Siemens MS41/MS42/MS43/MSS5x avec définitions et adresses documentées.
- Forums de marque et de préparation (VW/Audi, BMW, Fiat/Alfa, Renault Sport, PSA, Opel…) : rubriques « reprog », « cartographie », « E85 ».
- Ressources commerciales. Les éditeurs de WinOLS (EVC) et leurs revendeurs vendent des mappacks et des DAMOS/A2L par calculateur ; ECM Titanium et les outils similaires proposent des drivers par fichier original. Ces définitions sont sous licence : utilisables pour votre travail, non redistribuables.
- Documentation constructeur. Les A2L d'usine sont remis aux constructeurs sous accord de confidentialité ; ils circulent parfois avec des outils de diagnostic ou de calibration. Ne les redistribuez pas (voir section 9).
- L'affinage IA. À défaut de définition, l'étape « Affinage IA » du convertisseur transmet les identifiants et les structures détectées au modèle, qui peut proposer les noms et échelles usuels de la famille pour guider l'assistant. Ce n'est pas une définition : vérifiez toujours les valeurs lues.
5. Vérifier la correspondance avec votre version logicielle
Ce que l'outil compare
- Empreintes de la définition — extraites automatiquement lors du dépôt (serveur) ou de l'import (navigateur) : EPK et champs ECU/VERSION/PROJECT d'un A2L, titre d'un XDF, lignes
# match:d'un CSV, identifiants présents dans le nom de fichier (ex.1037361234_06A906032HN.a2l). - Identifiants du binaire — les mêmes motifs appliqués aux chaînes du fichier analysé. Score ★ de correspondance : même SHA-256 = 100, EPK présent dans le fichier = 95, numéro logiciel Bosch = 85, correspondance saisie par l'administrateur = 80, référence VAG = 75, PSA = 70, Renault = 65, autres références = 60, simple texte de version = 30 max, même famille seulement = 15. Une seule candidate ≥ 70 est appliquée automatiquement ; plusieurs candidates sont évaluées et la plus compatible est retenue ; en dessous, l'outil vous laisse choisir.
- Base d'adressage — les adresses A2L/XDF sont des adresses ECU ; l'outil essaie les bases usuelles de la famille (0x800000 pour C167, 0x80000000 pour TriCore, 0 pour PowerPC…) et retient celle qui fait coïncider le plus de caractéristiques avec des structures réellement détectées.
- Verdict de compatibilité — compatible : l'EPK (si présent) est retrouvé à l'adresse annoncée, une large part des cartes nommées correspond à des structures détectées et les valeurs lues sont plausibles ; incertaine : indices partiels, à contrôler dans la visionneuse ; INCOMPATIBLE : EPK différent ou structures qui ne coïncident pas — les paramètres ne sont pas appliqués et le score est plafonné à 25.
- Vraisemblance des valeurs — chaque paramètre clé est comparé à sa plage usuelle : constante injecteur 0,03–0,16 ms/% (indirecte : 0,06–0,16), limites d'adaptation basse 0,70–0,90 et haute 1,10–1,30, enrichissements 1,0–2,5. Une valeur hors plage signale une mauvaise base, un mauvais facteur ou une mauvaise version.
Ce que vous devez vérifier vous-même
- Le numéro logiciel de la définition (souvent dans son nom ou son en-tête) est celui de votre fichier. Sur Bosch, le numéro 1037xxxxxx change à chaque version ; la référence pièce (06A906032HN) peut rester identique entre versions.
- Dans le panneau Définition du convertisseur, ouvrez la constante injecteur et les limites dans la visionneuse : les valeurs doivent ressembler à celles de la fiche de la famille (section 7).
- Les cartes nommées (KFZW, LAMFA, KFKHFM…) doivent avoir des allures cohérentes (avance qui décroît avec la charge, lambda ≈ 1 à faible charge et 0,8–0,9 à pleine charge, débitmètre monotone).
6. Créer soi-même une définition minimale (CSV)
Pour une conversion E85, quelques paramètres suffisent : la constante injecteur, les deux limites d'adaptation, éventuellement les enrichissements à froid. Un fichier texte de trois lignes fait une définition valable.
# Définition minimale — Golf IV 1.8T AGU, ME7.5 # match: 1037361234, 06A906032HN # sha256: 4b002588e432356da92c986ecf3845e8b3e30c0d765e2fd10fbda638abb9b106 nom;offset;taille;nx;ny;facteur;decalage;unite;signe;description;role;e85_action;parent_id;confidence;protected KRKTE;0x1A2B0;2;1;1;0.000030517578125;0;ms/%;0;Constante injecteur (rk -> te);injector_constant;fuel_factor;;0.95;0 FRAMNN;0x1A2C4;2;1;1;0.0009765625;0;-;0;Limite basse adaptation multiplicative;adaptation_min;adaptation_expand;;0.9;0 FRAMXN;0x1A2C6;2;1;1;0.0009765625;0;-;0;Limite haute adaptation multiplicative;adaptation_max;adaptation_expand;;0.9;0 KFWKA;0x1B100;1;8;6;0.0078125;0;-;0;Enrichissement réchauffage vs température / temps;warmup_enrichment;warmup_factor;;0.8;0 TVUB;0x1B200;2;8;1;0.004;0;ms;0;Temps mort injecteur;injector_deadtime;keep;;1;1
offset= position dans le fichier (hexadécimal0x…ou décimal), pas l'adresse ECU. Pour convertir une adresse ECU : soustrayez la base (0x800000 sur ME7 C167 :0x81A2B0 → 0x1A2B0; 0x80000000 sur MED17 TriCore).taille= octets par élément (1, 2 ou 4) ;nx/ny= dimensions (1 ; 1 pour un scalaire) ;physique = brut × facteur + decalage;signe= 1 pour une valeur signée.- La ligne
# match:liste les identifiants du binaire concerné (correspondance automatique dans la bibliothèque) ;# sha256:(ou# source_sha256:) donne l'empreinte SHA-256 du binaire décrit, affichée par le convertisseur : si elle est identique au fichier chargé, la compatibilité est de 100 % (« fichier exact confirmé par SHA-256 »). - Les colonnes
role,e85_action,parent_id,confidenceetprotectedsont facultatives (les anciens CSV à 10 colonnes restent valables) ; une ligne d'en-tête permet de les nommer dans n'importe quel ordre. Avecrole, le rôle E85 ne dépend plus du nom : voir la section 11. - Les colonnes
axis_x/axis_y(facultatives) nomment la ligne qui décrit l'axe X / Y d'une carte, par exemple une ligneRPM_AXIS;0x66848;2;12;1;1;0;tr/min;0;Axe régime;axis;none;;1;1: c'est ce qui permet d'estimer la marge injecteur d'une carte de durée d'injection en ms. La colonneaxis_modevautdeltaquand l'axe est stocké en incréments (Magneti Marelli : chaque octet est l'écart avec le point précédent ; les points sont la somme cumulée × facteur). La directive# scale_verified: 1déclare que l'échelle physique (facteur, unité ms) a été vérifiée jusqu'au timer injecteur (mesure à l'oscilloscope, documentation constructeur) : sans elle, l'estimation reste « indicative ». - La directive
# checksum_policy: external_flash_tooldéclare que le checksum est volontairement laissé à l'outil de flash (voir la section 13) ;internal_supporteddéclare qu'il est géré par GarageDVS. - Sans
role, les noms déclenchent les règles E85 : gardez les noms Bosch (KRKTE, FRAMNN/FRAMXN, KFWKA, TSTA…, LAMFA, KFZW…) ou des noms explicites (« injector constant », « adaptation min », « warmup enrichment ») ; la description est également analysée.
D'où sortir les offsets ?
- D'une autre définition de la même famille : les adresses diffèrent, mais l'assistant du convertisseur affiche la valeur lue à l'offset saisi ; une constante injecteur plausible (0,06–0,16 ms/%) entourée des autres constantes de la fonction est un bon signe. L'affinage IA peut proposer des candidats.
- D'un forum : les sujets « E85 » d'une motorisation précise donnent souvent l'offset de KRKTE et des limites pour un numéro logiciel donné. Vérifiez que c'est le vôtre.
- D'un outil commercial (WinOLS, ECM Titanium) : exportez la liste des cartes ou notez l'adresse, la taille et le facteur de chaque paramètre.
Enregistrez le fichier en .csv (UTF-8), importez-le dans le convertisseur ou déposez-le dans la bibliothèque. Le format complet est décrit dans le LISEZMOI.
7. Fiches par famille de calculateur
Connaissance embarquée dans l'outil (même catalogue que l'identification automatique). Les noms de paramètres et les échelles sont des ordres de grandeur usuels : la définition fait toujours foi.
Chargement du catalogue… (JavaScript requis)
8. Embarquer des définitions dans l'application
Deux bibliothèques coexistent et sont fusionnées dans la liste « Bibliothèque du serveur » du convertisseur : la bibliothèque du serveur (dépôt par l'administrateur, stockée dans data/definitions/) et la bibliothèque statique (fichiers livrés dans assets/definitions/, fonctionne sans PHP). Dans les deux cas, l'association au fichier analysé se fait par les empreintes (section 5) et la compatibilité est revérifiée avant toute modification.
A. Bibliothèque du serveur : dépôt (en masse) par l'administration
- Ouvrez Administration, connectez-vous, section Bibliothèque de définitions.
- Dans Fichier(s), sélectionnez un ou plusieurs fichiers (.a2l, .xdf, .csv ; Ctrl ou Maj pour une sélection multiple). Nommez-les si possible avec leurs identifiants :
1037361234_06A906032HN.a2l. - Champs optionnels : Nom (pris en compte pour un dépôt d'un seul fichier, sinon le nom du fichier est utilisé), Famille (ex. « Bosch ME7 » ; déduite de l'EPK si vide) et Correspondances supplémentaires (identifiants séparés par des virgules). Famille et correspondances s'appliquent à tous les fichiers du lot : déposez lot par lot si elles diffèrent.
- Cliquez Déposer : les fichiers sont envoyés un par un. Pour chacun, les empreintes sont extraites du contenu (EPK et champs ECU/VERSION d'un A2L, titre d'un XDF, lignes
# match:d'un CSV) et du nom de fichier. Le résumé liste les empreintes trouvées ou signale « aucune empreinte extraite : ajoutez des correspondances ». - Le tableau affiche les définitions avec leurs correspondances et empreintes ; Supprimer retire le fichier. Les fichiers sont stockés dans
data/definitions/derrière une garde PHP et servis uniquement par l'API.
upload_max_filesize et post_max_size, 8 Mo par défaut dans le .htaccess fourni ; l'API refuse au-delà de 96 Mo). Pour un gros A2L, augmentez ces limites (php.ini, .user.ini, panneau de l'hébergeur ; client_max_body_size sous nginx) ou passez par la bibliothèque statique.B. Bibliothèque statique : livrer les définitions avec le déploiement
- Copiez les fichiers dans
assets/definitions/(par FTP/SFTP sur le serveur, ou dans les sources avant de construire l'archive). Aucune limite PHP ne s'applique. - Déclarez-les dans
assets/definitions/index.json:- Avec Node.js (depuis les sources) :
npm run definitions:index(ounode tools/build-definitions-index.mjs [dossier]) analyse chaque fichier, extrait les empreintes, l'EPK et la famille, et régénère l'index en conservant les champs saisis à la main (name,family,match,sha256,notes). - Sans Node.js : écrivez l'index à la main. Une entrée minimale suffit :
{ "file": "1037361234_06A906032HN.a2l" }. Les identifiants présents dans le nom du fichier (et dansname) sont reconnus automatiquement ; ajoutezmatch,epketfamilypour compléter (l'EPK d'un A2L se lit dans son en-tête, ligneEPK "…").
- Avec Node.js (depuis les sources) :
- Rechargez le convertisseur : l'entrée apparaît dans la liste avec la mention « embarquée » et, après l'analyse d'un fichier, son score ★.
[
{
"file": "1037361234_06A906032HN.a2l",
"name": "ME7.5 1.8T 06A906032HN (SW 1037361234)",
"family": "Bosch ME7",
"match": ["1037361234", "06A906032HN"],
"epk": "40/1/ME7.5/…",
"sha256": null,
"notes": "source et licence de la définition"
},
{ "file": "clio2_sirius32_8200123456.csv", "family": "Siemens/Continental Renault (Sirius 32/34, EMS 31xx)" }
]
Champs : file (obligatoire, nom du fichier dans le dossier), id (dérivé du nom de fichier si absent), name, format (a2l | xdf | csv, déduit de l'extension), family, match, epk, sha256 (empreinte SHA-256 du fichier binaire original que décrit la définition, affichée par le convertisseur : score 100), fingerprints (générées par l'outil), notes. Les deux bibliothèques peuvent coexister ; en cas de doublon, chaque candidate est évaluée et la plus compatible est retenue.
9. Aspects légaux
- Droits sur les définitions. Un A2L d'usine appartient au constructeur ou à l'équipementier et est en général couvert par un accord de confidentialité ; un mappack ou un DAMOS commercial est sous licence. Les XDF communautaires sont publiés par leurs auteurs avec ou sans licence explicite. Utilisez ces fichiers pour votre propre travail ; ne les redistribuez que si vous y êtes autorisé.
- Bibliothèque partagée. L'opérateur de cette instance est responsable des définitions qu'il met à disposition des visiteurs (bibliothèque du serveur et bibliothèque statique). Indiquez la source et la licence dans le champ « notes ».
- Fichier du véhicule. La lecture et la modification d'un calculateur engagent votre responsabilité (garantie, homologation, assurance). En France, la conversion à l'E85 d'un véhicule routier n'est légale qu'avec un dispositif homologué ; une reprogrammation relève de l'usage sur circuit ou de la compétition. Renseignez-vous sur la réglementation applicable dans votre pays.
- Aucune garantie. L'outil applique des heuristiques ; ni ses auteurs ni l'opérateur de l'instance ne garantissent le résultat. Testez sur banc, surveillez les adaptations (long term fuel trim) et le cliquetis.
10. Dépannage
| Message ou symptôme | Cause probable | Que faire |
|---|---|---|
| « Aucune définition de la bibliothèque ne correspond à ce fichier » | Aucune empreinte commune entre le fichier et les définitions disponibles | Notez les identifiants lus (panneau Calculateur ou section 2), cherchez une définition avec ces identifiants, ou choisissez manuellement une définition de la même famille : la compatibilité sera vérifiée. |
| « INCOMPATIBLE (autre version logicielle ?) » | L'EPK diffère ou les structures nommées ne coïncident pas avec les structures détectées | Vérifiez le numéro logiciel ; cherchez la définition de la bonne version. N'appliquez pas la définition : ses adresses sont fausses pour votre fichier. |
| « compatibilité incertaine » | Base d'adressage trouvée mais peu de cartes détectées coïncident, ou valeurs à la limite de la vraisemblance | Ouvrez KRKTE, les limites et deux ou trois cartes nommées dans la visionneuse : si les valeurs et les allures sont cohérentes, continuez ; sinon changez de définition. Essayez aussi l'option « ordre des octets » ou la sensibilité de détection. |
| Constante injecteur « hors plage » | Mauvais facteur (A2L : COMPU_METHOD ; CSV : colonne facteur), mauvaise taille d'élément, ou mauvaise version | Sur ME7, KRKTE ≈ 0,08–0,15 ms/% avec le facteur 1/32768 sur 16 bits. Corrigez le facteur ou l'offset dans un CSV. |
| Le dépôt d'un A2L échoue (413, « fichier trop grand ») | Limites PHP ou du serveur web | Augmentez upload_max_filesize/post_max_size (php.ini, .htaccess, .user.ini) ou utilisez la bibliothèque statique. Un A2L peut aussi être allégé : ne gardez que le MODULE avec les caractéristiques carburant. |
| Import très lent d'un gros A2L | Analyse de dizaines de Mo dans le navigateur | Patientez (la barre de progression avance) ou allégez l'A2L. Les paramètres inutiles sont ignorés après l'association. |
| Aucune carte nommée après l'association | La définition ne décrit pas le même fichier, ou l'XDF utilise une base différente | Contrôlez l'EPK et la version ; sur XDF, vérifiez la valeur BASEOFFSET et l'ordre des octets. |
| « L'application ne s'est pas chargée » (Firefox : « Échec du chargement pour le module… », Chrome : erreur d'import dans la console) | Un fichier JavaScript de l'application n'a pas été chargé : bloqué par une extension (bloqueur de publicités ou anti-pistage), ancien fichier en cache après une mise à jour, ou fichier absent du serveur | L'alerte indique le fichier en cause. Désactivez le bloqueur pour ce site, rechargez en forçant le cache (Ctrl+F5), puis vérifiez que le fichier existe sur le serveur (redéployez l'archive complète au besoin). |
| Calculateur « Non identifié » | Peu de chaînes lisibles (fichier compressé, chiffré, ou dump partiel) | Vérifiez que le fichier est une lecture complète de la flash (tailles usuelles : 512 Kio, 1, 2, 4 Mio). Choisissez la famille par vous-même dans la liste des définitions. |
11. Calculateurs anciens : cartes fragmentées, rôles E85 explicites, déduplication, export
Sur les calculateurs à tables de temps d'injection (Magneti Marelli IAW, Sagem, Sirius, Multec…), la conversion consiste à multiplier la carte de durée d'injection. Ces calculateurs n'ont ni constante injecteur KRKTE ni limites FRAMNN/FRAMXN : l'outil ne les exige pas. En revanche, le détecteur statistique découpe souvent une carte logique en plusieurs morceaux. Exemple réel : IAW 6LP2.05 (ST10F280, PSA 1.4 16V KFU), carte d'injection 12×21 uint16 little-endian à 0x62D54 (stride 24 octets, 252 cellules, 0,01 ms/bit) détectée en fragments 12×4 @0x62D54, 12×5 @0x62DB4, 12×5 @0x62E5C…
Carte parent et fragments
Une entrée de définition MAP 12×21 @0x62D54 est associée aux structures détectées entièrement contenues dans sa plage d'octets [0x62D54, 0x62F4C), à condition qu'elles soient cohérentes : même taille d'élément, même ordre des octets, largeur compatible (12, ou un multiple / diviseur : mêmes cellules redécoupées), début et fin alignés sur une ligne, pas de chevauchement. L'union de leurs plages donne la couverture :
Carte définition MAIN_INJECTION — 12×21 — reconstruite à partir de 4 fragments — couverture 90,5 % (1 zone non détectée : 0x62E2C–0x62E5B)
Les fragments sont nommés « MAIN_INJECTION (fragment 2/4) », reclassés selon le rôle du parent, et la compatibilité de la définition n'est pas pénalisée : une fragmentation par le détecteur n'est pas une incompatibilité de version. Le panneau « Pourquoi ? » de chaque paramètre indique « structure exacte trouvée », « parent couvert par N fragments » ou « aucune structure détectée correspondante », puis la source du rôle E85 (colonne role, nom, description) et les valeurs lues.
Rôles E85 explicites (CSV)
| role | Action par défaut | Type |
|---|---|---|
fuel_quantity, injection_time, injection_duration | × facteur carburant | carte d'injection |
injector_constant | × facteur carburant | constante injecteur (vraisemblance 0,02–0,6 ms/%) |
warmup_enrichment, cold_start_enrichment | × facteur froid | enrichissement |
adaptation_min / adaptation_max | limite abaissée / relevée | adaptation |
lambda_target | inchangée (sauf réglage lambda pleine charge) | cible lambda |
ignition | action séparée (+ avance en forte charge, sur demande) — jamais confondue avec le carburant ; soumise au même seuil de certitude que les autres cibles (réglage unique de l'étape Profil ; une carte d'avance retenue sous 70 % est signalée) ou incluse de force | avance |
injector_deadtime, load, torque, boost, axis, reference, other | aucune | reconnu, non modifié |
e85_action précise l'action : fuel_factor, warmup_factor, adaptation_expand, keep, none. parent_id désigne la carte parent d'une ligne fragment (le parent l'emporte). confidence (0–1 ou 0–100) fixe la certitude. protected=1 interdit toute modification. Quand role est présent, le nom et la description ne servent plus qu'à l'affichage ; les anciens CSV sans ces colonnes utilisent les règles par nom.
Groupes parent_id : une carte décrite par ses morceaux
Quand une définition CSV décrit une carte par plusieurs lignes portant le même parent_id (par exemple INJ_R0 12×4 @0x62D54, INJ_R1 12×5 @0x62DB4, INJ_R2 12×2 @0x62E2C, INJ_R3 12×5 @0x62E5C, INJ_R4 12×5 @0x62ED4 avec parent_id=MAIN_INJECTION_12X21), l'outil les regroupe en une carte logique : plages ordonnées et réunies ([0x62D54, 0x62F4C), 252 cellules uint16), dimensions logiques déduites de la largeur commune (12×21), contrôles de cohérence (même taille d'élément, même ordre des octets, aucun chevauchement, continuité). Un enfant qu'aucune structure détectée ne confirme contribue quand même au parent : il est compté comme vérifié si le SHA-256 déclaré est celui du fichier, sinon signalé et la certitude du parent est réduite. Les lignes de même parent_id avec role=axis, role=reference ou protected=1 sont associées au parent mais jamais comptées comme enfants de données.
Si tous les enfants partagent le même rôle et la même action (fuel_quantity / fuel_factor), le parent est l'unique action modifiable : le résumé compte « 1 carte logique concernée par l'E85 (5 fragments) », les enfants restent affichés pour le diagnostic mais n'ont aucune action indépendante (ils héritent de l'action choisie sur le parent, mention « via le parent MAIN_INJECTION_12X21 », et ne sont pas modifiés si le parent est exclu). Avant génération, l'union ordonnée des plages des enfants est vérifiée : elle doit valoir exactement la carte parent (par exemple [0x62D54, 0x62F4C), 504 octets, 252 valeurs uint16, 12×21), sans chevauchement ; sinon la génération est refusée. Chaque cellule n'est modifiée qu'une seule fois, même lorsqu'un fragment est aussi reconnu par le détecteur statistique. Le bloc de synthèse affiche : nom — rôle — facteur, cellules, plage, valeurs physiques avant et après, fragments détectés, complément fourni par la définition (SHA-256) et chevauchements. Les paramètres role=reference, e85_action=keep ou protected=1 ne sont jamais comptés comme modifiables. Rôles différents, chevauchement ou tailles d'élément différentes : pas d'action au niveau du parent, chaque enfant est traité séparément et le problème est affiché. Le nombre de fragments détectés ne réduit pas la certitude du parent lorsque le SHA-256 du binaire correspond à la définition.
L'interface distingue l'origine de chaque paramètre : détecté statistiquement (structure trouvée par l'analyse), fourni par définition exacte SHA-256 (non détecté, mais la définition décrit précisément ce binaire), reconstruit (carte reconstituée à partir de fragments ou d'enfants) et non vérifié ; le badge concerné E85 marque les paramètres réellement modifiables.
Priorité de la définition sur la détection statistique
Quand une structure détectée correspond à un paramètre de la définition, la classification de définition (rôle) devient la classification fonctionnelle et la détection brute (type et certitude statistiques) n'est plus qu'informative, affichée en badge secondaire. Règles : protected=1 ⇒ aucune modification automatique ; e85_action=keep ⇒ action forcée à « aucune » ; rôle reference / axis / other ⇒ jamais une cible E85. La classification statistique ne peut jamais réactiver une action sur une telle structure, même par inclusion forcée. Exemple : une structure fusionnée par le détecteur (« Injection 60 % ») déclarée DETECTOR_MERGED_FALSE_POSITIVE_6328A;…;reference;keep;;0.9;1 affiche « Reference · protected · détection brute : Injection 60 % · Action E85 : aucune — protégé par définition ». Pour un parent parent_id, la classification et l'action sont portées par le parent, les enfants sont purement diagnostiques (« via le parent »).
Le tableau des cartes masque par défaut ces faux positifs neutralisés (case « Afficher les faux positifs neutralisés ») et ne les inclut jamais dans « Seulement les cartes utiles à l'E85 ». L'export de la détection contient les deux classifications (colonnes rawType, rawConfidence, definitionRole, definitionAction, neutralized).
Déduplication des écritures
Avant génération, toutes les modifications sont converties en plages d'octets. Une structure détectée entièrement contenue dans la plage d'un paramètre nommé ou d'un patch parent est retirée du plan (« fragment couvert par MAIN_INJECTION : modifié une seule fois via la carte parent ») : chaque cellule n'est multipliée qu'une seule fois, même si vous forcez l'inclusion des fragments. Tout autre recouvrement (deux patchs, patch et paramètre de définition, recouvrement partiel) est un conflit bloquant :
Conflit : les octets 0x62D54–0x62DB3 sont modifiés à la fois par MAIN_INJECTION et FRAGMENT_01.
Le bouton de génération est désactivé tant qu'un conflit ou une erreur subsiste. Le rapport liste chaque plage modifiée avec le nombre de cellules et les valeurs brutes min/max avant → après.
Patch parent structuré (mode expert)
Sans définition, saisissez directement la carte : 0x62D54, 2, 12, 21, 1.30, fuel_quantity, IAW6LP main injection (offset, taille d'élément, nx, ny, facteur, rôle, libellé). L'aperçu montre la plage exacte (0x062D54–0x062F4B), 252 cellules, min/max avant et après, et les structures détectées couvertes. Un dépassement de capacité (uint16 > 65535), un offset hors du fichier ou un recouvrement rejettent le patch : aucune écriture partielle.
Export de la détection
À l'étape Analyse, « Exporter la détection (JSON) » et « (CSV) » donnent, pour chaque structure : identifiant (M022…), offset, plage d'octets byteStart/byteEnd, dimensions, taille d'élément, ordre des octets, axes (offsets et valeurs si détectés), min/max/moyenne, premiers et derniers échantillons, classification et certitude, action E85 prévue ou raison d'exclusion. C'est la base la plus simple pour construire une définition CSV : repérez les fragments d'une même carte, déduisez l'offset parent, les dimensions et le stride, puis déclarez la carte avec son rôle.
12. Marge injecteur (duty-cycle théorique) et scores séparés
Multiplier une carte de durée d'injection par 1,30 n'a de sens que si l'injecteur dispose encore du temps nécessaire : à haut régime, le temps disponible par cycle se réduit et l'injecteur finit par rester ouvert en permanence (duty-cycle 100 %). Pour toute cible carburant de rôle fuel_quantity (ou injection_time / injection_duration, ou une carte de temps d'injection reconnue par son nom) dont l'unité est la milliseconde et dont un axe régime est disponible, l'outil calcule, pour chaque point de l'axe régime :
- le temps disponible sur un cycle moteur 4 temps (720°) :
cycle720_ms = 120000 / régime(18,46 ms à 6 500 tr/min, 30 ms à 4 000 tr/min) ; - l'utilisation théorique de chaque cellule :
utilisation = durée_modifiée / cycle720_ms, la durée modifiée étant la valeur brute arrondie après multiplication, reconvertie en ms avec le facteur de la définition ; - la bande de couleur : < 80 % vert 80–90 % orange 90–100 % rouge > 100 % rouge critique.
La durée d'injection n'est jamais plafonnée automatiquement. Un dépassement ne modifie pas le fichier généré : il produit un avertissement demandant de vérifier la capacité des injecteurs (débit, remplacement par des injecteurs plus gros), la pression carburant et l'interprétation de l'unité (un facteur erroné dans la définition transforme 1,8 ms en 18 ms). Si la carte d'origine dépasse déjà 100 %, c'est très probablement l'unité ou le facteur qui est faux, ou la table n'est pas une durée brute : le rapport le signale.
D'où vient l'axe régime ?
- A2L : l'
AXIS_DESCR(STD_AXIS / COM_AXIS) et saCOMPU_METHODen1/min, grandeur d'entréenmot; - XDF : l'axe X ou Y dont l'unité est
rpm(données embarquées ou labels) ; - CSV : la ligne désignée par
axis_x/axis_y, sinon la lignerole=axisassociée parparent_id, sinon l'unique ligne « axe régime » (unitérpm/tr/minou nom explicite) ayant autant de points que de colonnes ou de lignes de la carte ; deux candidates sansaxis_x: ambigu, non estimé ;axis_mode=deltapour un axe en incréments ; - en dernier recours, l'axe deviné par la détection statistique sur la structure liée (certitude réduite).
Les valeurs doivent être plausibles (croissantes, 0–20 000, maximum ≥ 1 500 tr/min) ; sinon l'axe est ignoré et la raison est indiquée dans les notes.
Échelle physique prouvée ou non
L'estimation suppose que « ms » est bien la milliseconde vue par le timer injecteur. Cette échelle est considérée prouvée quand la définition est un A2L constructeur dont l'identité est vérifiée (EPK retrouvé ou SHA-256 exact) ou quand la définition CSV porte # scale_verified: 1. Dans tous les autres cas, l'outil affiche explicitement : « Estimation de duty-cycle indicative — unité ms non confirmée jusqu'au timer injecteur. » Les corrections dynamiques du calculateur (temps mort injecteur, corrections lambda, enrichissements transitoires) ne sont pas incluses : l'utilisation réelle est en général un peu plus élevée que l'estimation.
Rapport avant génération
Le bloc « Marge injecteur — pire cas » de l'étape Profil indique, pour chaque carte estimée : le régime du pire cas, le temps de cycle, la cellule concernée (colonne, ligne), la valeur d'origine et la valeur modifiée, l'utilisation théorique et sa bande, l'utilisation avant modification, la source de l'axe régime et l'état de l'échelle physique, puis un tableau régime par régime (cycle 720°, maximum avant, maximum après, utilisation). Exemple sur l'IAW 6LP2.05 de la section 11 : à 6 500 tr/min (cycle 18,46 ms), la cellule colonne 12 / ligne 21 passe de 17,74 ms à 23,06 ms (×1,30), soit 125 % — rouge critique — alors que la carte d'origine était déjà à 96 %.
Quatre scores séparés, jamais fusionnés
| Score | Ce qu'il mesure | Lecture |
|---|---|---|
| Compatibilité définition | correspondance définition ↔ fichier (SHA-256, EPK, identifiants, entrées dans le fichier, cartes retrouvées, vraisemblance) | ≥ 70 compatible, 40–69 incertaine, < 40 incompatible ; « non applicable » sans définition |
| Certitude fonctionnelle | identification du calculateur (15), cibles carburant (35), cohérence (20), ramenées sur 100 ; plafonds : diesel 10, définition incompatible utilisée 25, aucune cible carburant 30, injection calculée sans constante 45 | ≥ 75 bon, 50–74 à vérifier, < 50 insuffisant |
| Intégrité checksum | blocs prouvés sur l'original ; zones modifiées couvertes et recalculées ; vérification finale | 100 si tout est couvert, 40–99 si des zones modifiées sont hors des plages vérifiées, 0 si aucun checksum n'est reconnu ou si la vérification finale échoue |
| Marge injecteur | 100 − utilisation théorique au pire cas (borné à 0) | bande vert / orange / rouge / rouge critique ; « non estimable » sans carte en ms ou sans axe régime |
Un checksum inconnu n'est plus dilué dans un total ambigu (« 51/100 ») : il vaut 0 sur sa propre ligne, et le verdict global (bonne confiance / confiance moyenne / confiance faible) est déduit des quatre scores — confiance faible dès que la certitude fonctionnelle est insuffisante ou que la marge injecteur est dépassée ; confiance moyenne dès qu'un checksum manque, qu'une définition est incertaine ou qu'une marge est réduite. Le rapport JSON conserve le total historique (score.total) pour compatibilité, mais l'interface et le rapport texte n'affichent que les scores séparés. Un checksum volontairement laissé à l'outil de flash (section 13) est « hors périmètre » : il n'est compté dans aucun score et ne dégrade pas le verdict.
13. Politique de checksum : GarageDVS, outil de flash ou inconnu
Beaucoup d'outils de flash (Galletto, KESS, MPPS, Alientech, outils constructeur…) recalculent eux-mêmes les checksums au moment de l'écriture. Dans ce cas, un « checksum non reconnu » par GarageDVS n'est pas un défaut du fichier : c'est une étape volontairement confiée au flasher. La politique de checksum distingue trois états :
| État | Signification | Affichage | Effet |
|---|---|---|---|
internal_supported | checksum géré par GarageDVS : blocs prouvés sur l'original et recalculés à la génération, vérification finale | Checksum géré par GarageDVS | score « Intégrité checksum » 40–100 ; déclaré mais aucun bloc reconnu : avertissement réel, score 0 |
external_flash_tool | checksum volontairement laissé au flasher : GarageDVS n'écrit aucun checksum, même s'il reconnaît des blocs | Checksum externe confirmé — « Checksum : externe — recalcul par l'outil de flash » | hors périmètre : compté dans aucun score, aucun plafond, verdict non dégradé, génération toujours disponible |
unknown | aucun checksum reconnu et aucune déclaration | Checksum inconnu | avertissement réel, score « Intégrité checksum » 0 : correction externe à vérifier avant flash |
Comment déclarer la politique
- Dans la définition CSV :
# checksum_policy: external_flash_tool(ouinternal_supported). C'est l'auteur de la définition qui confirme que ce calculateur se flashe avec un outil qui recalcule le checksum ; la mention apparaît dans le statut de la définition, le panneau Checksums et le rapport. - Dans la bibliothèque (
index.json, champchecksum_policy) pour les A2L et XDF, qui n'ont pas de directive. - Préférence utilisateur « Mon outil de flash recalcule le checksum » (panneau Checksums de l'étape Profil, mémorisée dans le navigateur) : quand aucun checksum n'est reconnu et qu'aucune définition ne déclare de politique, l'état passe de « inconnu » à « externe confirmé » sans redemander la confirmation à chaque fichier. Dès que GarageDVS reconnaît des blocs, il continue de les recalculer (interne) : la préférence n'empêche jamais une correction sûre.
Une déclaration explicite de la définition l'emporte sur la préférence : internal_supported sans bloc reconnu reste un avertissement réel. Ni la compatibilité de la définition, ni la certitude fonctionnelle, ni la possibilité de générer le fichier ne dépendent de la politique de checksum.
Ce que dit le rapport
CHECKSUMS Checksum : externe — recalcul par l'outil de flash (déclaré par la définition) Checksum du fichier généré : non recalculé par GarageDVS Correction attendue : outil de flash externe Statut : workflow utilisateur validé
Avec la politique interne, le rapport indique le nombre de blocs recalculés et le résultat de la vérification finale ; avec l'état inconnu, il rappelle que la correction n'est pas validée.