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 00Timestamp, 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.