Skip to content

Bus CAN 2.0

Présentation

Caractéristiques générales

  • CAN : Controller Area Network
  • Norme : ISO 11898
  • Type : Bus série différentiel multi-maîtres
  • Topologie : Bus linéaire avec terminaisons 120Ω
  • Arbitrage : Non destructif par priorité (CSMA/CA)
  • Débit : 125 kbit/s à 1 Mbit/s (CAN 2.0)

Avantages

  • Robustesse aux perturbations électromagnétiques
  • Détection et signalisation d'erreurs
  • Pas d'adressage des nœuds (communication par identifiant de message)
  • Arbitrage déterministe sans collision

Couche physique

Signaux différentiels

  • CAN_H : Signal haut
  • CAN_L : Signal bas
  • Tension différentielle : \(V_{diff} = V_{CAN\_H} - V_{CAN\_L}\)

États logiques

  • Dominant (0) : \(V_{diff} \approx 2V\) (CAN_H = 3,5V, CAN_L = 1,5V)
  • Récessif (1) : \(V_{diff} \approx 0V\) (CAN_H = CAN_L = 2,5V)

Règle d'arbitrage : Le bit dominant (0) écrase le bit récessif (1)

Débit et longueur de câble

Débit Longueur max
1 Mbit/s 40 m
500 kbit/s 100 m
250 kbit/s 250 m
125 kbit/s 500 m
50 kbit/s 1000 m

Structure d'une trame CAN 2.0

