Retour au blog
Ingénierie terrainFévrier 2026· 6 min

Décoder un fichier de log CAN : IDs, DLC et endianness Intel vs Motorola

Ouvrir un .log brut ne devrait pas nécessiter un doctorat en vaudou binaire. Voici comment fonctionne vraiment le décodage CAN — byte order, factor/offset, DLC — et où la plupart des gens se trompent.

Ouvrir un fichier de log CAN sans DBC, c'est lire une conversation dans une langue qu'on ne comprend pas — on voit les mots, pas le sens. L'ouvrir AVEC un DBC mais avec le mauvais byte order, c'est la lire à l'envers. Dans les deux cas, on obtient des ordures.

L'anatomie d'une trame CAN

Chaque trame CAN classique contient :

  • Arbitration ID : 11 bits (standard, 0–0x7FF) ou 29 bits (étendu, 0–0x1FFFFFFF). Les IDs étendus ont le bit IDE activé.
  • DLC : Data Length Code, 0 à 8 octets pour le CAN classique, 0 à 64 pour CAN FD (encodage non linéaire au-dessus de 8).
  • Data : les octets de payload
  • CRC, ACK, EOF : gérés par le hardware, sans impact sur le décodage

Dans un fichier log, on voit typiquement :

0.000100  1  0100  Rx  d  8  A0 12 00 FF 3C 00 00 00

Timestamp, canal, ID (0x100), direction, d=data frame, DLC=8, puis 8 octets de données.

Des octets bruts aux valeurs physiques

Chaque signal dans le DBC correspond à une plage de bits dans le champ data. Pour décoder :

  • Extraire la valeur entière brute des bits spécifiés
  • Appliquer : valeur_physique = valeur_brute × factor + offset
  • Vérifier par rapport au min/max (plage ingénierie, pas plage d'encodage)
  • Si une VAL_ existe, consulter l'énumération

Exemple : EngineSpeed (16 bits, factor 0.25, offset 0), valeur brute 0x1900 = 6400, valeur physique = 6400 × 0.25 = 1600 rpm.

Intel vs Motorola : la source de la majorité des confusions

C'est là que la plupart du temps de débogage est perdu. Les signaux DBC spécifient le byte order comme `@1` (Intel, little-endian) ou `@0` (Motorola, big-endian).

Byte order Intel (le plus courant dans le CAN moderne)

Le start bit est le bit de poids faible (LSB). Les bits du signal sont numérotés dans l'ordre mémoire : bit 0 est le LSB de l'octet 0, bit 7 est le MSB de l'octet 0, bit 8 est le LSB de l'octet 1.

Pour un signal Intel 16 bits commençant au bit 0 :

  • Octet 0 : bits 7-0 → octet de poids faible de la valeur
  • Octet 1 : bits 15-8 → octet de poids fort de la valeur

Byte order Motorola

Le start bit est le bit de poids fort (MSB). La numérotation des bits dans le layout va du MSB au LSB à travers les octets dans l'ordre réseau. La confusion vient de la convention DBC : pour les signaux Motorola, le champ 'start bit' fait référence à la position MSB dans un schéma de numérotation différent de celui des signaux Intel.

BusFileReader vous montre les deux

La vue Bit Layout de BusFileReader affiche les positions réelles de chaque signal dans une grille colorée — quel que soit le byte order. Vous voyez exactement quels bits appartiennent à quel signal, dans la bonne position visuelle. Pas de calcul mental.

Erreurs fréquentes

  • Mauvais byte order : le signal décode à une valeur absurde, généralement hors de la plage ingénierie
  • Start bit décalé d'un : les signaux adjacents se chevauchent ou laissent des gaps inexpliqués — visible immédiatement dans la vue bit layout
  • Non signé vs signé : un signal qui affiche 65535 alors qu'on attend -1 est un problème d'extension de signe — vérifier le flag `+`/`-` après le nombre de bits

Si les valeurs décodées semblent fausses, ouvrez le bit layout. Si l'affectation des bits semble fausse, vérifiez le byte order. Si le byte order semble correct mais la valeur est toujours incorrecte, vérifiez le factor et l'offset. Dans cet ordre.