Lire le bus CAN et le protocole de communication dans un seul article

Voiture bus CAN

 

Concept CAN

CAN est l'abréviation de Controller Area Network (CAN).Il a été développé par la société allemande BOSCH  , qui est célèbre pour la R&D et la production de produits électroniques automobiles , et est finalement devenu une norme internationale ( ISO11898 ).C'est la norme de série de l'ISO international standardisation protocole de communication . C'est l'un des bus de terrain les plus utilisés au monde. En Amérique du Nord et en Europe occidentale, le protocole de bus CAN est devenu le bus standard pour les systèmes de contrôle informatique automobile et les réseaux locaux de contrôle industriel embarqués, et dispose d'un protocole J1939 conçu pour les gros camions et les véhicules lourds avec CAN comme protocole sous-jacent . Ces dernières années, sa grande fiabilité et sa bonne capacité de détection d'erreurs ont été appréciées, et il est largement utilisé dans les systèmes de contrôle informatique automobiles et les environnements industriels avec des températures ambiantes difficiles, un fort rayonnement électromagnétique et de fortes vibrations.

Les deux normes internationales ISO du CAN :

1) ISO11898  : définit  une norme de communication CAN haut débit avec un débit de communication de 125 kbps à 1 Mbps, il appartient à un bus en boucle fermée avec un débit de transmission jusqu'à 1 Mbps et une longueur de bus ≤ 40 mètres .

2) ISO11519 : définit une norme de communication CAN à faible vitesse  avec un débit de communication de 10-125 kbps , qui appartient à un bus en boucle ouverte. Lorsque le débit de transmission est de 40 kbps, la longueur du bus peut atteindre 1 000 mètres.

Type PEUT

1) CAN haut débit :

A. Fournir un débit en bauds de 5Kbit/s à 1Mbit/s selon la longueur du câble.

b. Le réseau CAN haut débit se termine par une résistance de 120 ohms à chaque extrémité du réseau.

C. Le niveau silencieux est de 2,5 V et les limites supérieure et inférieure sont de 3,5 V et 1,5 V.

2) CAN tolérant aux pannes :

A. Fournir un débit en bauds de 5Kbit/s à 125Kbits/s.

b. Lorsqu'il est dominant, il est de 1 V et 4 V.

3) CAN monofilaire :

A. Fournir un débit en bauds de 5Kbit/s à 125Kbits/s.

B. Le débit en bauds du CAN monofilaire est généralement de 33,3 KHz.

Réseau CAN automobile

 

Réseau CAN automobile

Bus CAN automobile

 

Composition de la CAN

Une trame du bus CAN est principalement composée d' informations de trame , d'ID de trame et de données de trame .

1) Informations sur la trame : divisées en quatre catégories, trame de données standard (véhicule à essence, moteur), trame à distance standard (rare), trame de données étendue (la plupart des véhicules diesel, certains véhicules à essence), trame à distance étendue (rare).

2) Frame ID : C'est une sorte "d'adresse" de CAN. Une caractéristique de CAN est le mécanisme de concurrence Plus l'ID de trame est petit, plus il a le droit d'occuper les ressources du bus et plus il enverra de priorité.

        


ID CAN

Fichier DBC : Dans l'industrie automobile, si une interprétation standard est faite pour chaque ID de trame et chaque donnée de trame sur le bus CAN du véhicule, le fichier formé est un fichier DBC.

3) Données de trame : par rapport au port série, les données de trame de CAN n'ont que 8 octets, c'est-à-dire 64 bits , et il n'y en aura pas plus. Mais CAN FD résout le problème de seulement 8 octets en tant que nouveau bus.

4) Résistance de borne : CAN est identique à RS485. Il est nécessaire de réduire la réflexion du signal différentiel au niveau de la borne. Si la résistance n'est pas ajoutée aux deux bornes, le signal rebondira et affectera la communication. Il doit y avoir deux résistances terminales sur le bus CAN, avec une valeur de résistance de 120 ohms, connectées en parallèle, et une du côté terminal le plus éloigné. S'il y a plusieurs nœuds, la résistance terminale doit être augmentée de manière appropriée.

5) Débit en bauds : les débits en bauds courants des véhicules sont de 500 K, 250 K, 125 K, 100 K.

Norme de bus CAN

Norme ISO

 

