On a échangé un peu sur le bus I2C par rapport au bus Can. Voici un petit développement sur ce sujet :
il y a des discussions sur la comparaison entre ces bus
ici et
ici, et des discussions sur le
Bus Can et aussi
la rétrosignalisation. et il y en a quantité de cas concrets en passant par la case "recherche".
Il y a aussi les articles de Jean-Luc sur la
mise en oeuvre du bus Can, et, plus moderne :
la bibliothèque ACAN.
Coté matériel, les UNO, Nano, Micro, Mega ont besoin d'une carte CAN qui s'interface en SPI alors que les DUE et ESP32 n'ont besoin que d'un amplificateur de ligne (donc comme l'I2C aussi).
Coté utilisation, le Can est bien adapté au modélisme ferroviaire :
- Insensible aux parasites (2 fils, différentiel), 100 m à 500kb/s, ou 500 m à 125 kb/s
- Messages de taille limitée. 8 octets de données au plus.
- Temps-réel. Les temps de transmission sont déterministes et peuvent être calculés à priori.
- Multi-maître asynchrone. pas d’arbitre centralisé, pas d’horloge globale, une station peut émettre quand elle veut et l’émission a lieu dès que le bus est libre.
- Priorité entre les messages. Les collisions, quand plusieurs contrôleurs CAN émettent sur le bus simultanément, sont résolues sans destruction du message le plus prioritaire.
Fiable :
- Une détection d’erreur est incluse. La probabilité qu’une erreur reste non détectée est inférieure à 4,7 10-11.
- Le protocole définit une surveillance très stricte du bus.
- La cohérence des données est garantie. Un message est soit accepté par tous les contrôleurs CAN du réseau, soit rejeté par tous.
- Acquittement des messages par toutes les stations, le signalement d’erreur émis par une station est reçu par toutes les stations.
- Retransmission automatique des messages après signalement d’erreur.
- Un contrôleur CAN gère de façon autonome les erreurs temporaires qu’il détecte.
Peu coûteux :
- Les contrôleurs CAN sont soit disponibles en tant que composant destiné à être connecté à un micro-contrôleur, soit intégrés directement dans un micro-contrôleur.
- La quantité de logiciel nécessaire pour le faire fonctionner est très succincte.
- la mise en oeuvre avec l'Arduino IDE est simple car toute la complexité est dans le contrôleur Can (voir les articles).
- Les composants CAN sont fabriqués en grand nombre, donc peu chers.
Personnellement mon premier réseau était architecturé autour d'un bus I2C, mais il faut bien étudier l'ordonnancement des échanges entre maitre et esclaves, ce qui n'est pas toujours évident.
Dans mon réseau actuel, chaque capteur émet un message dès qu'il y a un événement (ou périodiquement si c'est un état). Chaque message identifie le type de message et les données contiennent les détails. Le gestionnaire recoit tous les messages au fur et à mesure, n'a pas à les demander, ni interroger les capteurs. Un simple "switch" permet de les traiter individuellement.
Cela permet une grande modularité qui m'a permis de construire les éléments de mon réseau à mon rythme.. et il en reste encore à faire !
Pour revenir à l'I2C il faut reconnaitre que le livre de Pascal Barlier donne une foule de détails de mise en oeuvre du bus I2C qui devraient permettre a tous ceux qui l'utilisent de trouver leur bonheur.