Les sessions de diagnostic : pourquoi l'ordre compte
Beaucoup d'échecs de communication n'ont rien d'un problème matériel : c'est simplement qu'on demande à un calculateur quelque chose qu'il n'accepte pas dans l'état où il se trouve.
Le principe
Un calculateur ne fonctionne pas toujours de la même façon. Il possède plusieurs modes de fonctionnement diagnostic — des sessions — et chacune n'autorise qu'une partie des commandes.
Au démarrage, il est toujours dans la session la plus restreinte. Il faut lui demander explicitement de passer dans une autre pour accéder au reste.
Le service qui commande ce changement porte le numéro 0x10 (réponse positive 0x50).
Les trois sessions à connaître
| Numéro | Session | Ce qu'elle permet |
|---|---|---|
| 0x01 | Session par défaut | Le strict minimum : lecture de codes défaut, données de base. C'est l'état au démarrage. |
| 0x02 | Session de programmation | Les services d'écriture en mémoire. C'est la session du flashage. |
| 0x03 | Session étendue | Écritures de calibration, commandes d'actionneurs, routines, effacement de défauts, réinitialisations. |
Une quatrième session normalisée existe pour les systèmes de sécurité (0x04), et les constructeurs disposent de plages qui leur sont réservées pour leurs propres sessions.
L'enchaînement qui marche
C'est presque toujours le même, et le respecter évite bien des ennuis :
1. Passer en session étendue ou programmation (service 0x10).
2. Déverrouiller par seed & key (service 0x27) — la sécurité s'applique par-dessus la session.
3. Faire l'opération : lecture, écriture, routine.
4. Maintenir la session ouverte pendant toute la durée.
Si vous obtenez un refus 0x7E (« sous-fonction non supportée dans cette session ») ou 0x22 (« conditions non réunies »), la réponse est presque toujours là : mauvaise session, ou sécurité pas encore levée.
Le calculateur retombe tout seul
Point capital, et cause d'échecs mystérieux en pleine opération : une session n'est pas permanente. Si le calculateur n'entend plus le testeur pendant un certain temps, il retombe en session par défaut — et tout ce qui avait été déverrouillé est perdu.
D'où l'existence d'un service dédié : TesterPresent, numéro 0x3E. Il ne fait rien d'autre que dire « je suis toujours là ». L'outil l'envoie périodiquement en arrière-plan pour maintenir la session ouverte.
Une variante courante demande au calculateur de ne pas répondre à ce message, pour éviter d'encombrer le bus inutilement.
Le délai avant retombée est de l'ordre de quelques secondes selon les calculateurs. C'est pourquoi une opération interrompue — une pause, un câble qui bouge, un ordinateur qui se met en veille — peut faire tout perdre.
Les services du flashage
Pour comprendre ce que fait votre outil pendant une écriture, voici les services qu'il enchaîne :
| Service | Rôle |
|---|---|
| 0x34 — RequestDownload | Annonce : je vais écrire, à telle adresse, telle taille |
| 0x36 — TransferData | Envoie les blocs de données, numérotés |
| 0x37 — RequestTransferExit | Fin du transfert |
| 0x31 — RoutineControl | Lance une routine : effacement mémoire, vérification |
| 0x11 — ECUReset | Redémarre le calculateur |
Et pour la lecture : 0x35 (RequestUpload), 0x23 (lecture par adresse), 0x22 (lecture d'un identifiant de données, comme le VIN ou une référence).
Ces numéros expliquent ce que vous voyez passer dans une trace, et permettent de situer précisément où une opération a échoué.
Voir aussi seed & key et J2534 et logiciels constructeurs.
Sur ANP Engineering — file service de reprogrammation moteur pour professionnels : file service ECU, correction de checksum, calculateurs pris en charge, tarifs.
