Existe-t-il une règle pour déterminer qui sera [I 2 C] esclave / maître?
Oui. Seul un maître I 2 C peut démarrer une transmission. Un esclave I 2 C ne peut pas vous dire quelque chose, jusqu'à ce qu'il soit ensuite interrogé par le maître (sauf si vous ajoutez des signaux d'interruption supplémentaires, ce qui augmente la complexité globale du système).
Ignorant la fonction (rarement utilisée) d'un appareil pour basculer entre être un maître et un esclave, cela signifie que le maître I 2 C doit avoir une connaissance suffisante du système global , pour savoir comment communiquer avec tous les I 2 C esclaves sur ce bus.
Quelle question dois-je me poser pour faire le bon choix? (en général, pas pour ce système spécifique)
Pensez au MCU de votre système qui connaît:
- plus sur l'état général du système, et peut donc décider quand envoyer des commandes I 2 C aux esclaves;
- quelles commandes I 2 C doivent être envoyées à chaque esclave;
- quelles données doivent être collectées auprès de chaque esclave I 2 C;
- quels appareils I 2 C répondent purement aux commandes entrantes (cela s'appliquera à vos MCU "S1" - il semble clair qu'ils sont les plus adaptés pour être des esclaves);
Quel que soit le MCU qui sera le maître I 2 C, vous devez concevoir l'architecture globale du système et déterminer quelles commandes doivent être envoyées à chaque périphérique et à quelle vitesse les réponses doivent être reçues. Essayez de concevoir un système qui a un "maître" évident et connaît tous les états du système, et il peut alors aussi s'agir du périphérique maître I 2 C.
Tu as dit:
S3 est le centre du système mais d'autre part, S2 peut envoyer plus de messages que S3.
On ne sait pas qui envoie des messages « S2 » à . Doit-il envoyer activement des messages à quelqu'un ? Ou "S2" peut-il être interrogé par "S3" en tant que maître I 2 C, pour recevoir les informations de capteur et de commutateur collectées par "S2"? Si "S2" peut être interrogé par "S3", alors, sur la base de la description, il semble clair que "S3" MCU pourrait être le maître I 2 C.
Je suis prudent d'ajouter encore un autre MCU (appelons-le "S10") pour être le maître I 2 C. C'est parce qu'il semble qu'un MCU "S10" devrait faire beaucoup d'interrogations, juste pour rassembler la connaissance globale de l'état du système qui est déjà (?) Déjà connue par "S3". Cela semble être une duplication inutile.
Par conséquent, à moins que "S3" ne puisse pas faire le travail en raison de l'atteinte de ses limites d'espace RAM, d'espace Flash ou de cycles CPU, etc., il peut être moins compliqué de demander à "S3" de contrôler le système en le rendant maître I 2 C, plutôt que d'ajouter un contrôleur "S10" supplémentaire.
D'un autre côté, si cela ne vous dérange pas de la complexité supplémentaire, l'ajout d'un contrôleur global "S10" augmente la modularité (segmentation) du système, car "S3" ne fait que Bluetooth et audio - rien d'autre. Cela pourrait permettre une flexibilité supplémentaire pour ajouter de nouvelles fonctionnalités (imprévues) / MCU supplémentaires à l'avenir, sans avoir besoin de changer le code dans "S3".