L'arbitrage CAN : qu'est-ce que c'est et comment ça marche ?
L'arbitrage CAN résout les conflits d'accès au bus par une comparaison bit à bit : le message dont l'identifiant est le plus faible reste seul sur le bus, ce qui donne une communication efficace et sans perte.
Un accès au bus décentralisé
Sur un réseau CAN, l'accès au bus est totalement décentralisé : chaque participant décide seul. Comme les demandes d'émission des processus applicatifs répartis sur le réseau sont généralement asynchrones, plusieurs participants peuvent commencer à émettre en même temps. En règle générale, un participant ne peut occuper le bus que si celui-ci était libre auparavant.
Lorsque plusieurs participants démarrent simultanément, une phase de sélection — la phase d'arbitrage — détermine lequel restera sur le bus. Le conflit est résolu en comparant bit à bit les champs d'arbitrage des messages. Ce champ se compose de l'identifiant du message et du bit RTR, qui distingue une trame de données d'une trame de requête.
Au format standard, l'identifiant compte 11 bits ; au format étendu, 29 bits. Le bit de poids fort est transmis en premier.
Niveaux dominant et récessif
L'arbitrage bit à bit repose sur la distinction entre deux niveaux physiques : un niveau dominant (imposant) et un niveau récessif (cédant). Ces rapports de niveau se représentent facilement, par exemple par une commande à collecteur ouvert, c'est-à-dire un montage « ET câblé ».
Dans cet exemple, le bus n'est au niveau haut (5 V) que si aucun participant ne tire la ligne au niveau bas. Le niveau haut correspond donc au niveau récessif, le niveau bas au niveau dominant. Ces rapports peuvent également être représentés sur un support optique : l'état « sombre » figure alors le niveau récessif et l'état « clair » le niveau dominant.
Tant que le bus est libre, il reste au niveau récessif. Le participant qui l'occupe le signale en imposant un bit dominant, le start of frame (SOF).
Le déroulement de l'arbitrage
Pendant la phase d'arbitrage, chaque participant émetteur compare le niveau qu'il applique au niveau réellement présent sur le bus. Tout participant qui a émis un bit récessif et observe un bit dominant abandonne immédiatement sa tentative et devient consommateur du message émis par un autre. Dès lors qu'un identifiant n'est attribué qu'à un seul message et qu'un zéro logique correspond à un niveau dominant, seul le participant dont le message porte l'identifiant de plus faible valeur reste sur le bus à l'issue de l'arbitrage. La priorité d'un message est donc d'autant plus élevée que la valeur de son identifiant est faible.
L'arbitrage bit à bit fondé sur l'identifiant garantit ainsi qu'en cas d'occupation simultanée, un seul participant reste sur le bus. Le message qu'il émet n'est pas détruit : l'arbitrage est sans perte.
Si le transfert d'un message donné est déclenché en même temps par un producteur sous forme de trame de données et par un consommateur sous forme de trame de requête, le conflit ne peut pas être tranché par le seul identifiant. C'est alors le bit RTR, qui suit l'identifiant, qui décide du droit d'accès.
Une conséquence sur la taille du réseau
Le principe de l'arbitrage bit à bit suppose qu'un participant compare la valeur du bit qu'il applique à celle réellement présente sur le bus. Pour déterminer l'instant d'échantillonnage le plus précoce possible après l'émission d'un bit, il faut tenir compte des temps de propagation maximaux entre participants et des retards internes. L'arbitrage limite donc l'extension maximale du réseau pour un débit donné — c'est l'objet de notre article sur le débit CAN et la longueur de ligne.