La norme CAN est divisée en deux catégories : la norme de couche inférieure (couche physique et couche de liaison de données) et la norme de couche supérieure (couche application).

  • ISO 11898-1 – Protocole CAN
  • ISO 11898-2 – Couche physique CAN haute vitesse
  • ISO 11898-3 – Couche physique tolérante aux pannes CAN basse vitesse
  • ISO 11898-4 – CAN temporisé
  • ISO 11898-5 - "Unité d'accès multimédia à grande vitesse en mode basse consommation" - actuellement en projet
  • ISO 11519-2 - Obsolète, remplacée par 11898-3.
  • ISO 14230 - "Keyword Protocol 2000" - définit les parties des diagnostics de ligne série non CAN.
  • ISO 15765 - la norme définissant les diagnostics sur le bus CAN - est essentiellement le Keyword Protocol 2000 sur le bus CAN.
  • J1939 - Le protocole de haut niveau basé sur CAN le plus largement utilisé pour les camions et les bus, défini par SAE. J1939 est divisé en plusieurs parties, décrivant la couche physique, la couche liaison de données, la gestion du réseau et un grand nombre de messages prédéfinis.
  • ISO 11783 - similaire à J1939, mais pour le secteur agricole (comme les tracteurs)
  • ISO 11992 – définit l'interface entre les camions et les remorques
  • NMEA 2000 – Protocole basé sur J1939 utilisé dans le secteur maritime. Défini par le comité NMEA.

Si vous ne spécifiez pas de quelle norme vous parlez, la valeur par défaut est généralement le protocole de couche liaison de données défini par ISO 11898-1 et la couche physique définie par ISO 11898-2.

Norme sous-jacente :

Les normes sous-jacentes de CAN sont fondamentalement les mêmes, couvrant la couche physique et la couche de liaison de données dans le modèle OSI, et la relation correspondante avec le modèle ISO/OSI est illustrée dans la figure suivante :

Correspondance

 

  • ISO 11898-1 : protocole de couche liaison de données, décrit l'architecture de base du bus CAN et définit les méthodes de communication des différents dispositifs de bus CAN au niveau de la couche liaison de données
  • ISO 11898-2 : protocole de couche physique de bus CAN haute vitesse, le débit de transmission de données maximal est de 1 Mbps et l'application est un signal équilibré à deux fils (CAN_H, CAN_L)
  • ISO 11898-3 : Définit la norme de couche physique du bus CAN à faible vitesse (LS-CAN, Fault-Tolerant CAN), avec un taux de transmission de données de 5 Kbps ~ 125 Kbps. La tolérance aux pannes signifie que lorsqu'un signal de transmission sur le bus échoue, il peut également communiquer en s'appuyant sur un autre signal unique
  • ISO 11898-4 : définit le mécanisme déclenché par le temps (Time-Triggered CAN, TTCAN) dans le bus CAN, définit l'entité de synchronisation de trame qui coopère avec l'ISO 11898-1 et réalise la méthode de communication déclenchée par le temps entre les calculateurs automobiles.

Norme supérieure :

Différents domaines d'application ou fabricants ont des pratiques différentes, et il n'existe pas de norme internationale uniforme

Comparaison des protocoles de couche supérieure

 

Types de trames CAN (quatre types de trames)

1) Trame de données

Trame utilisée par une unité émettrice pour transmettre des données à une unité réceptrice.

Le diagramme de structure de trame de la trame de données :

Trame de données

 

SOF : indique le début de la trame de données ; (1 bit), un front de bit dominant est envoyé et le nœud de réseau commence à se synchroniser

ID : 11 bits au format standard, 29 bits au format étendu, y compris Base ID (11 bits) et Extended IDr (18 bits), cette section identifie la priorité de la trame de données, plus la valeur est petite, plus la priorité est élevée ;

RTR : bit de demande de télétransmission, 0 signifie trame de données, 1 signifie trame distante, c'est-à-dire que lorsque RTR=1, le champ de données de la trame de message est vide ; (1 bit)

IDE : (1 bit) bit d'extension d'identifiant, 0 indique le format standard, 1 indique le format étendu ; la trame étendue et le format de trame standard sont différents et ne peuvent pas exister dans le même réseau can

DLC : code de longueur de données, 0-8 signifie que la longueur des données est de 0 à 8 octets ; (4 bits)

Champ de données : champ de données ; (0 à 8 octets)

CRC (15 bits):

  • Vérifier le champ, encoder toutes les données de sof au champ de données
  • Rempli par l'expéditeur
  • Vérifier l'algorithme G(x) = x15 + x14 + x10 + x8 + x7 + x4 + x3 + 1 ; (15 bits)

DEL : le délimiteur implicite du champ de contrôle et du champ de réponse ; (1 bit)

ACK:(1 bit)

  • Champ de réponse, pour confirmer si les données sont reçues normalement. La réception dite normale signifie qu'elle ne contient pas d'erreurs de remplissage, d'erreurs de format et d'erreurs CRC.
  • Le nœud émetteur met ce bit à 1, et le récepteur le confirme, et donne un bit dominant 0 lors de la réception du message
  • Si un nœud ne confirme pas la réception du message, l'expéditeur signalera une erreur s'il surveille ce bit comme un bit invisible

SRR : le bit de demande distante de remplacement, utilisé dans le format étendu, doit être 1 ; (1 bit)