Trame standard (11 bits d'identifiant)

SOF | Identifiant | RTR | IDE | r0 | DLC | Données | CRC | ACK | EOF
 1  |     11      |  1  |  1  |  1 |  4  |  0-64   | 16  |  2  |  7

Détail des champs

1. SOF (Start Of Frame)

  • Taille : 1 bit dominant (0)
  • Fonction : Synchronisation du début de trame

2. Identifiant

  • Standard : 11 bits (CAN 2.0A) → 2048 identifiants
  • Étendu : 29 bits (CAN 2.0B) → 536 millions d'identifiants
  • Priorité : Plus l'identifiant est faible, plus la priorité est haute
  • Exemple : ID = 0x123 (prioritaire) vs ID = 0x456

3. RTR (Remote Transmission Request)

  • Taille : 1 bit
  • Dominant (0) : Trame de données
  • Récessif (1) : Trame de requête (demande de données)

4. IDE (Identifier Extension)

  • Taille : 1 bit
  • Dominant (0) : Format standard (11 bits)
  • Récessif (1) : Format étendu (29 bits)

5. r0 (Réservé)

  • Taille : 1 bit dominant (0)
  • Fonction : Réservé pour usage futur

6. DLC (Data Length Code)

  • Taille : 4 bits
  • Fonction : Nombre d'octets de données (0 à 8)
  • Codage : Valeur binaire directe

7. Données

  • Taille : 0 à 8 octets (64 bits max)
  • Format : MSB en premier

8. CRC (Cyclic Redundancy Check)

  • Taille : 15 bits + 1 bit délimiteur récessif
  • Fonction : Détection d'erreurs
  • Polynôme : \(x^{15} + x^{14} + x^{10} + x^8 + x^7 + x^4 + x^3 + 1\)

9. ACK (Acknowledgement)

  • Taille : 2 bits (1 bit ACK + 1 bit délimiteur)
  • Émetteur : Envoie bit récessif (1)
  • Récepteurs : Écrasent avec bit dominant (0) si trame correcte

10. EOF (End Of Frame)

  • Taille : 7 bits récessifs (1)
  • Fonction : Fin de trame

Bit Stuffing

Principe

Pour garantir la synchronisation, après 5 bits consécutifs identiques, un bit de valeur opposée est automatiquement inséré.

Règles

  • Champ concerné : SOF → CRC (inclus)
  • Insertion automatique : Par l'émetteur
  • Suppression automatique : Par les récepteurs
  • Non compté : Dans le calcul de longueur de trame

Exemple

Données originales :

1 1 1 1 1 0 0 0 0 0 1

Après bit stuffing :

1 1 1 1 1 [0] 0 0 0 0 0 [1] 1
          ↑             ↑
      bit stuffé    bit stuffé

Explication : * Après 5 bits à 1 → insertion d'un 0 * Après 5 bits à 0 → insertion d'un 1

Détection d'erreur

Si un récepteur détecte 6 bits consécutifs identiques dans la zone de bit stuffing → Erreur de stuffing

Décodage d'une trame type

Exemple : Trame standard avec 4 octets de données

Trame brute (sans bit stuffing) :

0 | 00010010011 | 0 | 0 | 0 | 0100 | 11001100 10101010 11110000 00001111 | CRC(15) | 1 0 | 1111111

Décodage pas à pas

Étape 1 : SOF

0
* Valeur : 0 (dominant) * Signification : Début de trame

Étape 2 : Identifiant

00010010011
* Valeur binaire : 0x093 * Valeur décimale : 147 * Priorité : Moyenne (plus le nombre est petit, plus prioritaire)

Étape 3 : RTR

0
* Valeur : 0 (dominant) * Signification : Trame de données (pas une requête)

Étape 4 : IDE

0
* Valeur : 0 (dominant) * Signification : Format standard (11 bits d'ID)

Étape 5 : r0

0
* Valeur : 0 (réservé)

Étape 6 : DLC

0100
* Valeur binaire : 4 * Signification : 4 octets de données

Étape 7 : Données

11001100 10101010 11110000 00001111
* Octet 0 : 0xCC (204) * Octet 1 : 0xAA (170) * Octet 2 : 0xF0 (240) * Octet 3 : 0x0F (15)

Étape 8 : CRC

CRC(15 bits) + délimiteur(1)
* Fonction : Vérification d'intégrité * Délimiteur : 1 (récessif)

Étape 9 : ACK

1 0
* Bit ACK : 1 envoyé par émetteur, écrasé en 0 par récepteurs * Délimiteur : 0 (récessif)

Étape 10 : EOF

1111111
* Valeur : 7 bits récessifs * Signification : Fin de trame

Résumé de la trame décodée

  • ID : 0x093 (147)
  • Type : Données (RTR=0)
  • Format : Standard (IDE=0)
  • Longueur : 4 octets
  • Données : [0xCC, 0xAA, 0xF0, 0x0F]

Arbitrage

Principe CSMA/CA

  • CSMA : Carrier Sense Multiple Access
  • CA : Collision Avoidance (évitement de collision)

Mécanisme

  1. Tous les nœuds peuvent émettre simultanément
  2. Pendant l'émission de l'identifiant, chaque nœud compare ce qu'il émet avec ce qu'il lit sur le bus
  3. Si un nœud émet un bit récessif (1) mais lit un bit dominant (0) → il perd l'arbitrage et arrête d'émettre
  4. Le nœud avec l'ID le plus faible gagne l'arbitrage

Exemple d'arbitrage

Nœud A émet ID = 0x100 (0001 0000 0000) Nœud B émet ID = 0x101 (0001 0000 0001)

Bit:  0  0  0  1  0  0  0  0  0  0  0
A:    0  0  0  1  0  0  0  0  0  0  0
B:    0  0  0  1  0  0  0  0  0  0  1
Bus:  0  0  0  1  0  0  0  0  0  0  0
                        B perd l'arbitrage (émet 1, lit 0)

Résultat : Nœud A gagne (ID plus faible = priorité plus haute)

Détection d'erreurs

Types d'erreurs détectées

1. Erreur de bit

  • Un nœud émet un bit mais lit une valeur différente sur le bus
  • Exception : Pendant l'arbitrage et le champ ACK

2. Erreur de stuffing

  • Détection de 6 bits consécutifs identiques dans la zone de bit stuffing

3. Erreur de CRC

  • Le CRC calculé ne correspond pas au CRC reçu

4. Erreur de format

  • Violation du format de trame (ex: EOF incorrect)

5. Erreur d'acquittement

  • Aucun nœud n'a acquitté la trame (bit ACK reste récessif)

Gestion des erreurs

  • Détection : Signalisation par trame d'erreur (6 bits dominants consécutifs)
  • Retransmission : Automatique de la trame erronée
  • Compteurs d'erreurs : Chaque nœud maintient des compteurs (TEC/REC)
  • États : Error Active → Error Passive → Bus Off

CAN 2.0 vs CAN FD

Tableau comparatif

Caractéristique CAN 2.0 CAN FD
Débit nominal 1 Mbit/s max 1 Mbit/s (phase arbitrage)
Débit données 1 Mbit/s max Jusqu'à 8 Mbit/s
Longueur données 8 octets max 64 octets max
Bit stuffing Toute la trame Uniquement phase arbitrage
CRC 15 bits 17 ou 21 bits (selon DLC)
Compatibilité - Rétrocompatible avec CAN 2.0
Bit rate switch Non Oui (BRS)

Différences principales

1. Débit variable (CAN FD)

  • Phase d'arbitrage : Débit lent (compatibilité CAN 2.0)
  • Phase de données : Débit rapide (jusqu'à 8 Mbit/s)
  • Bit BRS : Active le changement de débit

2. Longueur de données (CAN FD)

  • DLC : Codage étendu pour 12, 16, 20, 24, 32, 48, 64 octets
  • Efficacité : Moins de trames pour transmettre beaucoup de données

3. CRC amélioré (CAN FD)

  • CRC-17 : Pour DLC ≤ 16 octets
  • CRC-21 : Pour DLC > 16 octets
  • Meilleure détection : Distance de Hamming améliorée

4. Bit stuffing (CAN FD)

  • Arbitrage : Bit stuffing classique
  • Données : Bit stuffing fixe (compteur)
  • Avantage : Longueur de trame plus prévisible

Structure trame CAN FD

SOF | ID | r1 | IDE | EDL | r0 | BRS | ESI | DLC | Données | CRC | ACK | EOF

Nouveaux bits : * EDL : Extended Data Length (1 = CAN FD) * BRS : Bit Rate Switch (1 = débit rapide pour données) * ESI : Error State Indicator

Applications typiques

Automobile

  • Réseau carrosserie : 125 kbit/s (confort, éclairage)
  • Réseau moteur : 500 kbit/s (injection, ABS)
  • Réseau multiplexé : 1 Mbit/s (temps réel critique)

Industrie

  • Automatismes : CANopen
  • Machines : DeviceNet
  • Contrôle-commande : 250-500 kbit/s

Autres

  • Aéronautique : Systèmes embarqués
  • Maritime : NMEA 2000
  • Médical : Équipements de diagnostic