Esiste una regola per determinare chi sarà [I 2 C] slave / master?
Sì. Solo un master I 2 C può avviare una trasmissione. Uno slave I 2 C non può parlarti di qualcosa, fino a quando non viene successivamente interrogato dal master (a meno che non si aggiungano segnali di interruzione extra, il che aumenta la complessità complessiva del sistema).
Ignorando la funzione (usata raramente) affinché un dispositivo passi dall'essere un master a uno slave, ciò significa che il master I 2 C deve avere una conoscenza sufficiente dell'intero sistema , per sapere come comunicare con tutti gli I 2 C schiavi su quell'autobus.
Quale domanda dovrei farmi per fare la scelta giusta? (in generale, non per questo sistema specifico)
Pensa a quale MCU nel tuo sistema conosce:
- soprattutto sullo stato generale del sistema e può quindi decidere quando inviare i comandi I 2 C agli slave;
- che i comandi I 2 C devono essere inviati ad ogni slave;
- quali dati devono essere raccolti da ogni slave I 2 C;
- che i dispositivi I 2 C rispondono puramente ai comandi in arrivo (questo si applica alle MCU "S1" - sembra chiaro che sono più adatti ad essere schiavi);
Indipendentemente da quale MCU diventerà il master I 2 C, è necessario progettare l'architettura generale del sistema e considerare quali comandi devono essere inviati a ciascun dispositivo e quanto velocemente devono essere ricevute le risposte. Prova a progettare un sistema che abbia un "master" ovvio e che conosca tutto lo stato del sistema, quindi probabilmente può essere anche il dispositivo master I 2 C.
Tu hai detto:
S3 è il centro del sistema ma, d'altra parte, S2 può inviare più messaggi di S3.
Non è chiaro che "S2" è l'invio di messaggi a . Deve inviare attivamente messaggi a chiunque ? Oppure "S2" può essere interrogato da "S3" come master I 2 C, per ricevere qualunque informazione sensore e interruttore "S2" raccoglie? Se "S2" può essere interrogato da "S3", allora, sulla base della descrizione, sembra chiaro che MCU "S3" potrebbe essere il master I 2 C.
Sono cauto nell'aggiungere ancora un altro MCU (chiamiamolo "S10") per essere il master I 2 C. Questo perché sembra che un MCU "S10" dovrebbe fare un sacco di polling, solo per raccogliere la conoscenza generale dello stato del sistema che è tutto (?) Già noto da "S3". Sembra una duplicazione non necessaria.
Pertanto, a meno che "S3" non sia in grado di eseguire il lavoro a causa del raggiungimento dei suoi limiti di spazio RAM, spazio Flash o cicli della CPU ecc., Potrebbe essere meno complicato avere "S3" che controlla il sistema rendendolo master I 2 C, anziché aggiungere un controller "S10" aggiuntivo.
D'altra parte, se non ti dispiace per la complessità aggiuntiva, l'aggiunta di un controller "S10" complessivo aumenta la modularità (segmentazione) del sistema, poiché "S3" non fa altro che Bluetooth e audio, nient'altro. Ciò potrebbe consentire una maggiore flessibilità per l'aggiunta di nuove funzionalità (impreviste) / MCU aggiuntive in futuro, senza la necessità di modificare il codice in "S3".