EOF : 7 bits récessifs consécutifs (1) indiquent la fin de la trame ; (7 bits)

ITM(3 bits):

  • L'espace intertrame, Intermission (ITM), également connu sous le nom d'espace intertrame (IFS), a 3 bits récessifs consécutifs, mais il n'appartient pas à la trame de données.
  • L'espace intertrame est une trame utilisée pour séparer les trames de données et les trames distantes des trames précédentes. Les trames de données et les trames distantes peuvent séparer cette trame de toute trame précédente (trame de données, trame distante, trame d'erreur, trame de surcharge) en insérant un espace intertrame. L'espace intertrame ne peut pas être inséré avant les trames de surcharge et les trames d'erreur.

2) Châssis distant

Trame utilisée par une unité réceptrice pour demander des données à une unité émettrice avec le même identifiant.

La structure de trame de la trame distante est similaire à celle de la trame de données, la différence est :

  • 1. La valeur RTR de la trame de données est "0" et la valeur RTR de la trame distante est "1".
  • 2. Il n'y a pas de bloc de données dans la trame distante.
  • 3. Le bloc DLC de la trame distante indique la longueur des données envoyées par l'unité émettrice de requête.

schéma de format

cadre à distance

 

Lorsque la trame de données et la trame distante avec le même identifiant sur le bus sont envoyées en même temps, parce que le bit RTR de la trame de données est dominant, la trame de données gagnera le droit de contrôle du bus dans l'arbitrage.

3) Trame d'erreur

Trame utilisée pour informer les autres unités d'une erreur lorsqu'une erreur est détectée.

La structure de trame d'une trame d'erreur se compose d'un indicateur d'erreur et d'un délimiteur d'erreur.

Indicateur d'erreur : 6 bits,

indicateur d'erreur

 

Délimiteur d'erreur : composé de bits récessifs de 8 bits.

4) Châssis de surcharge

L'unité réceptrice informe l'unité émettrice qu'elle n'a pas encore terminé les préparatifs de réception.

Deux cas d'envoi de trames en surcharge :

1. L'état de l'unité réceptrice exige que le nœud émetteur retarde la transmission de la prochaine trame de données ou trame distante.

2. Un bit dominant est détecté dans les 3 bits de l'Intermission.

Chaque nœud peut envoyer au plus deux trames de surcharge en continu, et la trame de surcharge est composée d'un indicateur de surcharge et d'un délimiteur de surcharge (8 bits récessifs).

cadre de surcharge

 

Comparaison des trames de données et des trames distantes :

Comparer

 

Arbitrage bus CAN

Priorité d'arbitrage : plus la valeur de l'identifiant est petite, plus la priorité du message est élevée

Ligne et logique : Uniquement lorsque les nœuds d'envoi sont tous récessifs , le niveau de bus est récessif

Lors de l'envoi de données, tous les nœuds émetteurs détectent également l'état du niveau sur le bus et comparent le niveau sur le bus avec le niveau envoyé par lui-même bit par bit.

  • 1) Lorsque 0 est envoyé, 1 apparaît : une erreur est signalée.
  • 2) Envoyer 0 et apparaître 0 : continuer.
  • 3) Envoyer 1 et apparaître 1 : Continuer.
  • 4) Envoi 1 et apparition 0 : la compétition échoue, et il devient receveur.

envoyer l'auto-test

 

Comme le montre la figure ci-dessous, le nœud C qui a échoué la compétition essaiera automatiquement d'envoyer à nouveau la première fois qu'il détectera que le bus est inactif.

Les nœuds CAN A et C envoient des trames de données en même temps, le bus CAN est arbitré en fonction de la priorité et C perd de la puissance

 

Accès conditionnel CAN

Les messages sur le bus CAN sont diffusés Les nœuds peuvent déterminer s'ils doivent recevoir le message en définissant le code de filtre (Filter Code) et le masque (Mask Code) dans le contrôleur, puis en vérifiant l'identifiant du message sur le bus. , "1" indique que ce bit est lié à ce nœud, et "0" indique que ce bit n'est pas lié à ce nœud.

Flux de données CAN-BUS

 

STM32 peut filtrer le code

 

peu de farce

Le bus CAN adopte le codage NRZ, sans ligne d'horloge séparée, qui présente l'avantage d'un rendement élevé, mais il n'est pas facile de distinguer où le bit commence et où le bit se termine. Par conséquent, afin d'assurer des sauts de niveau suffisants pendant la communication synchrone, un mécanisme de remplissage de bits , c'est-à-dire qu'un niveau d'inversion est inséré tous les 5 niveaux identiques consécutifs , et le nœud récepteur reçoit automatiquement le message après avoir reçu le message. Supprimer le rembourrage.

Tableau de comparaison du bourrage de bits DataFrame

 

