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 :
Après bit stuffing :
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) :
Décodage pas à pas
Étape 1 : SOF
* Valeur : 0 (dominant) * Signification : Début de trameÉtape 2 : Identifiant
* Valeur binaire : 0x093 * Valeur décimale : 147 * Priorité : Moyenne (plus le nombre est petit, plus prioritaire)Étape 3 : RTR
* Valeur : 0 (dominant) * Signification : Trame de données (pas une requête)Étape 4 : IDE
* Valeur : 0 (dominant) * Signification : Format standard (11 bits d'ID)Étape 5 : r0
* Valeur : 0 (réservé)Étape 6 : DLC
* Valeur binaire : 4 * Signification : 4 octets de donnéesÉtape 7 : Données
* Octet 0 : 0xCC (204) * Octet 1 : 0xAA (170) * Octet 2 : 0xF0 (240) * Octet 3 : 0x0F (15)Étape 8 : CRC
* Fonction : Vérification d'intégrité * Délimiteur : 1 (récessif)Étape 9 : ACK
* Bit ACK : 1 envoyé par émetteur, écrasé en 0 par récepteurs * Délimiteur : 0 (récessif)Étape 10 : EOF
* Valeur : 7 bits récessifs * Signification : Fin de trameRé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
- Tous les nœuds peuvent émettre simultanément
- Pendant l'émission de l'identifiant, chaque nœud compare ce qu'il émet avec ce qu'il lit sur le bus
- 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
- 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
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