Salut,
Sur quelle distance ?
Parce que les bus SPI ou I2C, ou encore l'UART, ne sont absolument pas des bus de terrain, autrement dit ce sont des bus locaux qui sont sensés rester sur la carte électronique qui les gèrent. Ils n'ont aucun mécanisme d'immunité aux bruits ou à l'exposition aux perturbations environnantes. Un Bus SPI ou I2C dans un câble de 5m peut fonctionner parfaitement chez toi sur ton bureau et ne plus fonctionner dans ta cuisine.
Ce que tu décris c'est précisément le bus SPI.
Les Atmega ont 4 broches MOSI (Master Out, Slave In), MISO, (Master In, Slave Out), CLK (l'horloge qui synchronise les données de MOSI et MISO) et CS (Chip Seclect). La sortie CLK du maître va dans toutes les entrées CLK des esclaves. La sortie MOSI du maître va sur toutes les entrée MOSI des esclaves et toutes les sorties MISO des esclaves vont tous sur l'entrée MISO du maître. On pourrait penser qu'il y a un gros court circuit avec toutes ces sorties des esclaves qui vont vers l'entrée du maître mais non car c'est le maître qui décide avec qui il cause en activant la broche CS de l'esclave concerné. Les autres esclaves sont en quelques sortes déconnectés du bus même si ils y sont physiquement reliés (ils sont en haute impédance)
Il faut que le maître ait 7 broches dédiées aux CS pour choisir à tour de rôle les 7 esclaves avec qui discuter. Le I2C a une adresse par esclave alors que le SPI active une broche de l'esclave concerné. Le bus SPI est plus encombrant en câblage mais bien plus rapide que I2C. Avec le SPI tu auras le protocole a construire, il n'y a pas de mécanisme comme ACK d'I2C par exemple, ni de Read/Write.
ps 1 : suivant le constructeur ce n'est pas MOSI/MISO mais SDI/SDO ça dépend des fabricants de micro.
ps 2 : si les 7 Arduino sont distant et pire encore installés en milieu pollué (industrie), mieux vaut implémenter un MODBUS/JBUS avec des liaisons RS485 sur l'UART. Ça c'est du vrai bus de terrain.
Partager