Sauf pour le délimiteur CRC, le champ ACK et EOF dans la trame, le mécanisme de bourrage de bits est appliqué au reste de la trame. Dans le champ où le bourrage de bits est appliqué, la détection de 6 bits dominants ou bits récessifs consécutifs est considérée comme un rapport d'erreur.

Vérification des erreurs CAN

Erreur CRC

1) Lors de l'envoi d'un message, le nœud expéditeur calculera la valeur de la somme de contrôle du bit SOF de la trame de données au dernier bit du champ de données selon un polynôme spécifique, et mettra la valeur dans le champ CRC de la trame de données, et diffuser la trame de données au bus supérieur.

2) Après avoir reçu les données, le nœud récepteur applique le même polynôme pour calculer la valeur de la somme de contrôle et la compare à la valeur de la somme de contrôle reçue. Si les deux sont cohérents, il sera reçu normalement ; sinon, le message sera rejeté et une trame d'erreur sera envoyée pour demander au nœud expéditeur de retransmettre le message.

Erreur de réponse (erreur ACK)

Le récepteur donnera un niveau dominant dans le bit de réponse ack après avoir reçu le message, et si l'expéditeur détecte que le bit est récessif, il signalera une erreur.

Erreur de format (Erreur de formulaire)

Erreurs détectées lorsque le format opposé au champ de bits de format fixe est détecté, comme la détection si un bit dominant apparaît dans le délimiteur CRC et le délimiteur ack et la zone eof.

Erreur binaire

Comparez le niveau de sortie avec le niveau du bus (hors bits de bourrage) et détectez l'erreur lorsque les deux niveaux sont différents. Si un bit dominant est envoyé, mais que le bus est un bit récessif, une erreur sera signalée.

Erreur de truc

Une erreur détectée lorsque 6 bits de même niveau sont détectés consécutivement dans un segment nécessitant un bourrage de bits.

Mécanisme de détection d'erreur du bus CAN

Chaque contrôleur de nœud sur le bus CAN détectera si le message est erroné . Si le nœud constate que le message est erroné, il enverra un drapeau d'erreur, interrompant ainsi la transmission normale des données sur le bus. D'autres nœuds sur le bus qui n'ont pas trouvé l'erreur dans le message d'origine prendront les mesures nécessaires après avoir reçu le drapeau d'erreur, telles que la suppression du message actuel sur le bus.

Il y a deux compteurs d'état d'erreur à l'intérieur du nœud CAN :

  • 1) TEC/Transmit Error Counter, envoi du compteur d'état d'erreur, une fois qu'une erreur se produit, la valeur du compteur +8
  • 2) Compteur d'erreurs REC/Receive, réception du compteur d'état d'erreur, une fois qu'une erreur se produit, la valeur du compteur +1
  • 3) Si le message est envoyé ou reçu avec succès une fois, la valeur TEC ou REC correspondante sera -1

                                                        nombre d'erreurs

La spécification CAN définit 3 états d'erreur pour les nœuds :

  • 1) Erreur active : état normal, dans cet état, le nœud peut envoyer tous les types de trames, y compris les trames d'erreur ; il signalera activement l'erreur après avoir trouvé l'erreur.
  • 2) Erreur passive : le nœud peut envoyer toutes les trames à l'exception de la trame d'erreur ; il entrera dans cet état lorsque le nombre TEC ou REC dépassera 127 ; à ce moment, le nœud n'enverra que 6 bits récessifs après avoir trouvé l'erreur, et ne le fera pas. diffuser l'erreur. Et, lors de l'envoi de trames continues, il doit y avoir un délai de 8 bits entre elles.
  • 3) Le bus est éteint : le nœud est isolé du bus par le contrôleur ; ou le TEC est supérieur à 255, il entrera dans cet état et devra être redémarré, ou attendre 128 niveaux de bits récessifs de 11 bits.

Mécanisme de détection d'erreur du bus CAN

 

Introduction au protocole de bus CAN.pdf

Code source et data.rar du bus CAN C

Code source et données du bus CAN C, programme source de démarrage synchrone du moteur du bus de l'analyseur

Manuel d'application du protocole de bus CAN.pdf

Manuel d'application du protocole de bus CAN

can-utils.zip

Outils CAN, y compris les outils de base pour l'affichage, l'enregistrement, la génération et la relecture du trafic CAN, la configuration de la passerelle principale CAN, la mesure et le test du bus CAN, les outils ISO -TP, le convertisseur de fichier journal, la configuration de la spécification de la ligne série, le générateur de projet CMake, etc. code source

CAN Bus Shield - MCP2515&MCP2551.zip

Peut  bus le code source du protocole et le code de cas d'application basé sur arduino

Je suppose que tu aimes

Origine blog.csdn.net/xipengbozai/article/details/131352010
conseillé
Classement