Que se passe-t-il si deux segments d'ID de noeud sont identiques?
Les réseaux CAN-bus ne permettent pas en principe à deux nœuds d'avoir le même segment d'ID, mais que se passe-t-il si les deux segments d'ID de nœud sont identiques?
Avant l'expérience, nous devons avoir une compréhension claire de la structure des messages CAN et des principes de l'arbitrage.
Premièrement, la structure du message CAN
La norme réseau CAN-bus la plus utilisée est la version V2.0. Cette norme est divisée en parties A et B. Leur principale différence est la longueur du code d'identification dans la zone d'arbitrage. Parmi eux CAN2.0A (trame standard) est ID 11 bits, CAN2.0B (expand frame) est ID 29 bits. Le tableau 1 ci-dessous montre la structure du message CAN:
Tableau 1 Structure du message CAN
| Nom de la phase | Longueur de la phase / bit | La description | |
| SOF | 1 | signifie début de phase de données, et composent par un seul bit dominant | |
| Phase d'affiliation | Cadre standard | 12 | Indique la priorité de la trame, se compose de 11 adresses ID et 1 RTR |
| cadre étendu | 32 | Indique la priorité de la trame, se compose de 29 adresses ID, SRR 1 bit, IDE étendu et RTR | |
| Phase de contrôle | 6 | désigne le code de groupe et les bits réservés de la longueur de données du segment de données | |
| Phase de données | 0 ~ 8 | contenu des données, contrôler la phase de la longueur des données | |
| CRC | 16 | vérifier frame transimission erro, de SOF à phase de données, tout le contenu, sauf les bits de remplissage | |
| ACK | 2 | l'autre noeud confirme que cette trame a été correctement reçue | |
| Fin de trame | 7 | signifie la fin du cadre | |
Deuxièmement, le principe de l'arbitrage
L'arbitrage de bus CAN est basé sur "ligne et principe", comme le montre la figure 1. Lorsqu'un émetteur-récepteur émet des signaux de différents niveaux en même temps, le niveau récessif est toujours couvert par le niveau dominant. Pendant l'envoi du message, le contrôleur CAN surveille si l'état du bus est le même que celui envoyé par lui-même. Si l'incohérence se produit dans le segment d'ID, l'arbitrage se produira. Si cela se produit dans d'autres zones, l'erreur correspondante sera déclenchée.
Ce qui suit est le point clé. Que faire si les deux segments d'ID de noeud sont identiques? Nous avons commencé l'expérience avec deux cartes CAN et une carte CANScope. La carte CAN simule le nœud CAN standard pour envoyer et recevoir des messages, et CANScope effectue la surveillance de la communication, comme illustré à la Figure 2.
Fig.2 Construction de plate-forme expérimentale
Troisièmement, expérimenter un "Le segment ID est le même mais les données sont différentes"
Une carte CAN est utilisée pour envoyer une trame CAN avec des données ID 000H à 01020304050607H et une autre carte CAN pour envoyer une trame CAN avec des données 000H à 02020304050607H. Les données sur lesquelles CANScope écoute sont représentées sur la figure 3. On peut observer qu'il existe un grand nombre d'erreurs de remplissage de champs de données.

Fig.3 Remplissage du champ de données erro
Pourquoi cela est-il ainsi? Nous obtenons d'abord les formes d'onde correspondant aux deux messages de transmission de la carte CAN, comme le montre la figure 4. Comme le message à deux broches est une trame de données standard et chaque trame contient 8 octets de données, les formes d'onde correspondant aux deux trames sont exactement la même chose dans les segments ID, RTR, IDE, R0 et DLC. Par conséquent, le rôle de l'arbitrage est inefficace et les deux nœuds se considèrent comme prioritaires et continuent d'envoyer des données.
Maintenant, nous nous concentrons sur le segment de données, les données du premier octet sont les mêmes, sont 00H; les données du deuxième octet sont différentes, respectivement 01H, 02H. Les flèches sur la figure 5 indiquent que la logique des bits correspondants est 0 et 1 respectivement. Nous avons mentionné précédemment que le nœud CAN détectera si le niveau du bus est le même que celui qu'il a envoyé lors de l'envoi du message. Si l'incohérence se produit dans la zone de non-arbitrage, l'erreur correspondante est déclenchée, donc si les deux trames sont envoyées au bus en même temps. Des erreurs de bit doivent se produire. Du fait que l'erreur d'envoi de bits amènera le nœud à envoyer 6 bits dominants qui enfreignent la règle de remplissage (l'erreur active détruit les données de trame), l'erreur de remplissage du champ de données se produit, comme le montre la FIG. 3.

Fig.5 Conflits de champs de données
Quatrièmement, expérimenter deux "les mêmes données avec le même ID"
Dans le même temps, utilisez deux cartes CAN pour envoyer des trames CAN dont l'ID est 000H vers 01020304050607H, et CANScope effectue une surveillance des communications. Tout d'abord, nous ne vérifions pas l'option "réponse de bus" pour que CANScope fonctionne en mode écoute seule. Les résultats expérimentaux sont montrés sur la figure 6, et le délimiteur de réponse est dans le mauvais format.
Fig.6 Erreur de format du délimiteur de réponse
Pourquoi cela arrive-t-il? Le noeud qui envoie le message enverra deux bits récessifs dans le segment ACK. Si un niveau dominant est reçu pendant le premier bit, la trame est considérée comme correctement reçue. Comme les deux arbitres pensent avoir obtenu le droit d'arbitrage lorsqu'ils ont le même segment d'arbitrage, ils attendent une réponse dans le segment ACK, mais il n'y a que deux nœuds dans le réseau. Par conséquent, aucune réponse ne peut être reçue dans le segment ACK et une erreur de délimiteur de réponse se produit. Simplement parlant, cette situation est similaire au fait qu'un seul nœud du bus ne pourra pas envoyer de données. La figure 7 montre la comparaison de forme d'onde lorsqu'il n'y a pas de réponse dans le segment ACK.
Fig.7 Réponse ACK
Nous vérifions la réponse du bus et recommençons l'expérience (à ce moment, il y a 3 nœuds dans le bus). A ce moment, comme représenté sur la Fig. 8, les données de bus sont transmises et reçues normalement.
Fig.8 Démarrer BUS Répondre
Résumé: Lorsque deux nœuds envoient des paquets avec le même ID et les mêmes données en même temps, une erreur de remplissage du champ de données se produit. Lorsque deux nœuds envoient des paquets avec le même ID et les mêmes données, aucune erreur ne se produit si les autres nœuds répondent. D'autres nœuds ont répondu avec une erreur de réponse. Par conséquent, nous devrions éviter la même situation dans le segment d'identification lors de la conception du bus CAN.





